Implement expansion (evaluation) of function values in factories

This commit is contained in:
Michael S. Klishin 2012-03-06 11:35:35 +04:00
parent b9016aff99
commit 2e47407ef0
2 changed files with 35 additions and 8 deletions

View file

@ -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 }]

View file

@ -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)))