diff --git a/test/views/basic_system_init_tests.clj b/test/views/basic_system_init_tests.clj index 6302a48..5c3dd1e 100644 --- a/test/views/basic_system_init_tests.clj +++ b/test/views/basic_system_init_tests.clj @@ -2,7 +2,9 @@ (:use clojure.test views.protocols - views.core)) + views.core + views.test-memory-db) + (:import (views.test_memory_db MemoryView))) (defn reset-state-fixture! [f] (reset! view-system {}) @@ -12,26 +14,6 @@ (use-fixtures :each reset-state-fixture!) - -(def memory-database (atom {})) - -(defrecord MemoryView [id ks] - IView - (id [_] id) - (data [_ namespace parameters] - (get-in @memory-database (-> [namespace] - (into ks) - (into parameters)))) - (relevant? [_ namespace parameters hints] - (some #(and (= namespace (:namespace %)) - (= ks (:hint %))) - hints))) - -(def views - [(MemoryView. :foo [:foo]) - (MemoryView. :bar [:bar]) - (MemoryView. :baz [:baz])]) - (defn dummy-send-fn [subscriber-key [view-sig view-data]]) diff --git a/test/views/subscription_tests.clj b/test/views/subscription_tests.clj index 1b64b1b..5c2be3e 100644 --- a/test/views/subscription_tests.clj +++ b/test/views/subscription_tests.clj @@ -2,42 +2,9 @@ (:use clojure.test views.protocols - views.core)) + views.core + views.test-memory-db)) -(def memory-database - (atom {:a {:foo 1 :bar 200 :baz [1 2 3]} - :b {:foo 2 :bar 300 :baz [2 3 4]}})) - -(defrecord MemoryView [id ks] - IView - (id [_] id) - (data [_ namespace parameters] - (get-in @memory-database (-> [namespace] - (into ks) - (into parameters)))) - (relevant? [_ namespace parameters hints] - (some #(and (= namespace (:namespace %)) - (= ks (:hint %))) - hints))) - -(defrecord SlowMemoryView [id ks] - IView - (id [_] id) - (data [_ namespace parameters] - ; simulate a slow database query - (Thread/sleep 1000) - (get-in @memory-database (-> [namespace] - (into ks) - (into parameters)))) - (relevant? [_ namespace parameters hints] - (some #(and (= namespace (:namespace %)) - (= ks (:hint %))) - hints))) - -(def views - [(MemoryView. :foo [:foo]) - (MemoryView. :bar [:bar]) - (MemoryView. :baz [:baz])]) (def test-sent-data (atom [])) @@ -451,15 +418,13 @@ @test-sent-data))))) (deftest unsubscribe-before-subscription-finishes-does-not-result-in-stuck-view - (let [views [(SlowMemoryView. :foo [:foo])] - subscriber-key 123 + (let [subscriber-key 123 view-sig (->view-sig :a :foo []) options default-options] ; 1. init views - (init! views test-send-fn options) + (init! slow-views test-send-fn options) ; 2. subscribe to a view - (let [view-data (get-view-data view-sig) - subscribe-result (subscribe! view-sig subscriber-key nil)] + (let [subscribe-result (subscribe! view-sig subscriber-key nil)] (is (= #{view-sig} (subscribed-views))) (is (not (realized? subscribe-result))) ; 3. unsubscribe before subscription finishes (still waiting on initial data diff --git a/test/views/test_memory_db.clj b/test/views/test_memory_db.clj new file mode 100644 index 0000000..54a437b --- /dev/null +++ b/test/views/test_memory_db.clj @@ -0,0 +1,44 @@ +(ns views.test-memory-db + (:use + views.protocols + views.core)) + +(def memory-database + (atom {:a {:foo 1 :bar 200 :baz [1 2 3]} + :b {:foo 2 :bar 300 :baz [2 3 4]}})) + +(defrecord MemoryView [id ks] + IView + (id [_] id) + (data [_ namespace parameters] + (get-in @memory-database (-> [namespace] + (into ks) + (into parameters)))) + (relevant? [_ namespace parameters hints] + (some #(and (= namespace (:namespace %)) + (= ks (:hint %))) + hints))) + +(defrecord SlowMemoryView [id ks] + IView + (id [_] id) + (data [_ namespace parameters] + ; simulate a slow database query + (Thread/sleep 1000) + (get-in @memory-database (-> [namespace] + (into ks) + (into parameters)))) + (relevant? [_ namespace parameters hints] + (some #(and (= namespace (:namespace %)) + (= ks (:hint %))) + hints))) + +(def views + [(MemoryView. :foo [:foo]) + (MemoryView. :bar [:bar]) + (MemoryView. :baz [:baz])]) + +(def slow-views + [(SlowMemoryView. :foo [:foo]) + (SlowMemoryView. :bar [:bar]) + (SlowMemoryView. :baz [:baz])])