From 338666fa9135858d34ef56729d21ae5835bb616c Mon Sep 17 00:00:00 2001
From: Case Nelson <case@metabase.com>
Date: Mon, 22 May 2023 11:42:37 -0600
Subject: [PATCH] [MLv2] Make long display name available. (#30882)

* [MLv2] Export display-name

* Add long-display-name to display-info

* Removem display-name since it won't be used

* Fix FE tests
---
 frontend/src/metabase-lib/order_by.unit.spec.ts  | 4 ++++
 src/metabase/lib/metadata/calculation.cljc       | 3 +++
 test/metabase/lib/metadata/calculation_test.cljc | 8 ++++++++
 3 files changed, 15 insertions(+)

diff --git a/frontend/src/metabase-lib/order_by.unit.spec.ts b/frontend/src/metabase-lib/order_by.unit.spec.ts
index 5782a713c70..fd6e41481dc 100644
--- a/frontend/src/metabase-lib/order_by.unit.spec.ts
+++ b/frontend/src/metabase-lib/order_by.unit.spec.ts
@@ -20,6 +20,7 @@ describe("order by", () => {
         expect.objectContaining({
           name: "ID",
           displayName: "ID",
+          longDisplayName: "ID",
           effectiveType: "type/BigInteger",
           semanticType: "type/PK",
           isCalculated: false,
@@ -29,6 +30,7 @@ describe("order by", () => {
           table: {
             name: "ORDERS",
             displayName: "Orders",
+            longDisplayName: "Orders",
             isSourceTable: true,
           },
         }),
@@ -42,6 +44,7 @@ describe("order by", () => {
         expect.objectContaining({
           name: "TITLE",
           displayName: "Title",
+          longDisplayName: "Products → Title",
           effectiveType: "type/Text",
           semanticType: "type/Title",
           isCalculated: false,
@@ -51,6 +54,7 @@ describe("order by", () => {
           table: {
             name: "PRODUCTS",
             displayName: "Products",
+            longDisplayName: "Products",
             isSourceTable: false,
           },
         }),
diff --git a/src/metabase/lib/metadata/calculation.cljc b/src/metabase/lib/metadata/calculation.cljc
index 7eb912ffcc8..51be1ec7a1b 100644
--- a/src/metabase/lib/metadata/calculation.cljc
+++ b/src/metabase/lib/metadata/calculation.cljc
@@ -255,6 +255,7 @@
 (mr/register! ::display-info
   [:map
    [:display-name :string]
+   [:long-display-name {:optional true} :string]
    ;; for things that have a Table, e.g. a Field
    [:table {:optional true} [:maybe [:ref ::display-info]]]
    ;; these are derived from the `:lib/source`/`:metabase.lib.metadata/column-source`, but instead of using that value
@@ -308,6 +309,8 @@
      ;; TODO -- not 100% convinced the FE should actually have access to `:name`, can't it use `:display-name`
      ;; everywhere? Determine whether or not this is the case.
      (select-keys x-metadata [:name :display-name :semantic-type])
+     (when-let [long-display-name (display-name query stage-number x :long)]
+       {:long-display-name long-display-name})
      ;; don't return `:base-type`, FE should just use `:effective-type` everywhere and not even need to know
      ;; `:base-type` exists.
      (when-let [effective-type ((some-fn :effective-type :base-type) x-metadata)]
diff --git a/test/metabase/lib/metadata/calculation_test.cljc b/test/metabase/lib/metadata/calculation_test.cljc
index f7e03bc6187..4348678aa86 100644
--- a/test/metabase/lib/metadata/calculation_test.cljc
+++ b/test/metabase/lib/metadata/calculation_test.cljc
@@ -14,3 +14,11 @@
                                    "TOTAL"]))]
       (is (= "Venues, Sorted by Total ascending"
              (lib.metadata.calculation/suggested-name query))))))
+
+(deftest ^:parallel long-display-name-test
+  (let [query (lib/query-for-table-name meta/metadata-provider "VENUES")
+        results (->> query
+                     lib.metadata.calculation/visible-columns
+                     (map (comp :long-display-name #(lib/display-info query 0 %))))]
+    (is (= ["ID" "Name" "Category ID" "Latitude" "Longitude" "Price" "Categories → ID" "Categories → Name"]
+           results))))
-- 
GitLab