Skip to content
Snippets Groups Projects
Commit 99fa5568 authored by Cam Saül's avatar Cam Saül Committed by Cam Saül
Browse files

with-temp* macro :unamused:

parent e3abd529
No related branches found
No related tags found
No related merge requests found
(ns metabase.models.metric-test (ns metabase.models.metric-test
(:require [clojure.tools.macro :refer [symbol-macrolet]] (:require [expectations :refer :all]
[expectations :refer :all]
(metabase.models [database :refer [Database]] (metabase.models [database :refer [Database]]
[hydrate :refer :all] [hydrate :refer :all]
[metric :refer :all] [metric :refer :all]
[table :refer [Table]]) [table :refer [Table]])
[metabase.test.data :refer :all] [metabase.test.data :refer :all]
[metabase.test.data.users :refer :all] [metabase.test.data.users :refer :all]
[metabase.test.util :as tu])) [metabase.test.util :as tu]
[metabase.util :as u]))
(defn user-details (defn- user-details
[username] [username]
(-> (fetch-user username) (dissoc (fetch-user username) :date_joined :last_login))
(dissoc :date_joined :last_login)))
(defn metric-details (defn- metric-details
[{:keys [creator] :as metric}] [{:keys [creator] :as metric}]
(-> metric (-> (dissoc metric :id :table_id :created_at :updated_at)
(dissoc :id :table_id :created_at :updated_at) (update :creator (u/rpartial dissoc :date_joined :last_login))))
(assoc :creator (dissoc creator :date_joined :last_login))))
(defn create-metric-then-select (defn- create-metric-then-select!
[table name description creator definition] [table name description creator definition]
(-> (create-metric table name description creator definition) (metric-details (create-metric! table name description creator definition)))
metric-details))
(defn update-metric-then-select (defn- update-metric-then-select!
[metric] [metric]
(-> (update-metric metric (user->id :crowberto)) (metric-details (update-metric! metric (user->id :crowberto))))
metric-details))
;; create-metric ;; create-metric!
(expect (expect
{:creator_id (user->id :rasta) {:creator_id (user->id :rasta)
:creator (user-details :rasta) :creator (user-details :rasta)
...@@ -39,48 +35,41 @@ ...@@ -39,48 +35,41 @@
:description nil :description nil
:is_active true :is_active true
:definition {:clause ["a" "b"]}} :definition {:clause ["a" "b"]}}
(tu/with-temp Database [{database-id :id}] (tu/with-temp* [Database [{database-id :id}]
(tu/with-temp Table [{:keys [id]} {:db_id database-id}] Table [{:keys [id]} {:db_id database-id}]]
(create-metric-then-select id "I only want *these* things" nil (user->id :rasta) {:clause ["a" "b"]})))) (create-metric-then-select! id "I only want *these* things" nil (user->id :rasta) {:clause ["a" "b"]})))
;; exists-metric? ;; exists-metric?
(expect (expect
[true [true
false] false]
(tu/with-temp Database [{database-id :id}] (tu/with-temp* [Database [{database-id :id}]
(tu/with-temp Table [{:keys [id]} {:db_id database-id}] Table [{table-id :id} {:db_id database-id}]
(tu/with-temp Metric [{:keys [id]} {:creator_id (user->id :rasta) Metric [{metric-id :id} {:table_id table-id
:table_id id :definition {:database 45
:name "Ivory Tower" :query {:filter ["yay"]}}}]]
:description "All the glorious things..." [(exists-metric? metric-id)
:definition {:database 45 (exists-metric? 34)]))
:query {:filter ["yay"]}}}]
[(exists-metric? id)
(exists-metric? 34)]))))
;; retrieve-metric ;; retrieve-metric
(expect (expect
{:creator_id (user->id :rasta) {:creator_id (user->id :rasta)
:creator (user-details :rasta) :creator (user-details :rasta)
:name "Ivory Tower" :name "Toucans in the rainforest"
:description "All the glorious things..." :description "Lookin' for a blueberry"
:is_active true :is_active true
:definition {:database 45 :definition {:database 45
:query {:filter ["yay"]}}} :query {:filter ["yay"]}}}
(tu/with-temp Database [{database-id :id}] (tu/with-temp* [Database [{database-id :id}]
(tu/with-temp Table [{:keys [id]} {:db_id database-id}] Table [{table-id :id} {:db_id database-id}]
(tu/with-temp Metric [{:keys [id]} {:creator_id (user->id :rasta) Metric [{metric-id :id} {:table_id table-id
:table_id id :definition {:database 45
:name "Ivory Tower" :query {:filter ["yay"]}}}]]
:description "All the glorious things..." (let [{:keys [creator] :as metric} (retrieve-metric metric-id)]
:definition {:database 45 (update (dissoc metric :id :table_id :created_at :updated_at)
:query {:filter ["yay"]}}}] :creator (u/rpartial dissoc :date_joined :last_login)))))
(let [{:keys [creator] :as metric} (retrieve-metric id)]
(-> metric
(dissoc :id :table_id :created_at :updated_at)
(assoc :creator (dissoc creator :date_joined :last_login))))))))
;; retrieve-segements ;; retrieve-segements
...@@ -91,32 +80,19 @@ ...@@ -91,32 +80,19 @@
:description nil :description nil
:is_active true :is_active true
:definition {}}] :definition {}}]
(tu/with-temp Database [{database-id :id}] (tu/with-temp* [Database [{database-id :id}]
(tu/with-temp Table [{table-id1 :id} {:db_id database-id}] Table [{table-id-1 :id} {:db_id database-id}]
(tu/with-temp Table [{table-id2 :id} {:db_id database-id}] Table [{table-id-2 :id} {:db_id database-id}]
(tu/with-temp Metric [{segement-id1 :id} {:creator_id (user->id :rasta) Metric [{segement-id-1 :id} {:table_id table-id-1, :name "Metric 1", :description nil}]
:table_id table-id1 Metric [{metric-id-2 :id} {:table_id table-id-2}]
:name "Metric 1" Metric [{metric-id3 :id} {:table_id table-id-1, :is_active false}]]
:definition {}}] (doall (for [metric (u/prog1 (retrieve-metrics table-id-1)
(tu/with-temp Metric [{metric-id2 :id} {:creator_id (user->id :rasta) (assert (= 1 (count <>))))]
:table_id table-id2 (update (dissoc (into {} metric) :id :table_id :created_at :updated_at)
:name "Metric 2" :creator (u/rpartial dissoc :date_joined :last_login))))))
:definition {}}]
(tu/with-temp Metric [{metric-id3 :id} {:creator_id (user->id :rasta)
:table_id table-id1 ;; update-metric!
:name "Metric 3"
:is_active false
:definition {}}]
(let [metrics (retrieve-metrics table-id1)]
(assert (= 1 (count metrics)))
(->> metrics
(mapv #(into {} %)) ; expectations doesn't compare our record type properly
(mapv #(dissoc % :id :table_id :created_at :updated_at))
(mapv (fn [{:keys [creator] :as metric}]
(assoc metric :creator (dissoc creator :date_joined :last_login)))))))))))))
;; update-metric
;; basic update. we are testing several things here ;; basic update. we are testing several things here
;; 1. ability to update the Metric name ;; 1. ability to update the Metric name
;; 2. creator_id cannot be changed ;; 2. creator_id cannot be changed
...@@ -131,23 +107,19 @@ ...@@ -131,23 +107,19 @@
:is_active true :is_active true
:definition {:database 2 :definition {:database 2
:query {:filter ["not" "the toucans you're looking for"]}}} :query {:filter ["not" "the toucans you're looking for"]}}}
(tu/with-temp Database [{database-id :id}] (tu/with-temp* [Database [{database-id :id}]
(tu/with-temp Table [{:keys [id]} {:db_id database-id}] Table [{table-id :id} {:db_id database-id}]
(tu/with-temp Metric [{:keys [id]} {:creator_id (user->id :rasta) Metric [{metric-id :id} {:table_id table-id}]]
:table_id id (update-metric-then-select! {:id metric-id
:name "Toucans in the rainforest" :name "Costa Rica"
:description "Lookin' for a blueberry" :description nil
:definition {}}] :creator_id (user->id :crowberto)
(update-metric-then-select {:id id :table_id 456
:name "Costa Rica" :definition {:database 2
:description nil :query {:filter ["not" "the toucans you're looking for"]}}
:creator_id (user->id :crowberto) :revision_message "Just horsing around"})))
:table_id 456
:definition {:database 2 ;; delete-metric!
:query {:filter ["not" "the toucans you're looking for"]}}
:revision_message "Just horsing around"})))))
;; delete-metric
(expect (expect
{:creator_id (user->id :rasta) {:creator_id (user->id :rasta)
:creator (user-details :rasta) :creator (user-details :rasta)
...@@ -155,15 +127,11 @@ ...@@ -155,15 +127,11 @@
:description "Lookin' for a blueberry" :description "Lookin' for a blueberry"
:is_active false :is_active false
:definition {}} :definition {}}
(tu/with-temp Database [{database-id :id}] (tu/with-temp* [Database [{database-id :id}]
(tu/with-temp Table [{:keys [id]} {:db_id database-id}] Table [{table-id :id} {:db_id database-id}]
(tu/with-temp Metric [{:keys [id]} {:creator_id (user->id :rasta) Metric [{metric-id :id} {:table_id table-id}]]
:table_id id (delete-metric! metric-id (user->id :crowberto) "revision message")
:name "Toucans in the rainforest" (metric-details (retrieve-metric metric-id))))
:description "Lookin' for a blueberry"
:definition {}}]
(delete-metric id (user->id :crowberto) "revision message")
(metric-details (retrieve-metric id))))))
;; ## Metric Revisions ;; ## Metric Revisions
...@@ -180,17 +148,14 @@ ...@@ -180,17 +148,14 @@
:definition {:aggregation ["count"] :definition {:aggregation ["count"]
:filter ["AND" [">" 4 "2014-10-19"]]} :filter ["AND" [">" 4 "2014-10-19"]]}
:is_active true} :is_active true}
(tu/with-temp Database [{database-id :id}] (tu/with-temp* [Database [{database-id :id}]
(tu/with-temp Table [{table-id :id} {:db_id database-id}] Table [{table-id :id} {:db_id database-id}]
(tu/with-temp Metric [metric {:creator_id (user->id :rasta) Metric [metric {:table_id table-id
:table_id table-id :definition {:aggregation ["count"]
:name "Toucans in the rainforest" :filter ["AND" [">" 4 "2014-10-19"]]}}]]
:description "Lookin' for a blueberry" (-> (serialize-metric Metric (:id metric) metric)
:definition {:aggregation ["count"] (update :id boolean)
:filter ["AND" [">" 4 "2014-10-19"]]}}] (update :table_id boolean))))
(-> (serialize-metric Metric (:id metric) metric)
(update :id boolean)
(update :table_id boolean))))))
;; diff-metrics ;; diff-metrics
...@@ -201,16 +166,14 @@ ...@@ -201,16 +166,14 @@
:after "BBB"} :after "BBB"}
:name {:before "Toucans in the rainforest" :name {:before "Toucans in the rainforest"
:after "Something else"}} :after "Something else"}}
(tu/with-temp Database [{database-id :id}] (tu/with-temp* [Database [{database-id :id}]
(tu/with-temp Table [{:keys [id]} {:db_id database-id}] Table [{table-id :id} {:db_id database-id}]
(tu/with-temp Metric [metric {:creator_id (user->id :rasta) Metric [metric {:table_id table-id
:table_id id :definition {:filter ["AND" [">" 4 "2014-10-19"]]}}]]
:name "Toucans in the rainforest" (diff-metrics Metric metric (assoc metric
:description "Lookin' for a blueberry" :name "Something else"
:definition {:filter ["AND" [">" 4 "2014-10-19"]]}}] :description "BBB"
(diff-metrics Metric metric (assoc metric :name "Something else" :definition {:filter ["AND" ["BETWEEN" 4 "2014-07-01" "2014-10-19"]]}))))
:description "BBB"
:definition {:filter ["AND" ["BETWEEN" 4 "2014-07-01" "2014-10-19"]]}))))))
;; test case where definition doesn't change ;; test case where definition doesn't change
(expect (expect
......
This diff is collapsed.
(ns metabase.models.pulse-test (ns metabase.models.pulse-test
(:require [clojure.tools.macro :refer [symbol-macrolet]] (:require [clojure.tools.macro :refer [symbol-macrolet]]
[expectations :refer :all] [expectations :refer :all]
[medley.core :as m]
[metabase.db :as db] [metabase.db :as db]
(metabase.models [card :refer [Card]] (metabase.models [card :refer [Card]]
[hydrate :refer :all] [hydrate :refer :all]
...@@ -11,12 +12,11 @@ ...@@ -11,12 +12,11 @@
[metabase.test.data :refer :all] [metabase.test.data :refer :all]
[metabase.test.data.users :refer :all] [metabase.test.data.users :refer :all]
[metabase.test.util :as tu] [metabase.test.util :as tu]
[medley.core :as m])) [metabase.util :as u]))
(defn user-details (defn- user-details
[username] [username]
(-> (fetch-user username) (dissoc (fetch-user username) :date_joined :last_login))
(dissoc :date_joined :last_login)))
;; create a channel then select its details ;; create a channel then select its details
(defn create-pulse-then-select (defn create-pulse-then-select
...@@ -58,26 +58,20 @@ ...@@ -58,26 +58,20 @@
:schedule_day nil, :schedule_day nil,
:recipients [{:email "foo@bar.com"} :recipients [{:email "foo@bar.com"}
(dissoc (user-details :rasta) :is_superuser :is_qbnewb)]}]} (dissoc (user-details :rasta) :is_superuser :is_qbnewb)]}]}
(tu/with-temp Pulse [{:keys [id]} {:creator_id (user->id :rasta) (tu/with-temp* [Pulse [{pulse-id :id} {:name "Lodi Dodi"}]
:name "Lodi Dodi"}] PulseChannel [{channel-id :id :as channel} {:pulse_id pulse-id
(tu/with-temp PulseChannel [{channel-id :id :as channel} {:pulse_id id :details {:other "stuff"
:channel_type :email :emails ["foo@bar.com"]}}]
:details {:other "stuff" Card [{card-id :id} {:name "Test Card"}]]
:emails ["foo@bar.com"]} (db/ins PulseCard, :pulse_id pulse-id, :card_id card-id, :position 0)
:schedule_type :daily (db/ins PulseChannelRecipient, :pulse_channel_id channel-id, :user_id (user->id :rasta))
:schedule_hour 15}] (-> (dissoc (retrieve-pulse pulse-id) :id :pulse_id :created_at :updated_at)
(tu/with-temp Card [{card-id :id} {:name "Test Card"}] (update :creator (u/rpartial dissoc :date_joined :last_login))
(do (update :cards (fn [cards] (for [card cards]
(db/ins PulseCard :pulse_id id :card_id card-id :position 0) (dissoc card :id))))
(db/ins PulseChannelRecipient :pulse_channel_id channel-id :user_id (user->id :rasta)) (update :channels (fn [channels] (for [channel channels]
(let [{:keys [cards channels creator] :as pulse} (retrieve-pulse id)] (-> (dissoc channel :id :pulse_id :created_at :updated_at)
(-> pulse (m/dissoc-in [:details :emails]))))))))
(dissoc :id :pulse_id :created_at :updated_at)
(assoc :creator (dissoc creator :date_joined :last_login))
(assoc :cards (mapv #(dissoc % :id) cards))
(assoc :channels (for [channel channels]
(-> (dissoc channel :id :pulse_id :created_at :updated_at)
(m/dissoc-in [:details :emails])))))))))))
;; update-pulse-cards ;; update-pulse-cards
...@@ -87,21 +81,19 @@ ...@@ -87,21 +81,19 @@
["card2"] ["card2"]
["card2" "card1"] ["card2" "card1"]
["card1" "card3"]] ["card1" "card3"]]
(tu/with-temp Pulse [{:keys [id]} {:creator_id (user->id :rasta) (tu/with-temp* [Pulse [{pulse-id :id}]
:name (tu/random-name)}] Card [{card-id-1 :id} {:name "card1"}]
(tu/with-temp Card [{card-id-1 :id} {:name "card1"}] Card [{card-id-2 :id} {:name "card2"}]
(tu/with-temp Card [{card-id-2 :id} {:name "card2"}] Card [{card-id-3 :id} {:name "card3"}]]
(tu/with-temp Card [{card-id-3 :id} {:name "card3"}] (let [upd-cards! (fn [cards]
(let [upd-cards (fn [cards] (update-pulse-cards {:id pulse-id} cards)
(update-pulse-cards {:id id} cards) (doall (for [card-id (db/sel :many :field [PulseCard :card_id] :pulse_id pulse-id)]
(->> (db/sel :many PulseCard :pulse_id id) (db/sel :one :field [Card :name] :id card-id))))]
(mapv (fn [{:keys [card_id]}] [(upd-cards! [])
(db/sel :one :field [Card :name] :id card_id)))))] (upd-cards! [card-id-1])
[(upd-cards []) (upd-cards! [card-id-2])
(upd-cards [card-id-1]) (upd-cards! [card-id-2 card-id-1])
(upd-cards [card-id-2]) (upd-cards! [card-id-1 card-id-3])])))
(upd-cards [card-id-2 card-id-1])
(upd-cards [card-id-1 card-id-3])]))))))
;; update-pulse-channels ;; update-pulse-channels
(expect (expect
...@@ -112,17 +104,15 @@ ...@@ -112,17 +104,15 @@
:schedule_frame nil :schedule_frame nil
:recipients [{:email "foo@bar.com"} :recipients [{:email "foo@bar.com"}
(dissoc (user-details :rasta) :is_superuser :is_qbnewb)]} (dissoc (user-details :rasta) :is_superuser :is_qbnewb)]}
(tu/with-temp Pulse [{:keys [id]} {:creator_id (user->id :rasta) (tu/with-temp Pulse [{:keys [id]}]
:name (tu/random-name)}] (update-pulse-channels {:id id} [{:channel_type :email
(do :schedule_type :daily
(update-pulse-channels {:id id} [{:channel_type :email :schedule_hour 4
:schedule_type :daily :recipients [{:email "foo@bar.com"} {:id (user->id :rasta)}]}])
:schedule_hour 4 (-> (db/sel :one PulseChannel :pulse_id id)
:recipients [{:email "foo@bar.com"} {:id (user->id :rasta)}]}]) (hydrate :recipients)
(-> (db/sel :one PulseChannel :pulse_id id) (dissoc :id :pulse_id :created_at :updated_at)
(hydrate :recipients) (m/dissoc-in [:details :emails]))))
(dissoc :id :pulse_id :created_at :updated_at)
(m/dissoc-in [:details :emails])))))
;; create-pulse ;; create-pulse
;; simple example with a single card ;; simple example with a single card
...@@ -169,16 +159,15 @@ ...@@ -169,16 +159,15 @@
:schedule_day nil, :schedule_day nil,
:recipients [{:email "foo@bar.com"} :recipients [{:email "foo@bar.com"}
(dissoc (user-details :crowberto) :is_superuser :is_qbnewb)]}]} (dissoc (user-details :crowberto) :is_superuser :is_qbnewb)]}]}
(tu/with-temp Pulse [{:keys [id]} {:creator_id (user->id :rasta) (tu/with-temp* [Pulse [{pulse-id :id}]
:name "Lodi Dodi"}] Card [{card-id-1 :id} {:name "Test Card"}]
(tu/with-temp Card [{card-id-1 :id} {:name "Test Card"}] Card [{card-id-2 :id} {:name "Bar Card", :display :bar}]]
(tu/with-temp Card [{card-id-2 :id} {:name "Bar Card", :display :bar}] (update-pulse-then-select {:id pulse-id
(update-pulse-then-select {:id id :name "We like to party"
:name "We like to party" :creator_id (user->id :crowberto)
:creator_id (user->id :crowberto) :cards [card-id-2 card-id-1]
:cards [card-id-2 card-id-1] :channels [{:channel_type :email
:channels [{:channel_type :email :schedule_type :daily
:schedule_type :daily :schedule_hour 18
:schedule_hour 18 :recipients [{:email "foo@bar.com"}
:recipients [{:email "foo@bar.com"} {:id (user->id :crowberto)}]}]})))
{:id (user->id :crowberto)}]}]})))))
...@@ -7,7 +7,8 @@ ...@@ -7,7 +7,8 @@
[table :refer [Table]]) [table :refer [Table]])
[metabase.test.data :refer :all] [metabase.test.data :refer :all]
[metabase.test.data.users :refer :all] [metabase.test.data.users :refer :all]
[metabase.test.util :as tu])) [metabase.test.util :as tu]
[metabase.util :as u]))
(defn user-details (defn user-details
[username] [username]
...@@ -39,48 +40,40 @@ ...@@ -39,48 +40,40 @@
:description nil :description nil
:is_active true :is_active true
:definition {:clause ["a" "b"]}} :definition {:clause ["a" "b"]}}
(tu/with-temp Database [{database-id :id}] (tu/with-temp* [Database [{database-id :id}]
(tu/with-temp Table [{:keys [id]} {:db_id database-id}] Table [{table-id :id} {:db_id database-id}]]
(create-segment-then-select id "I only want *these* things" nil (user->id :rasta) {:clause ["a" "b"]})))) (create-segment-then-select table-id "I only want *these* things" nil (user->id :rasta) {:clause ["a" "b"]})))
;; exists-segment? ;; exists-segment?
(expect (expect
[true [true
false] false]
(tu/with-temp Database [{database-id :id}] (tu/with-temp* [Database [{database-id :id}]
(tu/with-temp Table [{:keys [id]} {:db_id database-id}] Table [{table-id :id} {:db_id database-id}]
(tu/with-temp Segment [{:keys [id]} {:creator_id (user->id :rasta) Segment [{segment-id :id} {:table_id table-id}]]
:table_id id [(exists-segment? segment-id)
:name "Ivory Tower" (exists-segment? 3400)]))
:description "All the glorious things..."
:definition {:database 45
:query {:filter ["yay"]}}}]
[(exists-segment? id)
(exists-segment? 34)]))))
;; retrieve-segment ;; retrieve-segment
(expect (expect
{:creator_id (user->id :rasta) {:creator_id (user->id :rasta)
:creator (user-details :rasta) :creator (user-details :rasta)
:name "Ivory Tower" :name "Toucans in the rainforest"
:description "All the glorious things..." :description "Lookin' for a blueberry"
:is_active true :is_active true
:definition {:database 45 :definition {:database 45
:query {:filter ["yay"]}}} :query {:filter ["yay"]}}}
(tu/with-temp Database [{database-id :id}] (tu/with-temp* [Database [{database-id :id}]
(tu/with-temp Table [{:keys [id]} {:db_id database-id}] Table [{table-id :id} {:db_id database-id}]
(tu/with-temp Segment [{:keys [id]} {:creator_id (user->id :rasta) Segment [{segment-id :id} {:table_id table-id
:table_id id :definition {:database 45
:name "Ivory Tower" :query {:filter ["yay"]}}}]]
:description "All the glorious things..." (let [{:keys [creator] :as segment} (retrieve-segment segment-id)]
:definition {:database 45 (-> segment
:query {:filter ["yay"]}}}] (dissoc :id :table_id :created_at :updated_at)
(let [{:keys [creator] :as segment} (retrieve-segment id)] (assoc :creator (dissoc creator :date_joined :last_login))))))
(-> segment
(dissoc :id :table_id :created_at :updated_at)
(assoc :creator (dissoc creator :date_joined :last_login))))))))
;; retrieve-segements ;; retrieve-segements
...@@ -91,29 +84,16 @@ ...@@ -91,29 +84,16 @@
:description nil :description nil
:is_active true :is_active true
:definition {}}] :definition {}}]
(tu/with-temp Database [{database-id :id}] (tu/with-temp* [Database [{database-id :id}]
(tu/with-temp Table [{table-id1 :id} {:db_id database-id}] Table [{table-id-1 :id} {:db_id database-id}]
(tu/with-temp Table [{table-id2 :id} {:db_id database-id}] Table [{table-id-2 :id} {:db_id database-id}]
(tu/with-temp Segment [{segement-id1 :id} {:creator_id (user->id :rasta) Segment [{segement-id-1 :id} {:table_id table-id-1, :name "Segment 1", :description nil}]
:table_id table-id1 Segment [{segment-id-2 :id} {:table_id table-id-2}]
:name "Segment 1" Segment [{segment-id3 :id} {:table_id table-id-1, :is_active false}]]
:definition {}}] (doall (for [segment (u/prog1 (retrieve-segments table-id-1)
(tu/with-temp Segment [{segment-id2 :id} {:creator_id (user->id :rasta) (assert (= 1 (count <>))))]
:table_id table-id2 (-> (dissoc (into {} segment) :id :table_id :created_at :updated_at)
:name "Segment 2" (update :creator (u/rpartial dissoc :date_joined :last_login)))))))
:definition {}}]
(tu/with-temp Segment [{segment-id3 :id} {:creator_id (user->id :rasta)
:table_id table-id1
:name "Segment 3"
:is_active false
:definition {}}]
(let [segments (retrieve-segments table-id1)]
(assert (= 1 (count segments)))
(->> segments
(mapv #(into {} %)) ; expectations doesn't compare our record type properly
(mapv #(dissoc % :id :table_id :created_at :updated_at))
(mapv (fn [{:keys [creator] :as segment}]
(assoc segment :creator (dissoc creator :date_joined :last_login)))))))))))))
;; update-segment ;; update-segment
...@@ -131,21 +111,17 @@ ...@@ -131,21 +111,17 @@
:is_active true :is_active true
:definition {:database 2 :definition {:database 2
:query {:filter ["not" "the toucans you're looking for"]}}} :query {:filter ["not" "the toucans you're looking for"]}}}
(tu/with-temp Database [{database-id :id}] (tu/with-temp* [Database [{database-id :id}]
(tu/with-temp Table [{:keys [id]} {:db_id database-id}] Table [{:keys [id]} {:db_id database-id}]
(tu/with-temp Segment [{:keys [id]} {:creator_id (user->id :rasta) Segment [{:keys [id]} {:table_id id}]]
:table_id id (update-segment-then-select {:id id
:name "Toucans in the rainforest" :name "Costa Rica"
:description "Lookin' for a blueberry" :description nil
:definition {}}] :creator_id (user->id :crowberto)
(update-segment-then-select {:id id :table_id 456
:name "Costa Rica" :definition {:database 2
:description nil :query {:filter ["not" "the toucans you're looking for"]}}
:creator_id (user->id :crowberto) :revision_message "Just horsing around"})))
:table_id 456
:definition {:database 2
:query {:filter ["not" "the toucans you're looking for"]}}
:revision_message "Just horsing around"})))))
;; delete-segment ;; delete-segment
(expect (expect
...@@ -155,15 +131,11 @@ ...@@ -155,15 +131,11 @@
:description "Lookin' for a blueberry" :description "Lookin' for a blueberry"
:is_active false :is_active false
:definition {}} :definition {}}
(tu/with-temp Database [{database-id :id}] (tu/with-temp* [Database [{database-id :id}]
(tu/with-temp Table [{:keys [id]} {:db_id database-id}] Table [{:keys [id]} {:db_id database-id}]
(tu/with-temp Segment [{:keys [id]} {:creator_id (user->id :rasta) Segment [{:keys [id]} {:table_id id}]]
:table_id id (delete-segment id (user->id :crowberto) "revision message")
:name "Toucans in the rainforest" (segment-details (retrieve-segment id))))
:description "Lookin' for a blueberry"
:definition {}}]
(delete-segment id (user->id :crowberto) "revision message")
(segment-details (retrieve-segment id))))))
;; ## Segment Revisions ;; ## Segment Revisions
...@@ -179,16 +151,13 @@ ...@@ -179,16 +151,13 @@
:description "Lookin' for a blueberry" :description "Lookin' for a blueberry"
:definition {:filter ["AND",[">",4,"2014-10-19"]]} :definition {:filter ["AND",[">",4,"2014-10-19"]]}
:is_active true} :is_active true}
(tu/with-temp Database [{database-id :id}] (tu/with-temp* [Database [{database-id :id}]
(tu/with-temp Table [{table-id :id} {:db_id database-id}] Table [{table-id :id} {:db_id database-id}]
(tu/with-temp Segment [segment {:creator_id (user->id :rasta) Segment [segment {:table_id table-id
:table_id table-id :definition {:filter ["AND" [">" 4 "2014-10-19"]]}}]]
:name "Toucans in the rainforest" (-> (serialize-segment Segment (:id segment) segment)
:description "Lookin' for a blueberry" (update :id boolean)
:definition {:filter ["AND",[">",4,"2014-10-19"]]}}] (update :table_id boolean))))
(-> (serialize-segment Segment (:id segment) segment)
(update :id boolean)
(update :table_id boolean))))))
;; diff-segments ;; diff-segments
...@@ -199,16 +168,14 @@ ...@@ -199,16 +168,14 @@
:after "BBB"} :after "BBB"}
:name {:before "Toucans in the rainforest" :name {:before "Toucans in the rainforest"
:after "Something else"}} :after "Something else"}}
(tu/with-temp Database [{database-id :id}] (tu/with-temp* [Database [{database-id :id}]
(tu/with-temp Table [{:keys [id]} {:db_id database-id}] Table [{table-id :id} {:db_id database-id}]
(tu/with-temp Segment [segment {:creator_id (user->id :rasta) Segment [segment {:table_id table-id
:table_id id :definition {:filter ["AND" [">" 4 "2014-10-19"]]}}]]
:name "Toucans in the rainforest" (diff-segments Segment segment (assoc segment
:description "Lookin' for a blueberry" :name "Something else"
:definition {:filter ["AND",[">",4,"2014-10-19"]]}}] :description "BBB"
(diff-segments Segment segment (assoc segment :name "Something else" :definition {:filter ["AND" ["BETWEEN" 4 "2014-07-01" "2014-10-19"]]}))))
:description "BBB"
:definition {:filter ["AND",["BETWEEN",4,"2014-07-01","2014-10-19"]]}))))))
;; test case where definition doesn't change ;; test case where definition doesn't change
(expect (expect
...@@ -217,30 +184,30 @@ ...@@ -217,30 +184,30 @@
(diff-segments Segment (diff-segments Segment
{:name "A" {:name "A"
:description "Unchanged" :description "Unchanged"
:definition {:filter ["AND",[">",4,"2014-10-19"]]}} :definition {:filter ["AND" [">" 4 "2014-10-19"]]}}
{:name "B" {:name "B"
:description "Unchanged" :description "Unchanged"
:definition {:filter ["AND",[">",4,"2014-10-19"]]}})) :definition {:filter ["AND" [">" 4 "2014-10-19"]]}}))
;; first version, so comparing against nil ;; first version so comparing against nil
(expect (expect
{:name {:after "A"} {:name {:after "A"}
:description {:after "Unchanged"} :description {:after "Unchanged"}
:definition {:after {:filter ["AND",[">",4,"2014-10-19"]]}}} :definition {:after {:filter ["AND" [">" 4 "2014-10-19"]]}}}
(diff-segments Segment (diff-segments Segment
nil nil
{:name "A" {:name "A"
:description "Unchanged" :description "Unchanged"
:definition {:filter ["AND",[">",4,"2014-10-19"]]}})) :definition {:filter ["AND" [">" 4 "2014-10-19"]]}}))
;; removals only ;; removals only
(expect (expect
{:definition {:before {:filter ["AND",[">",4,"2014-10-19"],["=",5,"yes"]]} {:definition {:before {:filter ["AND" [">" 4 "2014-10-19"] ["=" 5 "yes"]]}
:after {:filter ["AND",[">",4,"2014-10-19"]]}}} :after {:filter ["AND" [">" 4 "2014-10-19"]]}}}
(diff-segments Segment (diff-segments Segment
{:name "A" {:name "A"
:description "Unchanged" :description "Unchanged"
:definition {:filter ["AND",[">",4,"2014-10-19"],["=",5,"yes"]]}} :definition {:filter ["AND" [">" 4 "2014-10-19"] ["=" 5 "yes"]]}}
{:name "A" {:name "A"
:description "Unchanged" :description "Unchanged"
:definition {:filter ["AND",[">",4,"2014-10-19"]]}})) :definition {:filter ["AND" [">" 4 "2014-10-19"]]}}))
...@@ -9,21 +9,21 @@ ...@@ -9,21 +9,21 @@
;; first-session-for-user ;; first-session-for-user
(expect (expect
"the-greatest-day-ever" "the-greatest-day-ever"
(with-temp User [{:keys [id]} {:first_name (random-name) (with-temp User [{user-id :id} {:first_name (random-name)
:last_name (random-name) :last_name (random-name)
:email (str (random-name) "@metabase.com") :email (str (random-name) "@metabase.com")
:password "nada"}] :password "nada"}]
(k/insert Session (k/insert Session
(k/values [{:id "the-greatest-day-ever" (k/values [{:id "the-greatest-day-ever"
:user_id id :user_id user-id
:created_at (metabase.util/->Timestamp "1980-10-19")} :created_at (metabase.util/->Timestamp "1980-10-19")}
{:id "the-world-of-bi-changes-forever" {:id "the-world-of-bi-changes-forever"
:user_id id :user_id user-id
:created_at (metabase.util/->Timestamp "2015-10-21")} :created_at (metabase.util/->Timestamp "2015-10-21")}
{:id "something-could-have-happened" {:id "something-could-have-happened"
:user_id id :user_id user-id
:created_at (metabase.util/->Timestamp "1999-12-31")} :created_at (metabase.util/->Timestamp "1999-12-31")}
{:id "now" {:id "now"
:user_id id :user_id user-id
:created_at (metabase.util/new-sql-timestamp)}])) :created_at (metabase.util/new-sql-timestamp)}]))
(first-session-for-user id))) (first-session-for-user user-id)))
...@@ -10,6 +10,11 @@ ...@@ -10,6 +10,11 @@
[dashboard :refer [Dashboard]] [dashboard :refer [Dashboard]]
[database :refer [Database]] [database :refer [Database]]
[field :refer [Field]] [field :refer [Field]]
[metric :refer [Metric]]
[pulse :refer [Pulse]]
[pulse-channel :refer [PulseChannel]]
[revision :refer [Revision]]
[segment :refer [Segment]]
[table :refer [Table]]))) [table :refer [Table]])))
(declare $->prop) (declare $->prop)
...@@ -82,28 +87,45 @@ ...@@ -82,28 +87,45 @@
(defprotocol ^:private WithTempDefaults (defprotocol ^:private WithTempDefaults
(^:private with-temp-defaults [this])) (^:private with-temp-defaults [this]))
(u/strict-extend Object WithTempDefaults {:with-temp-defaults (constantly nil)}) (u/strict-extend Object WithTempDefaults {:with-temp-defaults (constantly nil)})
(u/strict-extend (class Card) WithTempDefaults {:with-temp-defaults (fn [_] {:creator_id ((resolve 'metabase.test.data.users/user->id) :rasta) (u/strict-extend (class Card) WithTempDefaults {:with-temp-defaults (fn [_] {:creator_id ((resolve 'metabase.test.data.users/user->id) :rasta)
:dataset_query {} :dataset_query {}
:display :table :display :table
:name (random-name) :name (random-name)
:public_perms common/perms-none :public_perms common/perms-none
:visualization_settings {}})}) :visualization_settings {}})})
(u/strict-extend (class Dashboard) WithTempDefaults {:with-temp-defaults (fn [_] {:creator_id ((resolve 'metabase.test.data.users/user->id) :rasta) (u/strict-extend (class Dashboard) WithTempDefaults {:with-temp-defaults (fn [_] {:creator_id ((resolve 'metabase.test.data.users/user->id) :rasta)
:name (random-name) :name (random-name)
:public_perms 0})}) :public_perms 0})})
(u/strict-extend (class Database) WithTempDefaults {:with-temp-defaults (fn [_] {:details {} (u/strict-extend (class Database) WithTempDefaults {:with-temp-defaults (fn [_] {:details {}
:engine :yeehaw :engine :yeehaw
:is_sample false :is_sample false
:name (random-name)})}) :name (random-name)})})
(u/strict-extend (class Field) WithTempDefaults {:with-temp-defaults (fn [_] {:active true (u/strict-extend (class Field) WithTempDefaults {:with-temp-defaults (fn [_] {:active true
:base_type :TextField :base_type :TextField
:field_type :info :field_type :info
:name (random-name) :name (random-name)
:position 1 :position 1
:preview_display true})}) :preview_display true})})
(u/strict-extend (class Table) WithTempDefaults {:with-temp-defaults (fn [_] {:active true (u/strict-extend (class Metric) WithTempDefaults {:with-temp-defaults (fn [_] {:creator_id ((resolve 'metabase.test.data.users/user->id) :rasta)
:name (random-name)})}) :definition {}
:description "Lookin' for a blueberry"
:name "Toucans in the rainforest"})})
(u/strict-extend (class Pulse) WithTempDefaults {:with-temp-defaults (fn [_] {:creator_id ((resolve 'metabase.test.data.users/user->id) :rasta)
:name (random-name)})})
(u/strict-extend (class PulseChannel) WithTempDefaults {:with-temp-defaults (constantly {:channel_type :email
:details {}
:schedule_type :daily
:schedule_hour 15})})
(u/strict-extend (class Revision) WithTempDefaults {:with-temp-defaults (fn [_] {:user_id ((resolve 'metabase.test.data.users/user->id) :rasta)
:is_creation false
:is_reversion false})})
(u/strict-extend (class Segment) WithTempDefaults {:with-temp-defaults (fn [_] {:creator_id ((resolve 'metabase.test.data.users/user->id) :rasta)
:definition {}
:description "Lookin' for a blueberry"
:name "Toucans in the rainforest"})})
(u/strict-extend (class Table) WithTempDefaults {:with-temp-defaults (fn [_] {:active true
:name (random-name)})})
(defn do-with-temp (defn do-with-temp
......
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