refactoring and cleanup

This commit is contained in:
Gered 2016-05-27 12:47:22 -04:00
parent 1c47d4ca67
commit e3e29d1d34
3 changed files with 67 additions and 81 deletions

View file

@ -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

View file

@ -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

View 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)))