From 2e47407ef0b7e32822dd13abe3a9e8b8989fb9fe Mon Sep 17 00:00:00 2001 From: "Michael S. Klishin" Date: Tue, 6 Mar 2012 11:35:35 +0400 Subject: [PATCH] Implement expansion (evaluation) of function values in factories --- src/monger/testing.clj | 5 ++++- test/monger/test/factory_dsl.clj | 38 ++++++++++++++++++++++++++------ 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/src/monger/testing.clj b/src/monger/testing.clj index 8034342..bbd8498 100644 --- a/src/monger/testing.clj +++ b/src/monger/testing.clj @@ -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 }] diff --git a/test/monger/test/factory_dsl.clj b/test/monger/test/factory_dsl.clj index d5439a9..5da6952 100644 --- a/test/monger/test/factory_dsl.clj +++ b/test/monger/test/factory_dsl.clj @@ -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)))