Skip to content
Snippets Groups Projects
Unverified Commit 83bf928b authored by Cal Herries's avatar Cal Herries Committed by GitHub
Browse files

Fix serdes for query actions missing database dependency (#28449)

* Fix action loading and extraction of action type

* Remove comment
parent d591f34a
No related branches found
No related tags found
No related merge requests found
......@@ -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})
......
......@@ -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))))))))))
......@@ -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]
......
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