refactoring and cleanup
This commit is contained in:
parent
1c47d4ca67
commit
e3e29d1d34
|
@ -1,6 +1,7 @@
|
||||||
(ns views.basic-system-init-tests
|
(ns views.basic-system-init-tests
|
||||||
(:use
|
(:use
|
||||||
clojure.test
|
clojure.test
|
||||||
|
views.test-helpers
|
||||||
views.protocols
|
views.protocols
|
||||||
views.core
|
views.core
|
||||||
views.test-memory-db)
|
views.test-memory-db)
|
||||||
|
@ -18,16 +19,6 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;; test helper functions
|
|
||||||
|
|
||||||
(defn contains-view?
|
|
||||||
[view-id]
|
|
||||||
(let [view (get (:views @view-system) view-id)]
|
|
||||||
(and view
|
|
||||||
(satisfies? IView view))))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;; tests
|
;; tests
|
||||||
|
|
||||||
(deftest inits-with-correct-config-and-shutsdown-correctly
|
(deftest inits-with-correct-config-and-shutsdown-correctly
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
(ns views.subscription-tests
|
(ns views.subscription-tests
|
||||||
(:use
|
(:use
|
||||||
clojure.test
|
clojure.test
|
||||||
|
views.test-helpers
|
||||||
views.protocols
|
views.protocols
|
||||||
views.core
|
views.core
|
||||||
views.test-memory-db))
|
views.test-memory-db))
|
||||||
|
@ -31,16 +32,6 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;; test helper functions
|
|
||||||
|
|
||||||
(defn get-view-data
|
|
||||||
[view-sig]
|
|
||||||
(data (get-in @view-system [:views (:view-id view-sig)])
|
|
||||||
(:namespace view-sig)
|
|
||||||
(:parameters view-sig)))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;; tests
|
;; tests
|
||||||
|
|
||||||
(deftest can-subscribe-to-a-view
|
(deftest can-subscribe-to-a-view
|
||||||
|
@ -75,10 +66,10 @@
|
||||||
(while (not (realized? subscribe-result)))
|
(while (not (realized? subscribe-result)))
|
||||||
(is (= #{view-sig} (subscribed-views)))
|
(is (= #{view-sig} (subscribed-views)))
|
||||||
(is (= (hash view-data) (get-in @view-system [:hashes view-sig])))
|
(is (= (hash view-data) (get-in @view-system [:hashes view-sig])))
|
||||||
(is (= [{:subscriber-key subscriber-key
|
(is (contains-only? @test-sent-data
|
||||||
:view-sig (dissoc view-sig :namespace)
|
[{:subscriber-key subscriber-key
|
||||||
:view-data view-data}]
|
:view-sig (dissoc view-sig :namespace)
|
||||||
@test-sent-data)))))
|
:view-data view-data}])))))
|
||||||
|
|
||||||
(deftest can-unsubscribe-from-a-view
|
(deftest can-unsubscribe-from-a-view
|
||||||
(let [options default-options
|
(let [options default-options
|
||||||
|
@ -124,25 +115,13 @@
|
||||||
(is (= #{view-sig} (get-in @view-system [:subscribed subscriber-key-b])))
|
(is (= #{view-sig} (get-in @view-system [:subscribed subscriber-key-b])))
|
||||||
(is (= #{subscriber-key-a subscriber-key-b} (get-in @view-system [:subscribers view-sig])))
|
(is (= #{subscriber-key-a subscriber-key-b} (get-in @view-system [:subscribers view-sig])))
|
||||||
(is (= (hash view-data) (get-in @view-system [:hashes view-sig])))
|
(is (= (hash view-data) (get-in @view-system [:hashes view-sig])))
|
||||||
; HACK: Doing a comparison like this because we do the 2 subscribe! calls so
|
(is (contains-only? @test-sent-data
|
||||||
; close together and they finish so quickly (each on different threads)
|
[{:subscriber-key subscriber-key-a
|
||||||
; that it _is_ possible B finishes before A (i've seen it happen a few times)
|
:view-sig (dissoc view-sig :namespace)
|
||||||
; This is not a problem with views, but it does mean we have to be careful
|
:view-data view-data}
|
||||||
; in this unit test comparison to see what was sent.
|
{:subscriber-key subscriber-key-b
|
||||||
(is (or (= [{:subscriber-key subscriber-key-a
|
:view-sig (dissoc view-sig :namespace)
|
||||||
:view-sig (dissoc view-sig :namespace)
|
:view-data view-data}]))
|
||||||
:view-data view-data}
|
|
||||||
{:subscriber-key subscriber-key-b
|
|
||||||
:view-sig (dissoc view-sig :namespace)
|
|
||||||
:view-data view-data}]
|
|
||||||
@test-sent-data)
|
|
||||||
(= [{:subscriber-key subscriber-key-b
|
|
||||||
:view-sig (dissoc view-sig :namespace)
|
|
||||||
:view-data view-data}
|
|
||||||
{:subscriber-key subscriber-key-a
|
|
||||||
:view-sig (dissoc view-sig :namespace)
|
|
||||||
:view-data view-data}]
|
|
||||||
@test-sent-data)))
|
|
||||||
; 4. have one of the subscribers unsubscribe
|
; 4. have one of the subscribers unsubscribe
|
||||||
(unsubscribe! view-sig subscriber-key-a nil)
|
(unsubscribe! view-sig subscriber-key-a nil)
|
||||||
(is (= #{view-sig} (subscribed-views)))
|
(is (= #{view-sig} (subscribed-views)))
|
||||||
|
@ -181,25 +160,13 @@
|
||||||
(is (= #{subscriber-key-b} (get-in @view-system [:subscribers view-sig-b])))
|
(is (= #{subscriber-key-b} (get-in @view-system [:subscribers view-sig-b])))
|
||||||
(is (= (hash view-data-a) (get-in @view-system [:hashes view-sig-a])))
|
(is (= (hash view-data-a) (get-in @view-system [:hashes view-sig-a])))
|
||||||
(is (= (hash view-data-b) (get-in @view-system [:hashes view-sig-b])))
|
(is (= (hash view-data-b) (get-in @view-system [:hashes view-sig-b])))
|
||||||
; HACK: Doing a comparison like this because we do the 2 subscribe! calls so
|
(is (contains-only? @test-sent-data
|
||||||
; close together and they finish so quickly (each on different threads)
|
[{:subscriber-key subscriber-key-a
|
||||||
; that it _is_ possible B finishes before A (i've seen it happen a few times)
|
:view-sig (dissoc view-sig-a :namespace)
|
||||||
; This is not a problem with views, but it does mean we have to be careful
|
:view-data view-data-a}
|
||||||
; in this unit test comparison to see what was sent.
|
{:subscriber-key subscriber-key-b
|
||||||
(is (or (= [{:subscriber-key subscriber-key-a
|
:view-sig (dissoc view-sig-b :namespace)
|
||||||
:view-sig (dissoc view-sig-a :namespace)
|
:view-data view-data-b}]))
|
||||||
:view-data view-data-a}
|
|
||||||
{:subscriber-key subscriber-key-b
|
|
||||||
:view-sig (dissoc view-sig-b :namespace)
|
|
||||||
:view-data view-data-b}]
|
|
||||||
@test-sent-data)
|
|
||||||
(= [{:subscriber-key subscriber-key-b
|
|
||||||
:view-sig (dissoc view-sig-b :namespace)
|
|
||||||
:view-data view-data-b}
|
|
||||||
{:subscriber-key subscriber-key-a
|
|
||||||
:view-sig (dissoc view-sig-a :namespace)
|
|
||||||
:view-data view-data-a}]
|
|
||||||
@test-sent-data)))
|
|
||||||
; 4. have one of the subscribers unsubscribe
|
; 4. have one of the subscribers unsubscribe
|
||||||
(unsubscribe! view-sig-a subscriber-key-a nil)
|
(unsubscribe! view-sig-a subscriber-key-a nil)
|
||||||
(is (= #{view-sig-b} (subscribed-views)))
|
(is (= #{view-sig-b} (subscribed-views)))
|
||||||
|
@ -235,13 +202,13 @@
|
||||||
(is (= #{view-sig} (get-in @view-system [:subscribed subscriber-key])))
|
(is (= #{view-sig} (get-in @view-system [:subscribed subscriber-key])))
|
||||||
(is (= #{subscriber-key} (get-in @view-system [:subscribers view-sig])))
|
(is (= #{subscriber-key} (get-in @view-system [:subscribers view-sig])))
|
||||||
(is (= (hash view-data) (get-in @view-system [:hashes view-sig])))
|
(is (= (hash view-data) (get-in @view-system [:hashes view-sig])))
|
||||||
(is (= [{:subscriber-key subscriber-key
|
(is (contains-only? @test-sent-data
|
||||||
:view-sig (dissoc view-sig :namespace)
|
[{:subscriber-key subscriber-key
|
||||||
:view-data view-data}
|
:view-sig (dissoc view-sig :namespace)
|
||||||
{:subscriber-key subscriber-key
|
:view-data view-data}
|
||||||
:view-sig (dissoc view-sig :namespace)
|
{:subscriber-key subscriber-key
|
||||||
:view-data view-data}]
|
:view-sig (dissoc view-sig :namespace)
|
||||||
@test-sent-data))
|
:view-data view-data}]))
|
||||||
; 4. unsubscribe. only need to do this once, since only one subscription
|
; 4. unsubscribe. only need to do this once, since only one subscription
|
||||||
; should exist in the view system
|
; should exist in the view system
|
||||||
(unsubscribe! view-sig subscriber-key nil)
|
(unsubscribe! view-sig subscriber-key nil)
|
||||||
|
@ -290,10 +257,10 @@
|
||||||
(is (= #{view-sig-with-ns} (get-in @view-system [:subscribed subscriber-key])))
|
(is (= #{view-sig-with-ns} (get-in @view-system [:subscribed subscriber-key])))
|
||||||
(is (= #{subscriber-key} (get-in @view-system [:subscribers view-sig-with-ns])))
|
(is (= #{subscriber-key} (get-in @view-system [:subscribers view-sig-with-ns])))
|
||||||
(is (= (hash view-data) (get-in @view-system [:hashes view-sig-with-ns])))
|
(is (= (hash view-data) (get-in @view-system [:hashes view-sig-with-ns])))
|
||||||
(is (= [{:subscriber-key subscriber-key
|
(is (contains-only? @test-sent-data
|
||||||
:view-sig (dissoc view-sig :namespace)
|
[{:subscriber-key subscriber-key
|
||||||
:view-data view-data}]
|
:view-sig (dissoc view-sig :namespace)
|
||||||
@test-sent-data))
|
:view-data view-data}]))
|
||||||
; 4. unsubscribe.
|
; 4. unsubscribe.
|
||||||
; NOTE: we are passing in view-sig, not view-sig-with-ns. this is because
|
; NOTE: we are passing in view-sig, not view-sig-with-ns. this is because
|
||||||
; proper namespace-fn's should be consistent with what namespace they
|
; proper namespace-fn's should be consistent with what namespace they
|
||||||
|
@ -327,10 +294,10 @@
|
||||||
(is (= #{view-sig} (get-in @view-system [:subscribed subscriber-key])))
|
(is (= #{view-sig} (get-in @view-system [:subscribed subscriber-key])))
|
||||||
(is (= #{subscriber-key} (get-in @view-system [:subscribers view-sig])))
|
(is (= #{subscriber-key} (get-in @view-system [:subscribers view-sig])))
|
||||||
(is (= (hash view-data) (get-in @view-system [:hashes view-sig])))
|
(is (= (hash view-data) (get-in @view-system [:hashes view-sig])))
|
||||||
(is (= [{:subscriber-key subscriber-key
|
(is (contains-only? @test-sent-data
|
||||||
:view-sig (dissoc view-sig :namespace)
|
[{:subscriber-key subscriber-key
|
||||||
:view-data view-data}]
|
:view-sig (dissoc view-sig :namespace)
|
||||||
@test-sent-data))
|
:view-data view-data}]))
|
||||||
; 4. unsubscribe.
|
; 4. unsubscribe.
|
||||||
(unsubscribe! view-sig subscriber-key context)
|
(unsubscribe! view-sig subscriber-key context)
|
||||||
(is (empty? (keys (:subscribed @view-system))))
|
(is (empty? (keys (:subscribed @view-system))))
|
||||||
|
@ -412,10 +379,10 @@
|
||||||
(is (= #{view-sig} (get-in @view-system [:subscribed subscriber-key])))
|
(is (= #{view-sig} (get-in @view-system [:subscribed subscriber-key])))
|
||||||
(is (= #{subscriber-key} (get-in @view-system [:subscribers view-sig])))
|
(is (= #{subscriber-key} (get-in @view-system [:subscribers view-sig])))
|
||||||
(is (= (hash view-data) (get-in @view-system [:hashes view-sig])))
|
(is (= (hash view-data) (get-in @view-system [:hashes view-sig])))
|
||||||
(is (= [{:subscriber-key subscriber-key
|
(is (contains-only? @test-sent-data
|
||||||
:view-sig (dissoc view-sig :namespace)
|
[{:subscriber-key subscriber-key
|
||||||
:view-data view-data}]
|
:view-sig (dissoc view-sig :namespace)
|
||||||
@test-sent-data)))))
|
:view-data view-data}])))))
|
||||||
|
|
||||||
(deftest unsubscribe-before-subscription-finishes-does-not-result-in-stuck-view
|
(deftest unsubscribe-before-subscription-finishes-does-not-result-in-stuck-view
|
||||||
(let [subscriber-key 123
|
(let [subscriber-key 123
|
||||||
|
|
28
test/views/test_helpers.clj
Normal file
28
test/views/test_helpers.clj
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
(ns views.test-helpers
|
||||||
|
(:use
|
||||||
|
clojure.test
|
||||||
|
views.protocols
|
||||||
|
views.core))
|
||||||
|
|
||||||
|
(defn contains-view?
|
||||||
|
[view-id]
|
||||||
|
(let [view (get (:views @view-system) view-id)]
|
||||||
|
(and view
|
||||||
|
(satisfies? IView view))))
|
||||||
|
|
||||||
|
(defn contains-only?
|
||||||
|
[coll elements]
|
||||||
|
(and (= (count coll)
|
||||||
|
(count elements))
|
||||||
|
(every?
|
||||||
|
#(boolean (some #{%} elements))
|
||||||
|
coll)
|
||||||
|
(every?
|
||||||
|
#(boolean (some #{%} coll))
|
||||||
|
elements)))
|
||||||
|
|
||||||
|
(defn get-view-data
|
||||||
|
[view-sig]
|
||||||
|
(data (get-in @view-system [:views (:view-id view-sig)])
|
||||||
|
(:namespace view-sig)
|
||||||
|
(:parameters view-sig)))
|
Loading…
Reference in a new issue