Skip to content

Commit

Permalink
[backport] serialize result metadata for any card (#41131) (#41164)
Browse files Browse the repository at this point in the history
  • Loading branch information
piranha committed Apr 9, 2024
1 parent 36e37aa commit 4abce3c
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 19 deletions.
6 changes: 3 additions & 3 deletions src/metabase/models/card.clj
Expand Up @@ -791,8 +791,8 @@ saved later when it is ready."
(defmethod serdes/extract-query "Card" [_ opts]
(serdes/extract-query-collections Card opts))

(defn- export-result-metadata [card metadata]
(when (and metadata (:dataset card))
(defn- export-result-metadata [metadata]
(when metadata
(for [m metadata]
(-> (dissoc m :fingerprint)
(m/update-existing :table_id serdes/*export-table-fk*)
Expand Down Expand Up @@ -831,7 +831,7 @@ saved later when it is ready."
(update :parameters serdes/export-parameters)
(update :parameter_mappings serdes/export-parameter-mappings)
(update :visualization_settings serdes/export-visualization-settings)
(update :result_metadata (partial export-result-metadata card)))
(update :result_metadata export-result-metadata))
(catch Exception e
(throw (ex-info (format "Failed to export Card: %s" (ex-message e)) {:card card} e)))))

Expand Down
31 changes: 15 additions & 16 deletions test/metabase/models/card_test.clj
Expand Up @@ -627,22 +627,21 @@
(deftest extract-test
(let [metadata (qp/query->expected-cols (mt/mbql-query venues))
query (mt/mbql-query venues)]
(testing "normal cards omit result_metadata"
(t2.with-temp/with-temp [:model/Card {card-id :id} {:dataset_query query
:result_metadata metadata}]
(let [extracted (serdes/extract-one "Card" nil (t2/select-one :model/Card :id card-id))]
(is (not (:dataset extracted)))
(is (nil? (:result_metadata extracted))))))
(testing "dataset cards (models) retain result_metadata"
(t2.with-temp/with-temp [:model/Card {card-id :id} {:dataset true
:dataset_query query
:result_metadata metadata}]
(let [extracted (serdes/extract-one "Card" nil (t2/select-one :model/Card :id card-id))]
(is (:dataset extracted))
(is (string? (:display_name (first (:result_metadata extracted)))))
;; this is a quick comparison, since the actual stored metadata is quite complex
(is (= (map :display_name metadata)
(map :display_name (:result_metadata extracted)))))))))
(testing "every card retains result_metadata"
(t2.with-temp/with-temp [:model/Card {card1-id :id} {:dataset_query query
:result_metadata metadata}
:model/Card {card2-id :id} {:dataset true
:dataset_query query
:result_metadata metadata}]
(doseq [card-id [card1-id card2-id]]
(let [extracted (serdes/extract-one "Card" nil (t2/select-one :model/Card :id card-id))]
;; card2 is model, but card1 is not
(is (= (= card-id card2-id)
(:dataset extracted)))
(is (string? (:display_name (first (:result_metadata extracted)))))
;; this is a quick comparison, since the actual stored metadata is quite complex
(is (= (map :display_name metadata)
(map :display_name (:result_metadata extracted))))))))))

;;; ------------------------------------------ Viz Settings Tests ------------------------------------------

Expand Down

0 comments on commit 4abce3c

Please sign in to comment.