From e3e29d1d34cfda3cd082f74b746bb3f5ae8bd550 Mon Sep 17 00:00:00 2001 From: gered Date: Fri, 27 May 2016 12:47:22 -0400 Subject: [PATCH] refactoring and cleanup --- test/views/basic_system_init_tests.clj | 11 +-- test/views/subscription_tests.clj | 109 +++++++++---------------- test/views/test_helpers.clj | 28 +++++++ 3 files changed, 67 insertions(+), 81 deletions(-) create mode 100644 test/views/test_helpers.clj diff --git a/test/views/basic_system_init_tests.clj b/test/views/basic_system_init_tests.clj index 5c3dd1e..66aaf46 100644 --- a/test/views/basic_system_init_tests.clj +++ b/test/views/basic_system_init_tests.clj @@ -1,6 +1,7 @@ (ns views.basic-system-init-tests (:use clojure.test + views.test-helpers views.protocols views.core 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 (deftest inits-with-correct-config-and-shutsdown-correctly diff --git a/test/views/subscription_tests.clj b/test/views/subscription_tests.clj index 5c2be3e..a5b71ef 100644 --- a/test/views/subscription_tests.clj +++ b/test/views/subscription_tests.clj @@ -1,6 +1,7 @@ (ns views.subscription-tests (:use clojure.test + views.test-helpers views.protocols views.core 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 (deftest can-subscribe-to-a-view @@ -75,10 +66,10 @@ (while (not (realized? subscribe-result))) (is (= #{view-sig} (subscribed-views))) (is (= (hash view-data) (get-in @view-system [:hashes view-sig]))) - (is (= [{:subscriber-key subscriber-key - :view-sig (dissoc view-sig :namespace) - :view-data view-data}] - @test-sent-data))))) + (is (contains-only? @test-sent-data + [{:subscriber-key subscriber-key + :view-sig (dissoc view-sig :namespace) + :view-data view-data}]))))) (deftest can-unsubscribe-from-a-view (let [options default-options @@ -124,25 +115,13 @@ (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 (= (hash view-data) (get-in @view-system [:hashes view-sig]))) - ; HACK: Doing a comparison like this because we do the 2 subscribe! calls so - ; close together and they finish so quickly (each on different threads) - ; that it _is_ possible B finishes before A (i've seen it happen a few times) - ; This is not a problem with views, but it does mean we have to be careful - ; in this unit test comparison to see what was sent. - (is (or (= [{:subscriber-key subscriber-key-a - :view-sig (dissoc view-sig :namespace) - :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))) + (is (contains-only? @test-sent-data + [{:subscriber-key subscriber-key-a + :view-sig (dissoc view-sig :namespace) + :view-data view-data} + {:subscriber-key subscriber-key-b + :view-sig (dissoc view-sig :namespace) + :view-data view-data}])) ; 4. have one of the subscribers unsubscribe (unsubscribe! view-sig subscriber-key-a nil) (is (= #{view-sig} (subscribed-views))) @@ -181,25 +160,13 @@ (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-b) (get-in @view-system [:hashes view-sig-b]))) - ; HACK: Doing a comparison like this because we do the 2 subscribe! calls so - ; close together and they finish so quickly (each on different threads) - ; that it _is_ possible B finishes before A (i've seen it happen a few times) - ; This is not a problem with views, but it does mean we have to be careful - ; in this unit test comparison to see what was sent. - (is (or (= [{:subscriber-key subscriber-key-a - :view-sig (dissoc view-sig-a :namespace) - :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))) + (is (contains-only? @test-sent-data + [{:subscriber-key subscriber-key-a + :view-sig (dissoc view-sig-a :namespace) + :view-data view-data-a} + {:subscriber-key subscriber-key-b + :view-sig (dissoc view-sig-b :namespace) + :view-data view-data-b}])) ; 4. have one of the subscribers unsubscribe (unsubscribe! view-sig-a subscriber-key-a nil) (is (= #{view-sig-b} (subscribed-views))) @@ -235,13 +202,13 @@ (is (= #{view-sig} (get-in @view-system [:subscribed subscriber-key]))) (is (= #{subscriber-key} (get-in @view-system [:subscribers view-sig]))) (is (= (hash view-data) (get-in @view-system [:hashes view-sig]))) - (is (= [{:subscriber-key subscriber-key - :view-sig (dissoc view-sig :namespace) - :view-data view-data} - {:subscriber-key subscriber-key - :view-sig (dissoc view-sig :namespace) - :view-data view-data}] - @test-sent-data)) + (is (contains-only? @test-sent-data + [{:subscriber-key subscriber-key + :view-sig (dissoc view-sig :namespace) + :view-data view-data} + {:subscriber-key subscriber-key + :view-sig (dissoc view-sig :namespace) + :view-data view-data}])) ; 4. unsubscribe. only need to do this once, since only one subscription ; should exist in the view system (unsubscribe! view-sig subscriber-key nil) @@ -290,10 +257,10 @@ (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 (= (hash view-data) (get-in @view-system [:hashes view-sig-with-ns]))) - (is (= [{:subscriber-key subscriber-key - :view-sig (dissoc view-sig :namespace) - :view-data view-data}] - @test-sent-data)) + (is (contains-only? @test-sent-data + [{:subscriber-key subscriber-key + :view-sig (dissoc view-sig :namespace) + :view-data view-data}])) ; 4. unsubscribe. ; 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 @@ -327,10 +294,10 @@ (is (= #{view-sig} (get-in @view-system [:subscribed subscriber-key]))) (is (= #{subscriber-key} (get-in @view-system [:subscribers view-sig]))) (is (= (hash view-data) (get-in @view-system [:hashes view-sig]))) - (is (= [{:subscriber-key subscriber-key - :view-sig (dissoc view-sig :namespace) - :view-data view-data}] - @test-sent-data)) + (is (contains-only? @test-sent-data + [{:subscriber-key subscriber-key + :view-sig (dissoc view-sig :namespace) + :view-data view-data}])) ; 4. unsubscribe. (unsubscribe! view-sig subscriber-key context) (is (empty? (keys (:subscribed @view-system)))) @@ -412,10 +379,10 @@ (is (= #{view-sig} (get-in @view-system [:subscribed subscriber-key]))) (is (= #{subscriber-key} (get-in @view-system [:subscribers view-sig]))) (is (= (hash view-data) (get-in @view-system [:hashes view-sig]))) - (is (= [{:subscriber-key subscriber-key - :view-sig (dissoc view-sig :namespace) - :view-data view-data}] - @test-sent-data))))) + (is (contains-only? @test-sent-data + [{:subscriber-key subscriber-key + :view-sig (dissoc view-sig :namespace) + :view-data view-data}]))))) (deftest unsubscribe-before-subscription-finishes-does-not-result-in-stuck-view (let [subscriber-key 123 diff --git a/test/views/test_helpers.clj b/test/views/test_helpers.clj new file mode 100644 index 0000000..b459c0e --- /dev/null +++ b/test/views/test_helpers.clj @@ -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)))