diff --git a/enterprise/backend/test/metabase_enterprise/serialization/v2/extract_test.clj b/enterprise/backend/test/metabase_enterprise/serialization/v2/extract_test.clj index 26a8fcdd2df88c9200c2a545f96bdfe412410423..58960d49e04d75834049a911c6f0d3d7a870b385 100644 --- a/enterprise/backend/test/metabase_enterprise/serialization/v2/extract_test.clj +++ b/enterprise/backend/test/metabase_enterprise/serialization/v2/extract_test.clj @@ -769,7 +769,7 @@ (let [ser (serdes.base/extract-one "Action" {} action)] (is (schema= {:serdes/meta (s/eq [{:model "Action" :id (:entity_id action) :label "my_action"}]) :creator_id (s/eq "ann@heart.band") - :type (s/eq :implicit) + :type (s/eq "implicit") :kind (s/eq "row/update") :created_at OffsetDateTime :model_id (s/eq card-eid-1) @@ -805,6 +805,7 @@ (let [ser (serdes.base/extract-one "Action" {} action)] (is (schema= {:serdes/meta (s/eq [{:model "Action" :id (:entity_id action) :label "my_action"}]) :creator_id (s/eq "ann@heart.band") + :type (s/eq "http") :created_at OffsetDateTime :template (s/eq {}) :model_id (s/eq card-eid-1) @@ -842,6 +843,7 @@ (is (schema= {:serdes/meta (s/eq [{:model "Action" :id (:entity_id action) :label "my_action"}]) + :type (s/eq "query") :creator_id (s/eq "ann@heart.band") :created_at OffsetDateTime :dataset_query (s/eq {:type "native", :native {:native "select 1"}, :database db-id}) diff --git a/enterprise/backend/test/metabase_enterprise/serialization/v2/load_test.clj b/enterprise/backend/test/metabase_enterprise/serialization/v2/load_test.clj index 0b2b5c40a0a74e02d84f4e48b897d0b0d2367d1c..3e0ee17e497d6865e9e4fac552eeea246c2b363f 100644 --- a/enterprise/backend/test/metabase_enterprise/serialization/v2/load_test.clj +++ b/enterprise/backend/test/metabase_enterprise/serialization/v2/load_test.clj @@ -7,7 +7,8 @@ [metabase-enterprise.serialization.v2.ingest :as serdes.ingest] [metabase-enterprise.serialization.v2.load :as serdes.load] [metabase.models - :refer [Card + :refer [Action + Card Collection Dashboard DashboardCard @@ -21,6 +22,7 @@ Timeline TimelineEvent User]] + [metabase.models.action :as action] [metabase.models.serialization.base :as serdes.base] [metabase.util :as u] [schema.core :as s] @@ -939,3 +941,39 @@ :template-tags (get "snippet: things") :snippet-id))))))))) + +(deftest load-action-test + (let [serialized (atom nil) + eid (u/generate-nano-id)] + (ts/with-source-and-dest-dbs + (testing "extraction succeeds" + (ts/with-source-db + (let [db (ts/create! Database :name "my-db") + card (ts/create! Card + :name "the query" + :query_type :native + :dataset true + :database_id (:id db) + :dataset_query {:database (:id db) + :native {:type :native + :native {:query "wow"}}}) + _action-id (action/insert! {:entity_id eid + :name "the action" + :model_id (:id card) + :type :query + :dataset_query "wow" + :database_id (:id db)})] + (reset! serialized (into [] (serdes.extract/extract-metabase {}))) + (let [action-serialized (first (filter (fn [{[{:keys [model id]}] :serdes/meta}] + (and (= model "Action") (= id eid))) + @serialized))] + (is (some? action-serialized)) + (testing ":type should be a string" + (is (string? (:type action-serialized)))))))) + (testing "loading succeeds" + (ts/with-dest-db + (serdes.load/load-metabase (ingestion-in-memory @serialized)) + (let [action (db/select-one Action :entity_id eid)] + (is (some? action)) + (testing ":type should be a keyword again" + (is (keyword? (:type action)))))))))) diff --git a/src/metabase/models/action.clj b/src/metabase/models/action.clj index 44ceb5e50333042b2ee6b661364faf72c4370863..2f4eab8eed26d6d0b5f642c7a13bfec2154bba5b 100644 --- a/src/metabase/models/action.clj +++ b/src/metabase/models/action.clj @@ -26,7 +26,7 @@ "Returns the model from an action type. `action-type` can be a string or a keyword." [action-type] - (case (keyword action-type) + (case action-type :http HTTPAction :implicit ImplicitAction :query QueryAction)) @@ -267,6 +267,7 @@ (-> (serdes.base/extract-one-basics "Action" action) (update :creator_id serdes.util/export-user) (update :model_id serdes.util/export-fk 'Card) + (update :type name) (cond-> (= (:type action) :query) (update :database_id serdes.util/export-fk-keyed 'Database :name)))) @@ -275,6 +276,7 @@ serdes.base/load-xform-basics (update :creator_id serdes.util/import-user) (update :model_id serdes.util/import-fk 'Card) + (update :type keyword) (cond-> (= (:type action) "query") (update :database_id serdes.util/import-fk-keyed 'Database :name)))) @@ -289,7 +291,7 @@ (defmethod serdes.base/serdes-dependencies "Action" [action] (concat [[{:model "Card" :id (:model_id action)}]] - (when (= (:type action) :query) + (when (= (:type action) "query") [[{:model "Database" :id (:database_id action)}]]))) (defmethod serdes.base/storage-path "Action" [action _ctx]