Skip to content
Snippets Groups Projects
Unverified Commit 4e32716f authored by Braden Shepherdson's avatar Braden Shepherdson Committed by GitHub
Browse files

Serdes v2 for Metrics (#23868)

parent 0873527b
Branches
Tags
No related merge requests found
......@@ -9,5 +9,6 @@
"Database"
"Dimension"
"Field"
"Metric"
"Setting"
"Table"])
......@@ -58,7 +58,9 @@
:human_readable_field_id (random-key "field" 1000)}}]
;; 20 with just :field_id
[20 {:refs {:field_id (random-key "field" 1000)
:human_readable_field_id ::rs/omit}}]]})
:human_readable_field_id ::rs/omit}}]]
:metric [[30 {:refs {:table_id (random-key "t" 100)
:creator_id (random-key "u" 10)}}]]})
(let [extraction (into [] (extract/extract-metabase {}))
entities (reduce (fn [m entity]
(update m (-> entity :serdes/meta last :model)
......@@ -163,6 +165,16 @@
(update :updated_at u.date/format))
(yaml/from-file (io/file dump-dir "Dimension" filename))))))
(testing "for metrics"
(is (= 30 (count (dir->file-set (io/file dump-dir "Metric")))))
(doseq [{:keys [entity_id name] :as metric} (get entities "Metric")
:let [filename (str entity_id "+" name ".yaml")]]
(is (= (-> metric
(dissoc :serdes/meta)
(update :created_at u.date/format)
(update :updated_at u.date/format))
(yaml/from-file (io/file dump-dir "Metric" filename))))))
(testing "for settings"
(is (= (into {} (for [{:keys [key value]} (get entities "Setting")]
[key value]))
......
......@@ -2,7 +2,8 @@
(:require [clojure.test :refer :all]
[metabase-enterprise.serialization.test-util :as ts]
[metabase-enterprise.serialization.v2.extract :as extract]
[metabase.models :refer [Card Collection Dashboard DashboardCard Database Dimension Field Table User]]
[metabase.models :refer [Card Collection Dashboard DashboardCard Database Dimension Field Metric Table
User]]
[metabase.models.serialization.base :as serdes.base]))
(defn- select-one [model-name where]
......@@ -241,3 +242,27 @@
{:model "Table" :id "Foreign Table"}
{:model "Field" :id "real_field"}]}
(set (serdes.base/serdes-dependencies ser))))))))))
(deftest metrics-test
(ts/with-empty-h2-app-db
(ts/with-temp-dpc [User [{ann-id :id} {:first_name "Ann"
:last_name "Wilson"
:email "ann@heart.band"}]
Database [{db-id :id} {:name "My Database"}]
Table [{no-schema-id :id} {:name "Schemaless Table" :db_id db-id}]
Metric [{m1-id :id
m1-eid :entity_id} {:name "My Metric"
:creator_id ann-id
:table_id no-schema-id}]]
(testing "metrics"
(let [ser (serdes.base/extract-one "Metric" {} (select-one "Metric" [:= :id m1-id]))]
(is (= {:serdes/meta [{:model "Metric" :id m1-eid :label "My Metric"}]
:table_id ["My Database" nil "Schemaless Table"]
:creator_id "ann@heart.band"}
(select-keys ser [:serdes/meta :table_id :creator_id])))
(is (not (contains? ser :id)))
(testing "depend on the Table"
(is (= #{[{:model "Database" :id "My Database"}
{:model "Table" :id "Schemaless Table"}]}
(set (serdes.base/serdes-dependencies ser))))))))))
......@@ -7,7 +7,9 @@
[metabase.models.dependency :as dependency :refer [Dependency]]
[metabase.models.interface :as mi]
[metabase.models.revision :as revision]
[metabase.models.serialization.base :as serdes.base]
[metabase.models.serialization.hash :as serdes.hash]
[metabase.models.serialization.util :as serdes.util]
[metabase.util :as u]
[metabase.util.i18n :refer [tru]]
[metabase.util.schema :as su]
......@@ -95,6 +97,27 @@
dependency/IDependent
{:dependencies metric-dependencies})
;;; ------------------------------------------------- SERIALIZATION --------------------------------------------------
(defmethod serdes.base/serdes-generate-path "Metric"
[_ metric]
(let [base (serdes.base/infer-self-path "Metric" metric)]
[(assoc base :label (:name metric))]))
(defmethod serdes.base/extract-one "Metric"
[_ _ metric]
(-> (serdes.base/extract-one-basics "Metric" metric)
(update :table_id serdes.util/export-table-fk)
(update :creator_id serdes.util/export-fk-keyed 'User :email)))
(defmethod serdes.base/load-xform "Metric" [metric]
(-> metric
serdes.base/load-xform-basics
(update :table_id serdes.util/import-table-fk)
(update :creator_id serdes.util/import-fk-keyed 'User :email)))
(defmethod serdes.base/serdes-dependencies "Metric" [{:keys [table_id]}]
[(serdes.util/table->path table_id)])
;;; ----------------------------------------------------- OTHER ------------------------------------------------------
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment