Skip to content
Snippets Groups Projects
Unverified Commit e8755469 authored by Cam Saul's avatar Cam Saul Committed by GitHub
Browse files

Fix long display names for joined columns from Cards (#32930)

* Fix fallback long display name for Cards

* Test updates
parent 34d212ca
No related branches found
No related tags found
No related merge requests found
......@@ -24,7 +24,7 @@
(mu/defn fallback-display-name :- ::lib.schema.common/non-blank-string
"If for some reason the metadata is unavailable. This is better than returning nothing I guess."
[card-id :- ::lib.schema.id/card]
(i18n/tru "Saved Question {0}" (pr-str card-id)))
(i18n/tru "Question {0}" (pr-str card-id)))
(defmethod lib.metadata.calculation/describe-top-level-key-method :source-card
[query stage-number _k]
......@@ -45,7 +45,30 @@
{:error/message "Card with :dataset-query"}
[:dataset-query :map]])
(mu/defn ^:private card-metadata-columns
(defn- ->card-metadata-column [metadata-providerable card col]
(merge
{:base-type :type/*, :lib/type :metadata/column}
(when-let [field-id (:id col)]
(try
(lib.metadata/field metadata-providerable field-id)
(catch #?(:clj Throwable :cljs :default) _
nil)))
(update-keys col u/->kebab-case-en)
{:lib/type :metadata/column
:lib/source :source/card
:lib/card-id (:id card)
:lib/source-column-alias (:name col)}))
(def ^:private CardColumnMetadata
[:merge
lib.metadata/ColumnMetadata
[:map
[:lib/source [:= :source/card]]]])
(def ^:private CardColumns
[:maybe [:sequential {:min 1} CardColumnMetadata]])
(mu/defn ^:private card-metadata-columns :- CardColumns
[metadata-providerable :- lib.metadata/MetadataProviderable
card :- Card]
(when-let [result-metadata (or (:result-metadata card)
......@@ -56,22 +79,10 @@
(when-let [cols (not-empty (cond
(map? result-metadata) (:columns result-metadata)
(sequential? result-metadata) result-metadata))]
(mapv (fn [col]
(merge
{:base-type :type/*, :lib/type :metadata/column}
(when-let [field-id (:id col)]
(try
(lib.metadata/field metadata-providerable field-id)
(catch #?(:clj Throwable :cljs :default) _
nil)))
(update-keys col u/->kebab-case-en)
{:lib/type :metadata/column
:lib/source :source/card
:lib/card-id (:id card)
:lib/source-column-alias (:name col)}))
(mapv (partial ->card-metadata-column metadata-providerable card)
cols))))
(mu/defn saved-question-metadata :- [:maybe [:sequential {:min 1} lib.metadata.calculation/ColumnMetadataWithSource]]
(mu/defn saved-question-metadata :- CardColumns
"Metadata associated with a Saved Question with `card-id`."
[metadata-providerable :- lib.metadata/MetadataProviderable
card-id :- ::lib.schema.id/card]
......
......@@ -292,7 +292,7 @@
groups)))
(testing `lib/display-info
(testing "Card is not present in MetadataProvider"
(is (=? [{:display-name "Saved Question 1"
(is (=? [{:display-name "Question 1"
:is-from-join true}]
(for [group groups]
(lib/display-info lib.tu/venues-query group)))))
......
......@@ -4,17 +4,21 @@
[metabase.lib.core :as lib]
[metabase.lib.metadata.calculation :as lib.metadata.calculation]
[metabase.lib.test-metadata :as meta]
[metabase.lib.test-util :as lib.tu]))
[metabase.lib.test-util :as lib.tu]
[metabase.util :as u]))
(deftest ^:parallel calculate-names-even-without-metadata-test
(testing "Even if metadata is missing, we should still be able to calculate reasonable display names"
(let [query (-> lib.tu/venues-query
(lib/order-by [:field
{:lib/uuid (str (random-uuid))
:base-type :type/Text}
"TOTAL"]))]
(is (= "Venues, Sorted by Total ascending"
(lib.metadata.calculation/suggested-name query))))))
(doseq [query [(-> lib.tu/venues-query
(lib/order-by (meta/field-metadata :orders :total)))
(-> lib.tu/venues-query
(lib/order-by [:field
{:lib/uuid (str (random-uuid))
:base-type :type/Text}
"TOTAL"]))]]
(testing (str "\nquery =\n" (u/pprint-to-str query))
(is (= "Venues, Sorted by Total ascending"
(lib.metadata.calculation/suggested-name query)))))))
(deftest ^:parallel long-display-name-test
(let [query lib.tu/venues-query
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment