Implement expansion (evaluation) of function values in factories
This commit is contained in:
parent
b9016aff99
commit
2e47407ef0
2 changed files with 35 additions and 8 deletions
|
|
@ -10,6 +10,7 @@
|
|||
(ns monger.testing
|
||||
(:require [monger.collection :as mc]
|
||||
[monger.result :as mr])
|
||||
(:use [monger.internal.fn :only (expand-all) :as fntools])
|
||||
(:import [org.bson.types ObjectId]))
|
||||
|
||||
|
||||
|
|
@ -39,6 +40,7 @@
|
|||
(mc/remove ~coll-arg))))
|
||||
|
||||
|
||||
|
||||
(def factories (atom {}))
|
||||
(def defaults (atom {}))
|
||||
|
||||
|
|
@ -52,11 +54,12 @@
|
|||
(swap! factories (fn [a]
|
||||
(assoc-in a [(name f-group) (name f-name)] attributes))))
|
||||
|
||||
|
||||
(defn build
|
||||
[f-group f-name & { :as overrides }]
|
||||
(let [d (@defaults (name f-group))
|
||||
attributes (get-in @factories [(name f-group) (name f-name)])]
|
||||
(merge { :_id (ObjectId.) } d attributes overrides)))
|
||||
(expand-all (merge { :_id (ObjectId.) } d attributes overrides))))
|
||||
|
||||
(defn seed
|
||||
[f-group f-name & { :as overrides }]
|
||||
|
|
|
|||
|
|
@ -2,10 +2,11 @@
|
|||
(:use [clojure.test]
|
||||
[monger testing joda-time]
|
||||
[monger.test.fixtures]
|
||||
[clj-time.core :only [days ago weeks]])
|
||||
[clj-time.core :only [days ago weeks now]])
|
||||
(:require [monger.collection :as mc]
|
||||
[monger.test.helper :as helper])
|
||||
(:import [org.bson.types ObjectId]))
|
||||
(:import [org.bson.types ObjectId]
|
||||
[org.joda.time DateTime]))
|
||||
|
||||
|
||||
(helper/connect!)
|
||||
|
|
@ -17,13 +18,27 @@
|
|||
(defaults-for "domains"
|
||||
:ipv6-enabled false)
|
||||
|
||||
(factory "domains" "clojure.org"
|
||||
(factory "domains" "clojure"
|
||||
:name "clojure.org"
|
||||
:created-at (-> 2 days ago))
|
||||
|
||||
(factory "domains" "elixir"
|
||||
:name "elixir-lang.org"
|
||||
:created-at (fn [] (now))
|
||||
:topics (fn [] ["programming" "erlang" "beam" "ruby"])
|
||||
:related {
|
||||
:terms (fn [] ["erlang" "python" "ruby"])
|
||||
})
|
||||
|
||||
(factory "pages" "http://clojure.org/rationale"
|
||||
:name "/rationale"
|
||||
:created-at (-> 2 days ago)
|
||||
;; :domain-id (parent-id "domains" "clojure")
|
||||
)
|
||||
|
||||
(deftest test-building-documents-from-a-factory-case-1
|
||||
(let [t (-> 2 weeks ago)
|
||||
doc (build "domains" "clojure.org" :created-at t)]
|
||||
doc (build "domains" "clojure" :created-at t)]
|
||||
(is (:_id doc))
|
||||
(is (= t (:created-at doc)))
|
||||
(is (= "clojure.org" (:name doc)))
|
||||
|
|
@ -31,7 +46,7 @@
|
|||
|
||||
(deftest test-building-documents-from-a-factory-case-2
|
||||
(let [oid (ObjectId.)
|
||||
doc (build "domains" "clojure.org" :_id oid)]
|
||||
doc (build "domains" "clojure" :_id oid)]
|
||||
(is (= oid (:_id doc)))
|
||||
(is (= "clojure.org" (:name doc)))
|
||||
(is (false? (:ipv6-enabled doc)))))
|
||||
|
|
@ -39,19 +54,28 @@
|
|||
(deftest test-building-documents-from-a-factory-case-3
|
||||
(let [oid (ObjectId.)
|
||||
t (-> 3 weeks ago)
|
||||
doc (build "domains" "clojure.org" :_id oid :created-at t :name "clojurewerkz.org" :ipv6-enabled true)]
|
||||
doc (build "domains" "clojure" :_id oid :created-at t :name "clojurewerkz.org" :ipv6-enabled true)]
|
||||
(is (= oid (:_id doc)))
|
||||
(is (= t (:created-at doc)))
|
||||
(is (= "clojurewerkz.org" (:name doc)))
|
||||
(is (:ipv6-enabled doc))))
|
||||
|
||||
|
||||
(deftest test-building-documents-from-a-factory-case-4
|
||||
(let [doc (build "domains" "elixir")]
|
||||
(is (:_id doc))
|
||||
(is (instance? DateTime (:created-at doc)))
|
||||
(is (= ["erlang" "python" "ruby"] (get-in doc [:related :terms])))
|
||||
(is (= "elixir-lang.org" (:name doc)))
|
||||
(is (not (:ipv6-enabled doc)))))
|
||||
|
||||
|
||||
|
||||
|
||||
(deftest test-seeding-documents-using-a-factory-case1
|
||||
(is (mc/empty? "domains"))
|
||||
(let [t (-> 2 weeks ago)
|
||||
doc (seed "domains" "clojure.org" :created-at t)]
|
||||
doc (seed "domains" "clojure" :created-at t)]
|
||||
(is (= 1 (mc/count "domains")))
|
||||
(is (:_id doc))
|
||||
(is (= t (:created-at doc)))
|
||||
|
|
|
|||
Loading…
Reference in a new issue