diff --git a/src/metabase/models/card.clj b/src/metabase/models/card.clj index 1ce7f4da9dc6a..df4c1d8fff852 100644 --- a/src/metabase/models/card.clj +++ b/src/metabase/models/card.clj @@ -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*) @@ -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))))) diff --git a/test/metabase/models/card_test.clj b/test/metabase/models/card_test.clj index c606f6c86f84f..37706d80d6887 100644 --- a/test/metabase/models/card_test.clj +++ b/test/metabase/models/card_test.clj @@ -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 ------------------------------------------