Adds test for vexec! and with-view-transactions (but not recursive, yet); modifies database-fixtures to handle an optional vector arg of table names
This commit is contained in:
parent
b61d5f00cf
commit
50100d17f6
|
@ -3,7 +3,7 @@
|
|||
[clojure.test :refer [run-tests]]
|
||||
[views.subscriptions-test]
|
||||
[views.base-subscribed-views-test]
|
||||
;; [views.db.core-test]
|
||||
[views.db.core-test]
|
||||
[views.db.deltas-test]
|
||||
[views.db.checks-test] ; STILL SPECULATIVE
|
||||
[views.db.honeysql-test]
|
||||
|
@ -13,7 +13,7 @@
|
|||
[]
|
||||
(run-tests 'views.subscriptions-test
|
||||
'views.base-subscribed-views-test
|
||||
;; 'views.db.core-test
|
||||
'views.db.core-test
|
||||
'views.db.deltas-test
|
||||
'views.db.checks-test
|
||||
'views.db.honeysql-test
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
(reset! vs/subscribed-views {})
|
||||
(f))
|
||||
|
||||
(use-fixtures :each vf/database-fixtures! subscription-fixtures!)
|
||||
(use-fixtures :each (vf/database-fixtures!) subscription-fixtures!)
|
||||
|
||||
(def persistence (InMemoryPersistence.))
|
||||
|
||||
|
@ -68,3 +68,13 @@
|
|||
(add-subscription! [:users] vf/templates 1 default-ns)
|
||||
(add-subscription! [:users] vf/templates 2 default-ns)
|
||||
(broadcast-deltas base-subbed-views deltas nil)))
|
||||
|
||||
(deftest sends-deltas-in-batch
|
||||
(let [deltas {[:users] [{:view-sig [:users] :insert-deltas [{:id 1 :name "Bob"} {:id 2 :name "Alice"}]}]}
|
||||
sent-delta {[:users] {:insert-deltas [{:id 1 :name "Bob"} {:id 2 :name "Alice"}]}}
|
||||
send-fn #(do (is (#{1 2} %1))
|
||||
(is (= %2 :views.deltas))
|
||||
(is (= %3 sent-delta)))
|
||||
base-subbed-views (BaseSubscribedViews. (assoc view-config-fixture :send-fn send-fn))]
|
||||
(add-subscription! [:users] vf/templates 1 default-ns)
|
||||
(broadcast-deltas base-subbed-views deltas nil)))
|
||||
|
|
63
test/views/db/core_test.clj
Normal file
63
test/views/db/core_test.clj
Normal file
|
@ -0,0 +1,63 @@
|
|||
(ns views.db.core-test
|
||||
(:require
|
||||
[clojure.test :refer [use-fixtures deftest is]]
|
||||
[views.subscriptions :as vs]
|
||||
[views.subscribed-views :refer [ISubscribedViews]]
|
||||
[views.fixtures :as vf :refer [vschema sql-ts]]
|
||||
[views.db.core :as vdb]))
|
||||
|
||||
(def received-deltas (atom nil))
|
||||
|
||||
;; Very barebones subscribed-views instance which merely satisfies what vexec! needs:
|
||||
(deftype TestSubscribedViews []
|
||||
ISubscribedViews
|
||||
(subscribed-views [this namespace]
|
||||
(map :view-data (vals (vs/compiled-views-for))))
|
||||
|
||||
(broadcast-deltas [this new-deltas namespace]
|
||||
(reset! received-deltas new-deltas)))
|
||||
|
||||
(def test-subscribed-views (TestSubscribedViews.))
|
||||
(def test-config {:db vf/db :schema vschema :templates vf/templates :base-subscribed-views test-subscribed-views})
|
||||
|
||||
(defn reset-fixtures!
|
||||
[f]
|
||||
(reset! vs/subscribed-views {})
|
||||
(reset! received-deltas {})
|
||||
(f))
|
||||
|
||||
(use-fixtures :each vf/with-user-fixture! (vf/database-fixtures! [:posts :comments]) reset-fixtures!)
|
||||
(use-fixtures :once (vf/database-fixtures! [:users]))
|
||||
|
||||
(deftest vexec-sends-deltas
|
||||
(let [view-sig [:user-posts (:id @vf/user-fixture)]
|
||||
sub-to-it (vs/add-subscription! view-sig vf/templates (:id @vf/user-fixture))
|
||||
posted (first (vdb/vexec! test-config (vf/insert-post-tmpl (:id @vf/user-fixture) "title" "body")))
|
||||
delta-vs (ffirst @received-deltas)
|
||||
insert-delta (-> @received-deltas first second first :insert-deltas first)]
|
||||
|
||||
(is (= (ffirst @received-deltas) view-sig))
|
||||
(is (= (:name insert-delta) (:name @vf/user-fixture)))
|
||||
(is (= (:body insert-delta) (:body posted)))
|
||||
(is (= (:title insert-delta) (:title posted)))))
|
||||
|
||||
(deftest with-view-transaction-sends-deltas
|
||||
(let [view-sig [:user-posts (:id @vf/user-fixture)]
|
||||
sub-to-it (vs/add-subscription! view-sig vf/templates (:id @vf/user-fixture))
|
||||
posted (first (vdb/with-view-transaction
|
||||
[tc test-config]
|
||||
(vdb/vexec! tc (vf/insert-post-tmpl (:id @vf/user-fixture) "title" "body"))))
|
||||
delta-vs (ffirst @received-deltas)
|
||||
insert-delta (-> @received-deltas first second first :insert-deltas first)]
|
||||
|
||||
(is (= (ffirst @received-deltas) view-sig))
|
||||
(is (= (:name insert-delta) (:name @vf/user-fixture)))
|
||||
(is (= (:body insert-delta) (:body posted)))
|
||||
(is (= (:title insert-delta) (:title posted)))))
|
||||
|
||||
;; (deftest removes-nil-deltas
|
||||
;; (let [deltas {[:foo 1] {:insert-deltas '() :delete-deltas []}
|
||||
;; [:bar 2] {:insert-deltas '() :delete-deltas [] :refresh-set []}
|
||||
;; [:baz 2] {:insert-deltas '() :delete-deltas [{:baz 1}]}}]
|
||||
;; (is (= #{[:bar 2] [:baz 2]} (into #{} (keys (vdb/remove-nil-deltas deltas)))))
|
||||
;; ))
|
|
@ -12,7 +12,7 @@
|
|||
([all-views action templates]
|
||||
(vd/do-view-transaction vschema vf/db all-views action templates)))
|
||||
|
||||
(use-fixtures :each vf/database-fixtures!)
|
||||
(use-fixtures :each (vf/database-fixtures!))
|
||||
|
||||
(deftest builds-view-map
|
||||
(let [{:keys [view-sig view refresh-only?]} (vd/view-map vf/users-tmpl [:users])]
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
[views.db.load :as vload]
|
||||
[clojure.string :refer [upper-case]]))
|
||||
|
||||
(use-fixtures :each database-fixtures!)
|
||||
(use-fixtures :each (database-fixtures!))
|
||||
|
||||
(defn subscribed-views
|
||||
[]
|
||||
|
|
|
@ -24,9 +24,12 @@
|
|||
(j/execute! db [(str "DELETE FROM " t)])))
|
||||
|
||||
(defn database-fixtures!
|
||||
[f]
|
||||
(clean-tables! [:posts :users :comments])
|
||||
(f))
|
||||
([] (database-fixtures! [:posts :users :comments]))
|
||||
([tables]
|
||||
(fn [f]
|
||||
(clean-tables! tables)
|
||||
(f)
|
||||
(clean-tables! tables)))) ; do it after as well in case a test breaks
|
||||
|
||||
(defn rand-str
|
||||
[l]
|
||||
|
@ -44,6 +47,17 @@
|
|||
[name]
|
||||
(view-action! (hsql/build :insert-into :users :values [{:name name :created_on (sql-ts)}])))
|
||||
|
||||
(def user-fixture (atom nil))
|
||||
|
||||
(defn with-user-fixture!
|
||||
([f] (with-user-fixture! "test user" f))
|
||||
([name f]
|
||||
(user-fixture! name)
|
||||
(let [user (first (j/query db ["SELECT * FROM users WHERE name = ?" name]))]
|
||||
(reset! user-fixture user)
|
||||
(f)
|
||||
(reset! user-fixture nil))))
|
||||
|
||||
(defn gen-n-users!
|
||||
[n]
|
||||
(dotimes [n n] (user-fixture! (rand-str 10)))
|
||||
|
|
Loading…
Reference in a new issue