diff --git a/src/metabase/util.clj b/src/metabase/util.clj index 689667dc69ce3a65922e55b13425c0dd4ab4f75b..870686898f7c1f05c388c675721c21a4f35cbf70 100644 --- a/src/metabase/util.clj +++ b/src/metabase/util.clj @@ -229,7 +229,7 @@ Function is resolved (and its namespace required, if need be) at runtime. Useful for avoiding circular dependencies. - (def ^:private table->id (runtime-resolved-fn 'metabase.test-data 'table->id)) + (def ^:private table->id (runtime-resolved-fn 'metabase.test.data 'table->id)) (table->id :users) -> 4" [orig-namespace orig-fn-name] {:pre [(symbol? orig-namespace) diff --git a/test/metabase/api/card_test.clj b/test/metabase/api/card_test.clj index e480256b49853a86224e7e9f7ecd427a4b9232e0..c9ee01a21ca601909eb3da46e3533b92e0fb7974 100644 --- a/test/metabase/api/card_test.clj +++ b/test/metabase/api/card_test.clj @@ -5,9 +5,9 @@ [metabase.db :refer :all] (metabase.models [card :refer [Card]] [common :as common]) + [metabase.test.data :refer :all] [metabase.test.data.users :refer :all] - [metabase.test.util :refer [match-$ expect-eval-actual-first random-name with-temp]] - [metabase.test-data :refer :all])) + [metabase.test.util :refer [match-$ expect-eval-actual-first random-name with-temp]])) ;; # CARD LIFECYCLE diff --git a/test/metabase/api/common_test.clj b/test/metabase/api/common_test.clj index 220f54402121a95a542b2721220ac6740c6d72ef..cba0ded0726c3232ef927b70cc5343317ec975f0 100644 --- a/test/metabase/api/common_test.clj +++ b/test/metabase/api/common_test.clj @@ -2,7 +2,7 @@ (:require [expectations :refer :all] [metabase.api.common :refer :all] [metabase.api.common.internal :refer :all] - [metabase.test-data :refer :all] + [metabase.test.data :refer :all] [metabase.test.util :refer :all] [metabase.util :refer [regex= regex?]]) (:import com.metabase.corvus.api.ApiException)) diff --git a/test/metabase/api/dash_test.clj b/test/metabase/api/dash_test.clj index c498b01f9a0da186882f5af7b73ad0fb5bc95d45..e12bc4e94e3ee617804b50261c104626330c849d 100644 --- a/test/metabase/api/dash_test.clj +++ b/test/metabase/api/dash_test.clj @@ -10,9 +10,9 @@ [dashboard :refer [Dashboard]] [dashboard-card :refer [DashboardCard]] [user :refer [User]]) + [metabase.test.data :refer :all] [metabase.test.data.users :refer :all] - [metabase.test.util :refer [match-$ expect-eval-actual-first random-name with-temp]] - [metabase.test-data :refer :all])) + [metabase.test.util :refer [match-$ expect-eval-actual-first random-name with-temp]])) ;; # DASHBOARD LIFECYCLE diff --git a/test/metabase/api/meta/dataset_test.clj b/test/metabase/api/meta/dataset_test.clj index acd749afdbf901bb73b36c87ab6df9d71f0efb2d..493cbc982cca84b04ae9495975280026c7ee5931 100644 --- a/test/metabase/api/meta/dataset_test.clj +++ b/test/metabase/api/meta/dataset_test.clj @@ -4,9 +4,9 @@ [korma.core :refer :all] [metabase.db :refer :all] [metabase.models.query-execution :refer [QueryExecution]] + [metabase.test.data :refer :all] [metabase.test.data.users :refer :all] - [metabase.test.util :refer [match-$ expect-eval-actual-first]] - [metabase.test-data :refer :all])) + [metabase.test.util :refer [match-$ expect-eval-actual-first]])) ;;; ## POST /api/meta/dataset ;; Just a basic sanity check to make sure Query Processor endpoint is still working correctly. diff --git a/test/metabase/api/meta/db_test.clj b/test/metabase/api/meta/db_test.clj index 6c5b830b7b5dd83c8739c55fd9624f5a8b0800f5..82a8a0b00828a82837a858edc89ea90611856f05 100644 --- a/test/metabase/api/meta/db_test.clj +++ b/test/metabase/api/meta/db_test.clj @@ -5,9 +5,9 @@ [metabase.driver.mongo.test-data :as mongo-test-data] (metabase.models [database :refer [Database]] [table :refer [Table]]) + [metabase.test.data :refer :all] (metabase.test.data [datasets :as datasets] [users :refer :all]) - [metabase.test-data :refer :all] [metabase.test.util :refer [match-$ random-name expect-eval-actual-first]])) ;; HELPER FNS diff --git a/test/metabase/api/meta/field_test.clj b/test/metabase/api/meta/field_test.clj index 16dab6f284a6e31aec9fd5f713eeb4b244e6b106..3437aa57d79782746bf815ebd0e7dd8552f0a0dc 100644 --- a/test/metabase/api/meta/field_test.clj +++ b/test/metabase/api/meta/field_test.clj @@ -4,8 +4,8 @@ (metabase.models [field :refer [Field]] [field-values :refer [FieldValues]] [table :refer [Table]]) + [metabase.test.data :refer :all] [metabase.test.data.users :refer :all] - [metabase.test-data :refer :all] [metabase.test.util :refer [match-$ expect-eval-actual-first]])) diff --git a/test/metabase/api/meta/table_test.clj b/test/metabase/api/meta/table_test.clj index 3ff8f170895df45ac2efdbb0af3bf06f546ea589..c166917e70e214340cff84bcb4eb0492c3137798 100644 --- a/test/metabase/api/meta/table_test.clj +++ b/test/metabase/api/meta/table_test.clj @@ -8,9 +8,9 @@ (metabase.models [field :refer [Field]] [foreign-key :refer [ForeignKey]] [table :refer [Table]]) + [metabase.test.data :refer :all] (metabase.test.data [datasets :as datasets, :refer [*dataset* with-dataset-when-testing]] [users :refer :all]) - [metabase.test-data :refer :all] [metabase.test-data.data :as data] [metabase.test.util :refer [match-$ expect-eval-actual-first]])) diff --git a/test/metabase/api/session_test.clj b/test/metabase/api/session_test.clj index 0e106f7aebe5d1b554afd2a31d138783a9223c44..f07fcbedb6b5ece972cdf80e0cc97ce24a515c52 100644 --- a/test/metabase/api/session_test.clj +++ b/test/metabase/api/session_test.clj @@ -4,12 +4,11 @@ [korma.core :refer :all] [metabase.db :refer :all] [metabase.http-client :refer :all] - [metabase.test-data :refer :all] (metabase.models [session :refer [Session]] [user :refer [User]]) + [metabase.test.data :refer :all] [metabase.test.data.users :refer :all] - [metabase.test.util :refer [random-name expect-eval-actual-first]] - [metabase.test-data :refer :all])) + [metabase.test.util :refer [random-name expect-eval-actual-first]])) ;; ## POST /api/session ;; Test that we can login diff --git a/test/metabase/api/setting_test.clj b/test/metabase/api/setting_test.clj index 6591352acd0876614d3df199aed4ff941565ae66..e5acf2e240d45ba6acaa7040da9af72f91043cab 100644 --- a/test/metabase/api/setting_test.clj +++ b/test/metabase/api/setting_test.clj @@ -5,9 +5,9 @@ setting-exists? test-setting-1 test-setting-2]]) - [metabase.test.data.users :refer :all] - [metabase.test-data :refer :all] - [metabase.test.util :refer :all])) + (metabase.test [data :refer :all] + [util :refer :all]) + [metabase.test.data.users :refer :all])) ;; ## Helper Fns (defn fetch-all-settings [] diff --git a/test/metabase/api/setup_test.clj b/test/metabase/api/setup_test.clj index 96b1364dd5a5e0a95bbf35df85c61729a733f509..0f60fc61a93905381dbf3a9a68578f1bf0a17ba9 100644 --- a/test/metabase/api/setup_test.clj +++ b/test/metabase/api/setup_test.clj @@ -6,8 +6,8 @@ (metabase.models [session :refer [Session]] [user :refer [User]]) [metabase.setup :as setup] - [metabase.test.util :refer [match-$ random-name expect-eval-actual-first]] - [metabase.test-data :refer :all])) + (metabase.test [data :refer :all] + [util :refer [match-$ random-name expect-eval-actual-first]]))) ;; ## POST /api/setup/user diff --git a/test/metabase/api/user_test.clj b/test/metabase/api/user_test.clj index b1bfe01aa496301dfa326b9f93c8e527b3ce2325..07b6ab2b49c639c92ef7d09d185e5884df59778a 100644 --- a/test/metabase/api/user_test.clj +++ b/test/metabase/api/user_test.clj @@ -7,9 +7,9 @@ [metabase.middleware.auth :as auth] (metabase.models [session :refer [Session]] [user :refer [User]]) + [metabase.test.data :refer :all] [metabase.test.data.users :refer :all] - [metabase.test.util :refer [match-$ random-name expect-eval-actual-first]] - [metabase.test-data :refer :all])) + [metabase.test.util :refer [match-$ random-name expect-eval-actual-first]])) ;; ## /api/user/* AUTHENTICATION Tests ;; We assume that all endpoints for a given context are enforced by the same middleware, so we don't run the same diff --git a/test/metabase/bootstrap.clj b/test/metabase/bootstrap.clj index 060975b918595e7605990f77bd74cc608db69272..148fec468e544e364387e223c78c4f92bbd23337 100644 --- a/test/metabase/bootstrap.clj +++ b/test/metabase/bootstrap.clj @@ -1,9 +1,9 @@ (ns metabase.bootstrap "Functions for creating new Orgs/Users from the command-line / REPL." - (:require (metabase [db :refer :all] - [test-data :as data]) + (:require [metabase.db :refer :all] (metabase.models [database :refer [Database]] - [user :refer [User]]))) + [user :refer [User]]) + [metabase.test.data :refer :all])) (declare bootstrap-user prompt-read-line diff --git a/test/metabase/db/metadata_queries_test.clj b/test/metabase/db/metadata_queries_test.clj index e8cd86a03a51e8e0735a66fad1101ce0410628a0..d601f37ff4c383867e613431a6331ec1d2a2dc07 100644 --- a/test/metabase/db/metadata_queries_test.clj +++ b/test/metabase/db/metadata_queries_test.clj @@ -1,10 +1,9 @@ (ns metabase.db.metadata-queries-test (:require [expectations :refer :all] - (metabase [db :refer :all] - [test-data :refer :all] - test-setup) + [metabase.db :refer :all] [metabase.db.metadata-queries :refer :all] - [metabase.models.field :refer [Field]])) + [metabase.models.field :refer [Field]] + [metabase.test.data :refer :all])) (defn- fetch-field [table-kw field-kw] (sel :one Field :id (field->id table-kw field-kw))) diff --git a/test/metabase/driver/generic_sql/connection_test.clj b/test/metabase/driver/generic_sql/connection_test.clj index ed6a4f7eabe56e8af0fab85598351adbc8fe672d..913354ebef868c295a0f068918aed8e823d6f5d7 100644 --- a/test/metabase/driver/generic_sql/connection_test.clj +++ b/test/metabase/driver/generic_sql/connection_test.clj @@ -3,7 +3,7 @@ [metabase.db :refer [sel]] [metabase.driver :as driver] [metabase.models.database :refer [Database]] - [metabase.test-data :refer :all])) + [metabase.test.data :refer :all])) ;; ## TESTS FOR CAN-CONNECT? diff --git a/test/metabase/driver/generic_sql/native_test.clj b/test/metabase/driver/generic_sql/native_test.clj index 5ae45ad46440675b5c661816a7040a5b929a703c..68a5a72c46d2af2103855a9bfa0a7d7c3c51cb78 100644 --- a/test/metabase/driver/generic_sql/native_test.clj +++ b/test/metabase/driver/generic_sql/native_test.clj @@ -3,7 +3,7 @@ [colorize.core :as color] [expectations :refer :all] [metabase.driver :as driver] - [metabase.test-data :refer :all])) + [metabase.test.data :refer :all])) ;; Just check that a basic query works (expect {:status :completed diff --git a/test/metabase/driver/generic_sql/query_processor_test.clj b/test/metabase/driver/generic_sql/query_processor_test.clj index 61e771cf86e81eee07e04d81d6db30ef6fd2f08f..87b55b793140a8ccead5bc99d2013693dbcc8838 100644 --- a/test/metabase/driver/generic_sql/query_processor_test.clj +++ b/test/metabase/driver/generic_sql/query_processor_test.clj @@ -5,7 +5,7 @@ [expectations :refer :all] [metabase.driver :as driver] [metabase.driver.query-processor :refer [max-result-rows]] - [metabase.test-data :refer [db-id table->id field->id]])) + [metabase.test.data :refer [db-id table->id field->id]])) ;; # ERROR RESPONSES diff --git a/test/metabase/driver/generic_sql_test.clj b/test/metabase/driver/generic_sql_test.clj index a66647ffc56d10ba867c12c3b599218b445829d0..547c062bae81ce206c74e50044e5797dcd183737 100644 --- a/test/metabase/driver/generic_sql_test.clj +++ b/test/metabase/driver/generic_sql_test.clj @@ -9,7 +9,7 @@ (metabase.models [field :refer [Field]] [foreign-key :refer [ForeignKey]] [table :refer [Table]]) - [metabase.test-data :refer :all] + [metabase.test.data :refer :all] [metabase.test.util :refer [resolve-private-fns]])) (def users-table diff --git a/test/metabase/driver/sync_test.clj b/test/metabase/driver/sync_test.clj index 0c6d410a8f886940575318c05db3b85a79ec5d28..c4e8ea3f52516814262dd9e25b2b7bdc027c6c81 100644 --- a/test/metabase/driver/sync_test.clj +++ b/test/metabase/driver/sync_test.clj @@ -10,8 +10,8 @@ (metabase.models [field :refer [Field]] [foreign-key :refer [ForeignKey]] [table :refer [Table]]) - [metabase.test-data :refer :all] - [metabase.test.util :refer [resolve-private-fns]])) + (metabase.test [data :refer :all] + [util :refer [resolve-private-fns]]))) (def users-table (delay (sel :one Table :name "USERS"))) diff --git a/test/metabase/middleware/auth_test.clj b/test/metabase/middleware/auth_test.clj index c19883f66b67346639cf7feb4f34f51dd1732ee3..871143d14a425766ed2ab26b17fec3b7b4e5dec7 100644 --- a/test/metabase/middleware/auth_test.clj +++ b/test/metabase/middleware/auth_test.clj @@ -5,8 +5,8 @@ [metabase.api.common :refer [*current-user-id* *current-user*]] [metabase.middleware.auth :refer :all] [metabase.models.session :refer [Session]] + [metabase.test.data :refer :all] [metabase.test.data.users :refer :all] - [metabase.test-data :refer :all] [metabase.util :as util])) ;; =========================== TEST wrap-sessionid middleware =========================== diff --git a/test/metabase/models/field_test.clj b/test/metabase/models/field_test.clj index 34d7a7412b8ab612b58ee299ffffaf07e579604b..4bdc0354789a96a3df6011a096d44e2f31ef858f 100644 --- a/test/metabase/models/field_test.clj +++ b/test/metabase/models/field_test.clj @@ -3,7 +3,7 @@ [metabase.db :refer :all] (metabase.models [field :refer :all] [field-values :refer :all]) - [metabase.test-data :refer :all])) + [metabase.test.data :refer :all])) ;; Check that setting a Field's special_type to :category will cause a corresponding FieldValues to be created asynchronously (expect diff --git a/test/metabase/models/hydrate_test.clj b/test/metabase/models/hydrate_test.clj index 20dd60e1b53e7cd472f41515892ee07b082b1a87..bf98426bc2b7e51c829d403f7186bd8ca7806a83 100644 --- a/test/metabase/models/hydrate_test.clj +++ b/test/metabase/models/hydrate_test.clj @@ -2,9 +2,9 @@ (:require [expectations :refer :all] [medley.core :as m] [metabase.models.hydrate :refer :all] - [metabase.test.data.users :refer :all] - [metabase.test-data :refer :all] - [metabase.test.util :refer :all])) + (metabase.test [data :refer :all] + [util :refer :all]) + [metabase.test.data.users :refer :all])) (def d1 (delay 1)) (def d2 (delay 2)) diff --git a/test/metabase/models/setting_test.clj b/test/metabase/models/setting_test.clj index db8dede3e830c35714acaf9908283691de83aac2..f13bc6a0fde49cc010b70c679b3bd43bbd32214d 100644 --- a/test/metabase/models/setting_test.clj +++ b/test/metabase/models/setting_test.clj @@ -1,10 +1,10 @@ (ns metabase.models.setting-test (:require [expectations :refer :all] [medley.core :as m] - (metabase [db :refer [sel]] - [test-data :refer :all]) + [metabase.db :refer [sel]] [metabase.models.setting :refer [defsetting Setting] :as setting] - [metabase.test.util :refer :all])) + (metabase.test [data :refer :all] + [util :refer :all]))) ;; ## TEST SETTINGS DEFINITIONS ;; TODO! These don't get loaded by `lein ring server` unless this file is touched diff --git a/test/metabase/test/data.clj b/test/metabase/test/data.clj index de6f4bb88deeb94986edcfe8937ba19922e8543f..a00704db5516029dd3700e0f19f9171aac4ff5e2 100644 --- a/test/metabase/test/data.clj +++ b/test/metabase/test/data.clj @@ -5,43 +5,16 @@ [metabase.db :refer :all] [metabase.driver :as driver] (metabase.models [database :refer [Database]] - [field :refer [Field] :as field]) - [metabase.test.data.interface :refer :all]) + [field :refer [Field] :as field] + [table :refer [Table]]) + (metabase.test.data [data :as data] + [h2 :as h2] + [interface :refer :all])) (:import clojure.lang.Keyword (metabase.test.data.interface DatabaseDefinition FieldDefinition TableDefinition))) -;; ## Functions for Creating New Definitions - -(defn create-field-definition - "Create a new `FieldDefinition`; verify its values." - ^FieldDefinition [{:keys [field-name base-type field-type special-type fk], :as field-definition-map}] - (assert (contains? field/base-types base-type)) - (when field-type - (assert (contains? field/field-types field-type))) - (when special-type - (assert (contains? field/special-types special-type))) - (map->FieldDefinition field-definition-map)) - -(defn create-table-definition - "Convenience for creating a `TableDefinition`." - ^TableDefinition [^String table-name field-definition-maps rows] - (map->TableDefinition {:table-name table-name - :rows rows - :field-definitions (mapv create-field-definition field-definition-maps) - :database-definition (promise)})) - -(defn create-database-definition - "Convenience for creating a new `DatabaseDefinition`." - ^DatabaseDefinition [^String database-name & table-name+field-definition-maps+rows] - {:pre [(string? database-name) - (not (s/blank? database-name))]} - (map->DatabaseDefinition {:database-name database-name - :table-definitions (mapv (partial apply create-table-definition) - table-name+field-definition-maps+rows)})) - - ;; ## Loading / Deleting Test Datasets (defn get-or-create-database! @@ -104,4 +77,78 @@ (drop-physical-db! dataset-loader database-definition)) -;; ## Helper Functions for Writing Tests +;; ## Helper Functions for Using the Default (H2) Dataset For Writing Tests + +(def test-db + "The test `Database` object." + (delay (get-or-create-database! (h2/dataset-loader) data/test-data))) + +(def db-id + "The ID of the test `Database`." + (delay (assert @test-db) + (:id @test-db))) + +(def ^{:arglists '([[table-name]])} + table->id + "Return the ID of a Table with TABLE-NAME. + + (table->id :venues) -> 12" + (memoize + (fn [table-name] + {:pre [(keyword? table-name)] + :post [(integer? %) + (not (zero? %))]} + (sel :one :id Table :name (s/upper-case (name table-name)), :db_id @db-id)))) + +(def ^{:arglists '([table-name field-name])} + field->id + "Return the ID of a Field with FIELD-NAME belonging to Table with TABLE-NAME. + + (field->id :checkins :venue_id) -> 4" + (memoize + (fn [table-name field-name] + {:pre [(keyword? table-name) + (keyword? field-name)] + :post [(integer? %) + (not (zero? %))]} + (sel :one :id Field :name (s/upper-case (name field-name)), :table_id (table->id table-name))))) + +(defn table-name->table + "Fetch `Table` with TABLE-NAME." + [table-name] + {:pre [(keyword? table-name)] + :post [(map? %)]} + (sel :one Table :id (table->id (s/upper-case (name table-name))))) + + +;; ## TODO! with-temp-table and related macros + +;; DEPRECATED ! Need to rewrite this to use the new TableDefinition stuff +;; (defmacro with-temp-table +;; "Execute BODY with a temporary Table that will be dropped afterward. +;; The korma entity representing the Table is bound to TABLE-BINDING. +;; FIELDS-MAP should be a map of FIELD-NAME -> SQL-TYPE. + +;; (with-temp-table [table {:name \"VARCHAR(254)\"}] +;; (insert table (values [{:name \"A\"} +;; {:name \"B\"}])) +;; (select table values (where {:name \"A\"})))" +;; [[table-binding fields-map] & body] +;; {:pre [(map? fields-map)]} +;; (let [table-name (name (gensym "TABLE__")) +;; formatted-fields (->> fields-map +;; (map (fn [[field-name field-type]] +;; (format "\"%s\" %s" (.toUpperCase ^String (name field-name)) (name field-type)))) +;; (interpose ", ") +;; (reduce str))] +;; `(do (get-or-create-database! (h2/dataset-loader) data/test-data) +;; (h2/exec-sql data/test-data (format "DROP TABLE IF EXISTS \"%s\";" ~table-name)) +;; (h2/exec-sql data/test-data (format "CREATE TABLE \"%s\" (%s, \"ID\" BIGINT AUTO_INCREMENT, PRIMARY KEY (\"ID\"));" ~table-name ~formatted-fields)) +;; (let [~table-binding (h2/korma-entity (map->TableDefinition {:table-name ~table-name}) +;; data/test-data)] +;; (try +;; ~@body +;; (catch Throwable e# +;; (println "E: " e#)) +;; (finally +;; (h2/exec-sql data/test-data (format "DROP TABLE \"%s\";" ~table-name)))))))) diff --git a/test/metabase/test/data/data.clj b/test/metabase/test/data/data.clj index fc8a284ca5f111848a68d8cfbfc2fec2dd2c6bd5..246a42782b43ce0ad81df1292b194a618f54b96f 100644 --- a/test/metabase/test/data/data.clj +++ b/test/metabase/test/data/data.clj @@ -1,7 +1,7 @@ (ns metabase.test.data.data "The `DatabaseDefinition` and data of the primary test dataset." - (:require [metabase.test.data :refer :all] - [metabase.test-data.data :as test-data]) + (:require [metabase.test-data.data :as test-data] + [metabase.test.data.interface :refer :all]) (:import metabase.test.data.interface.DatabaseDefinition)) ;; ## Test Database / Tables / Fields diff --git a/test/metabase/test/data/datasets.clj b/test/metabase/test/data/datasets.clj index 4e951e15ac308e688fe250645a1c891911ae2a94..5b0551b59111fdac97106a0bf492a3cab457716d 100644 --- a/test/metabase/test/data/datasets.clj +++ b/test/metabase/test/data/datasets.clj @@ -6,7 +6,7 @@ [environ.core :refer [env]] [expectations :refer :all] [metabase.driver.mongo.test-data :as mongo-data] - [metabase.test-data :as generic-sql-data])) + [metabase.test.data :as generic-sql-data])) ;; # IDataset @@ -63,14 +63,14 @@ :DateField)) -;; ## Generic SQL +;; ## Generic SQL (H2) (deftype GenericSqlDriverData [] IDataset (load-data! [_] @generic-sql-data/test-db (assert (integer? @generic-sql-data/db-id))) - (db [_] + (db [this] @generic-sql-data/test-db) (table-name->table [_ table-name] (generic-sql-data/table-name->table table-name)) diff --git a/test/metabase/test/data/interface.clj b/test/metabase/test/data/interface.clj index 23f1ac4dcb7bc4e5fb9e3ee459e885dbbf218f78..dac5e94f314c983630ad750e5fd820583ba92ea2 100644 --- a/test/metabase/test/data/interface.clj +++ b/test/metabase/test/data/interface.clj @@ -80,3 +80,33 @@ (drop-physical-table! [this ^DatabaseDefinition database-definition, ^TableDefinition table-definition] "Drop the DBMS table/collection/etc. associated with TABLE-DEFINITION.")) + + +;; ## Helper Functions for Creating New Definitions + +(defn create-field-definition + "Create a new `FieldDefinition`; verify its values." + ^FieldDefinition [{:keys [field-name base-type field-type special-type fk], :as field-definition-map}] + (assert (contains? field/base-types base-type)) + (when field-type + (assert (contains? field/field-types field-type))) + (when special-type + (assert (contains? field/special-types special-type))) + (map->FieldDefinition field-definition-map)) + +(defn create-table-definition + "Convenience for creating a `TableDefinition`." + ^TableDefinition [^String table-name field-definition-maps rows] + (map->TableDefinition {:table-name table-name + :rows rows + :field-definitions (mapv create-field-definition field-definition-maps) + :database-definition (promise)})) + +(defn create-database-definition + "Convenience for creating a new `DatabaseDefinition`." + ^DatabaseDefinition [^String database-name & table-name+field-definition-maps+rows] + {:pre [(string? database-name) + (not (s/blank? database-name))]} + (map->DatabaseDefinition {:database-name database-name + :table-definitions (mapv (partial apply create-table-definition) + table-name+field-definition-maps+rows)})) diff --git a/test/metabase/test_data.clj b/test/metabase/test_data.clj deleted file mode 100644 index af5c69f74bbbd9ac4c2cc35e60aef79181b6b246..0000000000000000000000000000000000000000 --- a/test/metabase/test_data.clj +++ /dev/null @@ -1,146 +0,0 @@ -(ns metabase.test-data - "Functions relating to using the test data, Database, Organization, and Users." - (:require [cemerick.friend.credentials :as creds] - [korma.core :as k] - [medley.core :as medley] - (metabase [db :refer :all]) - (metabase.models [field :refer [Field]] - [table :refer [Table]] - [user :refer [User]]) - [metabase.test.data :refer :all] - (metabase.test.data [data :as data] - [h2 :as h2]))) - -(declare tables - table-fields) - - -;; # PUBLIC FUNCTIONS / VARS - -(def test-db - "The test `Database` object." - (delay (get-or-create-database! (h2/dataset-loader) data/test-data))) - -(def db-id - "The ID of the test `Database`." - (delay (assert @test-db) - (:id @test-db))) - -(defn field->id - "Return the ID of a Field with FIELD-NAME belonging to Table with TABLE-NAME. - - (field->id :checkins :venue_id) -> 4" - [table-name field-name] - {:pre [(keyword? table-name) - (keyword? field-name)] - :post [(integer? %) - (not (zero? %))]} - (-> @table-fields table-name field-name)) - -(defn table->id - "Return the ID of a Table with TABLE-NAME. - - (table->id :venues) -> 12" - [table-name] - {:pre [(keyword? table-name)] - :post [(integer? %) - (not (zero? %))]} - (@tables table-name)) - -(defn table-name->table - "Fetch `Table` with TABLE-NAME." - [table-name] - {:pre [(keyword? table-name)] - :post [(map? %)]} - (sel :one Table :id (table->id table-name))) - - - - - - - - - -;; ## Temporary Tables / Etc. - -;; DEPRECATED ! Need to rewrite this to use the new TableDefinition stuff -;; (defmacro with-temp-table -;; "Execute BODY with a temporary Table that will be dropped afterward. -;; The korma entity representing the Table is bound to TABLE-BINDING. -;; FIELDS-MAP should be a map of FIELD-NAME -> SQL-TYPE. - -;; (with-temp-table [table {:name \"VARCHAR(254)\"}] -;; (insert table (values [{:name \"A\"} -;; {:name \"B\"}])) -;; (select table values (where {:name \"A\"})))" -;; [[table-binding fields-map] & body] -;; {:pre [(map? fields-map)]} -;; (let [table-name (name (gensym "TABLE__")) -;; formatted-fields (->> fields-map -;; (map (fn [[field-name field-type]] -;; (format "\"%s\" %s" (.toUpperCase ^String (name field-name)) (name field-type)))) -;; (interpose ", ") -;; (reduce str))] -;; `(do (get-or-create-database! (h2/dataset-loader) data/test-data) -;; (h2/exec-sql data/test-data (format "DROP TABLE IF EXISTS \"%s\";" ~table-name)) -;; (h2/exec-sql data/test-data (format "CREATE TABLE \"%s\" (%s, \"ID\" BIGINT AUTO_INCREMENT, PRIMARY KEY (\"ID\"));" ~table-name ~formatted-fields)) -;; (let [~table-binding (h2/korma-entity (map->TableDefinition {:table-name ~table-name}) -;; data/test-data)] -;; (try -;; ~@body -;; (catch Throwable e# -;; (println "E: " e#)) -;; (finally -;; (h2/exec-sql data/test-data (format "DROP TABLE \"%s\";" ~table-name)))))))) - - -;; # INTERNAL - -;; ## Tables + Fields - -(defn- map-table-kws - "Return a map create by mapping the keyword names of Tables in test DB (e.g. `:users`) against F, e.g. - - {:users (f :users) - :venues (f :venues) - ...}" - [f] - (->> [:users :venues :checkins :categories] - (map (fn [table-kw] - {table-kw (f table-kw)})) - (into {}))) - -(def - ^{:doc "A map of Table name keywords -> Table IDs. - - {:users 100 - :venues 101 - ...}" - :private true} - tables - (delay - @test-db ; force lazy evaluation of Test DB - (map-table-kws (fn [table-kw] - (sel :one :id Table, :db_id @db-id, :name (-> table-kw name .toUpperCase)))))) - -(def - ^{:doc "A map of Table name keywords -> map of Field name keywords -> Field IDs. - - {:users {:id 14 - :name 15} - :venues ...}" - :private true} - table-fields - (delay - @test-db ; force lazy evaluation of Test DB - (map-table-kws (fn [table-kw] - (->> (sel :many [Field :name :id] :table_id (@tables table-kw)) - (map (fn [{:keys [^String name id]}] - {:pre [(string? name) - (integer? id) - (not (zero? id))]} - {(keyword (.toLowerCase name)) id})) - (into {})))))) - -;; ## Users diff --git a/test/metabase/test_setup.clj b/test/metabase/test_setup.clj index 51540ca0fb9c056bd601f32784e2021f20dec715..afd08ecebe64b57cacdd08b6380b8122075c5974 100644 --- a/test/metabase/test_setup.clj +++ b/test/metabase/test_setup.clj @@ -5,10 +5,8 @@ [expectations :refer :all] (metabase [core :as core] [db :as db] - [task :as task] - [test-data :as h2-test-data]) - [metabase.test.data.datasets :as datasets] - [metabase.driver.mongo.test-data :as mongo-test-data])) + [task :as task]) + [metabase.test.data.datasets :as datasets])) (declare clear-test-db)