re-frame/test/re_frame/restore_test.cljs

75 lines
2.5 KiB
Clojure

(ns re-frame.restore-test
(:require [cljs.test :refer-macros [is deftest async use-fixtures testing]]
[re-frame.core :refer [make-restore-fn reg-sub subscribe]]
[re-frame.subs :as subs]))
;; TODO: future tests in this area could check DB state and registrations are being correctly restored.
(use-fixtures :each {:before subs/clear-all-handlers!})
(defn one? [x] (= 1 x))
(defn two? [x] (= 2 x))
(defn register-test-subs []
(reg-sub
:test-sub
(fn [db ev]
(:test-sub db)))
(reg-sub
:test-sub2
(fn [db ev]
(:test-sub2 db))))
(deftest make-restore-fn-test
(testing "no existing subs, then making one subscription"
(register-test-subs)
(let [original-subs @subs/query->reaction
restore-fn (make-restore-fn)]
(is (zero? (count original-subs)))
@(subscribe [:test-sub])
(is (one? (count @subs/query->reaction)))
(is (contains? @subs/query->reaction [[:test-sub] []]))
(restore-fn)
(is (zero? (count @subs/query->reaction))))))
(deftest make-restore-fn-test2
(testing "existing subs, making more subscriptions"
(register-test-subs)
@(subscribe [:test-sub])
(let [original-subs @subs/query->reaction
restore-fn (make-restore-fn)]
(is (one? (count original-subs)))
@(subscribe [:test-sub2])
(is (contains? @subs/query->reaction [[:test-sub2] []]))
(is (two? (count @subs/query->reaction)))
(restore-fn)
(is (not (contains? @subs/query->reaction [[:test-sub2] []])))
(is (one? (count @subs/query->reaction))))))
(deftest make-restore-fn-test3
(testing "existing subs, making more subscriptions with different params on same subscriptions"
(register-test-subs)
@(subscribe [:test-sub])
(let [original-subs @subs/query->reaction
restore-fn (make-restore-fn)]
(is (one? (count original-subs)))
@(subscribe [:test-sub :extra :params])
(is (two? (count @subs/query->reaction)))
(restore-fn)
(is (one? (count @subs/query->reaction))))))
(deftest nested-restores
(testing "running nested restores"
(register-test-subs)
(let [restore-fn-1 (make-restore-fn)
_ @(subscribe [:test-sub])
_ (is (one? (count @subs/query->reaction)))
restore-fn-2 (make-restore-fn)]
@(subscribe [:test-sub2])
(is (two? (count @subs/query->reaction)))
(restore-fn-2)
(is (one? (count @subs/query->reaction)))
(restore-fn-1)
(is (zero? (count @subs/query->reaction))))))