Convert tests to Midje

This commit is contained in:
Nicholas Kariniemi 2014-09-26 20:51:23 +03:00
parent d7708e1382
commit 15b9ec8927
2 changed files with 76 additions and 92 deletions

View file

@ -19,7 +19,8 @@
[sablono "0.2.17"] [sablono "0.2.17"]
[cljs-uuid "0.0.4"] [cljs-uuid "0.0.4"]
[net.polyc0l0r/hasch "0.2.3"]] [net.polyc0l0r/hasch "0.2.3"]]
:profiles {:uberjar {:aot :all}} :profiles {:uberjar {:aot :all}
:dev {:dependencies [[midje "1.6.3"]]}}
:min-lein-version "2.1.2" :min-lein-version "2.1.2"
:plugins [[lein-cljsbuild "1.0.3"] :plugins [[lein-cljsbuild "1.0.3"]
[lein-ring "0.8.6"] [lein-ring "0.8.6"]
@ -42,7 +43,7 @@
:output-path "target/generated/cljs" :output-path "target/generated/cljs"
:rules :cljs}]} :rules :cljs}]}
:source-paths ["src/clj" "src/test"] :source-paths ["src/clj" "src/test"]
:test-paths ["spec/clj"] :test-paths ["src/test"]
:ring {:handler grub.core/app} :ring {:handler grub.core/app}
:uberjar-name "grub-standalone.jar" :uberjar-name "grub-standalone.jar"
:main grub.core) :main grub.core)

View file

@ -1,6 +1,7 @@
(ns grub.test.unit.state (ns grub.test.unit.state
(:require [grub.shared-state :as state] (:require [grub.shared-state :as state]
[clojure.test :refer :all] [clojure.test :refer :all]
[midje.sweet :refer :all]
[hasch.core :as hasch] [hasch.core :as hasch]
[clojure.core.async :as a :refer [<!! >!! chan go]])) [clojure.core.async :as a :refer [<!! >!! chan go]]))
@ -10,33 +11,27 @@
:state s})) :state s}))
(into []))) (into [])))
(deftest diff-no-server-changes (fact "Applies diff and returns empty diff when no server changes"
;; Returns empty ACK diff with hash of current state
;; when no server changes
(let [states (hashed-states (let [states (hashed-states
{:grubs {"1" {:text "2 apples" :completed false}} :recipes {}}) {:grubs {"1" {:text "2 apples" :completed false}} :recipes {}})
states* (atom states) states* (atom states)
msg {:type :diff msg {:type :diff
:diff {:grubs {:updated {"1" {:completed true}} :deleted #{}}} :diff {:grubs {:updated {"1" {:completed true}} :deleted #{}}}
:hash (:hash (first states))} :hash (:hash (first states))}
in (chan 1) in (chan 1)
out (chan 1)] out (chan 1)]
(state/make-server-agent in out states*) (state/make-server-agent in out states*)
(>!! in msg) (>!! in msg)
(let [diff-response (<!! out)] (let [response (<!! out)]
(is (= (hashed-states @states* => (hashed-states
{:grubs {"1" {:completed false, :text "2 apples"}}, :recipes {}} {:grubs {"1" {:completed false, :text "2 apples"}}, :recipes {}}
{:grubs {"1" {:completed true, :text "2 apples"}}, :recipes {}}) {:grubs {"1" {:completed true, :text "2 apples"}}, :recipes {}})
@states*)) response => {:type :diff
(is (= {:type :diff :diff {:grubs {:deleted #{}, :updated nil}
:diff {:grubs {:deleted #{}, :updated nil} :recipes {:deleted #{}, :updated nil}}
:recipes {:deleted #{}, :updated nil}} :hash (:hash (last @states*))})))
:hash (:hash (last @states*))}
diff-response)))))
(deftest diff-server-changes (fact "Applies diff and returns changes when server has changed"
;; Returns diff with changes when server has changed
;; Client state fetched from history
(let [states (hashed-states (let [states (hashed-states
{:grubs {"1" {:text "2 apples" :completed false}} :recipes {}} {:grubs {"1" {:text "2 apples" :completed false}} :recipes {}}
{:grubs {"1" {:text "2 apples" :completed false} {:grubs {"1" {:text "2 apples" :completed false}
@ -44,33 +39,29 @@
:recipes {}}) :recipes {}})
states* (atom states) states* (atom states)
msg {:type :diff msg {:type :diff
:diff {:grubs {:updated {"1" {:completed true}} :deleted #{}}} :diff {:grubs {:updated {"1" {:completed true}} :deleted #{}}}
:hash (:hash (first states))} :hash (:hash (first states))}
in (chan 1) in (chan 1)
out (chan 1)] out (chan 1)]
(state/make-server-agent in out states*) (state/make-server-agent in out states*)
(>!! in msg) (>!! in msg)
(let [diff-response (<!! out)] (let [response (<!! out)]
(is (= (hashed-states @states* => (hashed-states
{:grubs {"1" {:text "2 apples" :completed false}} :recipes {}} {:grubs {"1" {:text "2 apples" :completed false}} :recipes {}}
{:grubs {"1" {:text "2 apples" :completed false} {:grubs {"1" {:text "2 apples" :completed false}
"2" {:text "3 onions" :completed false}} "2" {:text "3 onions" :completed false}}
:recipes {}} :recipes {}}
{:grubs {"1" {:text "2 apples" :completed true} {:grubs {"1" {:text "2 apples" :completed true}
"2" {:text "3 onions" :completed false}} "2" {:text "3 onions" :completed false}}
:recipes {}}) :recipes {}})
@states*)) response => {:type :diff
(is (= {:type :diff :diff {:grubs {:deleted #{}
:diff {:grubs {:deleted #{} :updated {"2" {:completed false, :text "3 onions"}}}
:updated {"2" {:completed false, :text "3 onions"}}} :recipes {:deleted #{}, :updated nil}}
:recipes {:deleted #{}, :updated nil}} :hash (hasch/uuid {:grubs {"1" {:text "2 apples" :completed true}}
:hash (hasch/uuid {:grubs {"1" {:text "2 apples" :completed true}} :recipes {}})})))
:recipes {}})}
diff-response)))))
(deftest diff-client-out-of-sync (fact "Force full sync if client is out of sync"
;; Returns full sync if client state not found
;; in history
(let [states (hashed-states (let [states (hashed-states
{:grubs {"1" {:text "2 apples" :completed false}} :recipes {}} {:grubs {"1" {:text "2 apples" :completed false}} :recipes {}}
{:grubs {"1" {:text "2 apples" :completed false} {:grubs {"1" {:text "2 apples" :completed false}
@ -78,28 +69,25 @@
:recipes {}}) :recipes {}})
states* (atom states) states* (atom states)
msg {:type :diff msg {:type :diff
:diff {:grubs {:updated {"0" {:completed true}} :deleted #{}}} :diff {:grubs {:updated {"0" {:completed true}} :deleted #{}}}
:hash (:hash {:grubs {"0" {:text "milk" :completed false}} :hash (:hash {:grubs {"0" {:text "milk" :completed false}}
:recipes {}})} :recipes {}})}
in (chan 1) in (chan 1)
out (chan 1)] out (chan 1)]
(state/make-server-agent in out states*) (state/make-server-agent in out states*)
(>!! in msg) (>!! in msg)
(let [diff-response (<!! out)] (let [response (<!! out)]
(is (= (hashed-states @states* => (hashed-states
{:grubs {"1" {:text "2 apples" :completed false}} :recipes {}} {:grubs {"1" {:text "2 apples" :completed false}} :recipes {}}
{:grubs {"1" {:text "2 apples" :completed false} {:grubs {"1" {:text "2 apples" :completed false}
"2" {:text "3 onions" :completed false}} "2" {:text "3 onions" :completed false}}
:recipes {}}) :recipes {}})
@states*)) response => {:type :full-sync
(is (= {:type :full-sync :state {:grubs {"1" {:text "2 apples" :completed false}
:state {:grubs {"1" {:text "2 apples" :completed false} "2" {:text "3 onions" :completed false}}
"2" {:text "3 onions" :completed false}} :recipes {}}})))
:recipes {}}}
diff-response)))))
(deftest full-sync-request (fact "Full sync if client requests it"
;; Returns full sync if client requests it
(let [states (hashed-states (let [states (hashed-states
{:grubs {"1" {:text "2 apples" :completed false}} :recipes {}} {:grubs {"1" {:text "2 apples" :completed false}} :recipes {}}
{:grubs {"1" {:text "2 apples" :completed false} {:grubs {"1" {:text "2 apples" :completed false}
@ -111,21 +99,18 @@
out (chan 1)] out (chan 1)]
(state/make-server-agent in out states*) (state/make-server-agent in out states*)
(>!! in msg) (>!! in msg)
(let [diff-response (<!! out)] (let [response (<!! out)]
(is (= (hashed-states @states* => (hashed-states
{:grubs {"1" {:text "2 apples" :completed false}} :recipes {}} {:grubs {"1" {:text "2 apples" :completed false}} :recipes {}}
{:grubs {"1" {:text "2 apples" :completed false} {:grubs {"1" {:text "2 apples" :completed false}
"2" {:text "3 onions" :completed false}} "2" {:text "3 onions" :completed false}}
:recipes {}}) :recipes {}})
@states*)) response => {:type :full-sync
(is (= {:type :full-sync :state {:grubs {"1" {:text "2 apples" :completed false}
:state {:grubs {"1" {:text "2 apples" :completed false} "2" {:text "3 onions" :completed false}}
"2" {:text "3 onions" :completed false}} :recipes {}}})))
:recipes {}}}
diff-response)))))
(deftest new-state (fact "Passes diffs of new states to client"
;; Passes diff with new state to client
(let [states (hashed-states (let [states (hashed-states
{:grubs {"1" {:text "2 apples" :completed false}} :recipes {}} {:grubs {"1" {:text "2 apples" :completed false}} :recipes {}}
{:grubs {"1" {:text "2 apples" :completed false} {:grubs {"1" {:text "2 apples" :completed false}
@ -143,21 +128,19 @@
out (chan 1)] out (chan 1)]
(state/make-server-agent in out states* client-state) (state/make-server-agent in out states* client-state)
(>!! in msg) (>!! in msg)
(let [diff-response (<!! out)] (let [response (<!! out)]
(is (= (hashed-states @states* => (hashed-states
{:grubs {"1" {:text "2 apples" :completed false}} :recipes {}} {:grubs {"1" {:text "2 apples" :completed false}} :recipes {}}
{:grubs {"1" {:text "2 apples" :completed false} {:grubs {"1" {:text "2 apples" :completed false}
"2" {:text "3 onions" :completed false}} "2" {:text "3 onions" :completed false}}
:recipes {}} :recipes {}}
{:grubs {"1" {:text "2 apples" :completed false} {:grubs {"1" {:text "2 apples" :completed false}
"2" {:text "3 onions" :completed false} "2" {:text "3 onions" :completed false}
"3" {:text "milk" :completed false}} "3" {:text "milk" :completed false}}
:recipes {}}) :recipes {}})
@states*)) response => {:type :diff
(is (= {:type :diff :diff {:grubs {:deleted #{}
:diff {:grubs {:deleted #{} :updated {"2" {:text "3 onions" :completed false}
:updated {"2" {:text "3 onions" :completed false} "3" {:text "milk" :completed false}}}
"3" {:text "milk" :completed false}}} :recipes {:deleted #{}, :updated nil}}
:recipes {:deleted #{}, :updated nil}} :hash (hasch/uuid client-state)})))
:hash (hasch/uuid client-state)}
diff-response)))))