Introduce monger.testing/memoized-oid (convenience function for defining referenced associations)
This commit is contained in:
parent
425327aafa
commit
cedfecbbbd
2 changed files with 57 additions and 24 deletions
|
|
@ -87,7 +87,8 @@
|
||||||
(f))))
|
(f))))
|
||||||
|
|
||||||
(defn build
|
(defn build
|
||||||
"Generates a new document and returns it"
|
"Generates a new document and returns it.
|
||||||
|
Unless _id field is defined by the factory, it is generated."
|
||||||
[f-group f-name & { :as overrides }]
|
[f-group f-name & { :as overrides }]
|
||||||
(let [d (@defaults (name f-group))
|
(let [d (@defaults (name f-group))
|
||||||
attributes (get-in @factories [(name f-group) (name f-name)])
|
attributes (get-in @factories [(name f-group) (name f-name)])
|
||||||
|
|
@ -95,7 +96,8 @@
|
||||||
(expand-all-with merged expand-for-building)))
|
(expand-all-with merged expand-for-building)))
|
||||||
|
|
||||||
(defn seed
|
(defn seed
|
||||||
"Generates and inserts a new document, then returns it"
|
"Generates and inserts a new document, then returns it.
|
||||||
|
Unless _id field is defined by the factory, it is generated."
|
||||||
[f-group f-name & { :as overrides }]
|
[f-group f-name & { :as overrides }]
|
||||||
(io!
|
(io!
|
||||||
(let [d (@defaults (name f-group))
|
(let [d (@defaults (name f-group))
|
||||||
|
|
@ -133,3 +135,9 @@
|
||||||
"Returns last object id of a document inserted using given factory"
|
"Returns last object id of a document inserted using given factory"
|
||||||
[f-group f-name]
|
[f-group f-name]
|
||||||
(get-in @last-oids [(name f-group) (name f-name)]))
|
(get-in @last-oids [(name f-group) (name f-name)]))
|
||||||
|
|
||||||
|
|
||||||
|
(def ^{ :doc "Returns a new object id. Generates it if needed, otherwise returns a cached version.
|
||||||
|
Useful for defining referenced associations between fixture documents." }
|
||||||
|
memoized-oid (memoize (fn [f-group f-name]
|
||||||
|
(ObjectId.))))
|
||||||
|
|
|
||||||
|
|
@ -18,30 +18,37 @@
|
||||||
(defaults-for "domains"
|
(defaults-for "domains"
|
||||||
:ipv6-enabled false)
|
:ipv6-enabled false)
|
||||||
|
|
||||||
(factory "domains" "clojure"
|
(let [coll "domains"]
|
||||||
:name "clojure.org"
|
(factory coll "clojure"
|
||||||
:created-at (-> 2 days ago)
|
:name "clojure.org"
|
||||||
:embedded [(embedded-doc "pages" "http://clojure.org/lisp")
|
:created-at (-> 2 days ago)
|
||||||
(embedded-doc "pages" "http://clojure.org/jvm_hosted")
|
:embedded [(embedded-doc "pages" "http://clojure.org/lisp")
|
||||||
(embedded-doc "pages" "http://clojure.org/runtime_polymorphism")])
|
(embedded-doc "pages" "http://clojure.org/jvm_hosted")
|
||||||
|
(embedded-doc "pages" "http://clojure.org/runtime_polymorphism")])
|
||||||
|
|
||||||
(factory "domains" "elixir"
|
(factory coll "elixir"
|
||||||
:name "elixir-lang.org"
|
:_id (memoized-oid coll "elixir")
|
||||||
:created-at (fn [] (now))
|
:name "elixir-lang.org"
|
||||||
:topics (fn [] ["programming" "erlang" "beam" "ruby"])
|
:created-at (fn [] (now))
|
||||||
:related {
|
:topics (fn [] ["programming" "erlang" "beam" "ruby"])
|
||||||
:terms (fn [] ["erlang" "python" "ruby"])
|
:related {
|
||||||
})
|
:terms (fn [] ["erlang" "python" "ruby"])
|
||||||
|
}))
|
||||||
|
|
||||||
|
(let [coll "pages"]
|
||||||
|
(factory coll "http://clojure.org/rationale"
|
||||||
|
:name "/rationale"
|
||||||
|
:domain-id (parent-id "domains" "clojure"))
|
||||||
|
(factory coll "http://clojure.org/jvm_hosted"
|
||||||
|
:name "/jvm_hosted")
|
||||||
|
(factory coll "http://clojure.org/runtime_polymorphism"
|
||||||
|
:name "/runtime_polymorphism")
|
||||||
|
(factory coll "http://clojure.org/lisp"
|
||||||
|
:name "/lisp")
|
||||||
|
(factory coll "http://elixir-lang.org/getting_started"
|
||||||
|
:name "/getting_started/1.html"
|
||||||
|
:domain-id (memoized-oid "domains" "elixir")))
|
||||||
|
|
||||||
(factory "pages" "http://clojure.org/rationale"
|
|
||||||
:name "/rationale"
|
|
||||||
:domain-id (parent-id "domains" "clojure"))
|
|
||||||
(factory "pages" "http://clojure.org/jvm_hosted"
|
|
||||||
:name "/jvm_hosted")
|
|
||||||
(factory "pages" "http://clojure.org/runtime_polymorphism"
|
|
||||||
:name "/runtime_polymorphism")
|
|
||||||
(factory "pages" "http://clojure.org/lisp"
|
|
||||||
:name "/lisp")
|
|
||||||
|
|
||||||
(deftest test-building-documents-from-a-factory-case-1
|
(deftest test-building-documents-from-a-factory-case-1
|
||||||
(let [t (-> 2 weeks ago)
|
(let [t (-> 2 weeks ago)
|
||||||
|
|
@ -73,6 +80,7 @@
|
||||||
(deftest test-building-documents-from-a-factory-case-4
|
(deftest test-building-documents-from-a-factory-case-4
|
||||||
(let [doc (build "domains" "elixir")]
|
(let [doc (build "domains" "elixir")]
|
||||||
(is (:_id doc))
|
(is (:_id doc))
|
||||||
|
(is (= (:_id doc) (memoized-oid "domains" "elixir")))
|
||||||
(is (instance? DateTime (:created-at doc)))
|
(is (instance? DateTime (:created-at doc)))
|
||||||
(is (= ["erlang" "python" "ruby"] (get-in doc [:related :terms])))
|
(is (= ["erlang" "python" "ruby"] (get-in doc [:related :terms])))
|
||||||
(is (= "elixir-lang.org" (:name doc)))
|
(is (= "elixir-lang.org" (:name doc)))
|
||||||
|
|
@ -82,6 +90,9 @@
|
||||||
(let [doc (build "pages" "http://clojure.org/rationale")]
|
(let [doc (build "pages" "http://clojure.org/rationale")]
|
||||||
(is (:domain-id doc))))
|
(is (:domain-id doc))))
|
||||||
|
|
||||||
|
(deftest test-building-child-documents-that-use-memoized-oids-for-parents
|
||||||
|
(let [doc (build "pages" "http://elixir-lang.org/getting_started")]
|
||||||
|
(is (= (:domain-id doc) (memoized-oid "domains" "elixir")))))
|
||||||
|
|
||||||
|
|
||||||
(deftest test-seeding-documents-using-a-factory-case-1
|
(deftest test-seeding-documents-using-a-factory-case-1
|
||||||
|
|
@ -128,3 +139,17 @@
|
||||||
(seed-all "pages")
|
(seed-all "pages")
|
||||||
(is (>= (mc/count "domains") 1))
|
(is (>= (mc/count "domains") 1))
|
||||||
(is (>= (mc/count "pages") 4)))
|
(is (>= (mc/count "pages") 4)))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(deftest test-named-memoized-object-ids
|
||||||
|
(let [oid1 (memoized-oid "domains" "clojure.org")
|
||||||
|
oid2 (memoized-oid "domains" "python.org")]
|
||||||
|
(is (= oid1 (memoized-oid "domains" "clojure.org")))
|
||||||
|
(is (= oid1 (memoized-oid "domains" "clojure.org")))
|
||||||
|
(is (= oid1 (memoized-oid "domains" "clojure.org")))
|
||||||
|
(is (= oid1 (memoized-oid "domains" "clojure.org")))
|
||||||
|
(is (not (= oid1 oid2)))
|
||||||
|
(is (= oid2 (memoized-oid "domains" "python.org")))
|
||||||
|
(is (= oid2 (memoized-oid "domains" "python.org")))
|
||||||
|
(is (= oid2 (memoized-oid "domains" "python.org")))))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue