diff --git a/test/monger/test/collection.clj b/test/monger/test/collection.clj index 64e9078..7cef427 100644 --- a/test/monger/test/collection.clj +++ b/test/monger/test/collection.clj @@ -20,71 +20,6 @@ (use-fixtures :each purge-people purge-docs purge-things purge-libraries) -;; -;; insert -;; - -(deftest insert-a-basic-document-without-id-and-with-default-write-concern - (let [collection "people" - doc { :name "Joe", :age 30 }] - (is (monger.result/ok? (mgcol/insert "people" doc))) - (is (= 1 (mgcol/count collection))))) - -(deftest insert-a-basic-document-with-explicitly-passed-database-without-id-and-with-default-write-concern - (let [collection "people" - doc { :name "Joe", :age 30 }] - (dotimes [n 5] - (is (monger.result/ok? (mgcol/insert monger.core/*mongodb-database* "people" doc WriteConcern/SAFE)))) - (is (= 5 (mgcol/count collection))))) - -(deftest insert-a-basic-document-without-id-and-with-explicit-write-concern - (let [collection "people" - doc { :name "Joe", :age 30 }] - (is (monger.result/ok? (mgcol/insert "people" doc WriteConcern/SAFE))) - (is (= 1 (mgcol/count collection))))) - -(deftest insert-a-basic-db-object-without-id-and-with-default-write-concern - (let [collection "people" - doc (mgcnv/to-db-object { :name "Joe", :age 30 })] - (is (nil? (.get ^DBObject doc "_id"))) - (mgcol/insert "people" doc) - (is (not (nil? (monger.util/get-id doc)))))) - -(deftest insert-a-map-with-id-and-with-default-write-concern - (let [collection "people" - id (ObjectId.) - doc { :name "Joe", :age 30 "_id" id } - result (mgcol/insert "people" doc)] - (is (= id (monger.util/get-id doc))))) - - - -;; -;; insert-batch -;; - -(deftest insert-a-batch-of-basic-documents-without-ids-and-with-default-write-concern - (let [collection "people" - docs [{ :name "Joe", :age 30 }, { :name "Paul", :age 27 }]] - (is (monger.result/ok? (mgcol/insert-batch "people" docs))) - (is (= 2 (mgcol/count collection))))) - -(deftest insert-a-batch-of-basic-documents-without-ids-and-with-explicit-write-concern - (let [collection "people" - docs [{ :name "Joe", :age 30 }, { :name "Paul", :age 27 }]] - (is (monger.result/ok? (mgcol/insert-batch "people" docs WriteConcern/NORMAL))) - (is (= 2 (mgcol/count collection))))) - -(deftest insert-a-batch-of-basic-documents-with-explicit-database-without-ids-and-with-explicit-write-concern - (let [collection "people" - docs [{ :name "Joe", :age 30 }, { :name "Paul", :age 27 }]] - (dotimes [n 44] - (is (monger.result/ok? (mgcol/insert-batch monger.core/*mongodb-database* "people" docs WriteConcern/NORMAL)))) - (is (= 88 (mgcol/count collection))))) - - - - ;; ;; count, remove ;; @@ -128,301 +63,6 @@ (is (= 1 (mgcol/count collection))))) -;; -;; find-one -;; - -(deftest find-one-full-document-when-collection-is-empty - (let [collection "docs"] - (is (nil? (mgcol/find-one collection {}))))) - -(deftest find-one-full-document-as-map-when-collection-is-empty - (let [collection "docs"] - (is (nil? (mgcol/find-one-as-map collection {}))))) - - -(deftest find-one-full-document-when-collection-has-matches - (let [collection "docs" - doc-id (monger.util/random-uuid) - doc { :data-store "MongoDB", :language "Clojure", :_id doc-id } - _ (mgcol/insert collection doc) - found-one (mgcol/find-one collection { :language "Clojure" })] - (is (= (:_id doc) (monger.util/get-id found-one))) - (is (= (mgcnv/from-db-object found-one true) doc)) - (is (= (mgcnv/to-db-object doc) found-one)))) - -(deftest find-one-full-document-as-map-when-collection-has-matches - (let [collection "docs" - doc-id (monger.util/random-uuid) - doc { :data-store "MongoDB", :language "Clojure", :_id doc-id }] - (mgcol/insert collection doc) - (is (= doc (mgcol/find-one-as-map collection { :language "Clojure" }))))) - - - -(deftest find-one-partial-document-when-collection-has-matches - (let [collection "docs" - doc-id (monger.util/random-uuid) - doc { :data-store "MongoDB", :language "Clojure", :_id doc-id } - fields [:language] - _ (mgcol/insert collection doc) - loaded (mgcol/find-one collection { :language "Clojure" } fields)] - (is (nil? (.get ^DBObject loaded "data-store"))) - (is (= doc-id (monger.util/get-id loaded))) - (is (= "Clojure" (.get ^DBObject loaded "language"))))) - - -(deftest find-one-partial-document-as-map-when-collection-has-matches - (let [collection "docs" - doc-id (monger.util/random-uuid) - doc { :data-store "MongoDB", :language "Clojure", :_id doc-id } - fields [:data-store]] - (mgcol/insert collection doc) - (is (= { :data-store "MongoDB", :_id doc-id } (mgcol/find-one-as-map collection { :language "Clojure" } fields true))))) - - - -;; -;; find-by-id -;; - -(deftest find-full-document-by-string-id-when-that-document-does-not-exist - (let [collection "libraries" - doc-id (monger.util/random-uuid)] - (is (nil? (mgcol/find-by-id collection doc-id))))) - -(deftest find-full-document-by-object-id-when-that-document-does-not-exist - (let [collection "libraries" - doc-id (ObjectId.)] - (is (nil? (mgcol/find-by-id collection doc-id))))) - -(deftest find-full-document-by-id-as-map-when-that-document-does-not-exist - (let [collection "libraries" - doc-id (monger.util/random-uuid)] - (is (nil? (mgcol/find-map-by-id collection doc-id))))) - - -(deftest find-full-document-by-string-id-when-document-does-exist - (let [collection "libraries" - doc-id (monger.util/random-uuid) - doc { :data-store "MongoDB", :language "Clojure", :_id doc-id }] - (mgcol/insert collection doc) - (is (= (doc (mgcol/find-by-id collection doc-id)))))) - -(deftest find-full-document-by-object-id-when-document-does-exist - (let [collection "libraries" - doc-id (ObjectId.) - doc { :data-store "MongoDB", :language "Clojure", :_id doc-id }] - (mgcol/insert collection doc) - (is (= (doc (mgcol/find-by-id collection doc-id)))))) - -(deftest find-full-document-map-by-string-id-when-document-does-exist - (let [collection "libraries" - doc-id (monger.util/random-uuid) - doc { :data-store "MongoDB", :language "Clojure", :_id doc-id }] - (mgcol/insert collection doc) - (is (= (doc (mgcol/find-map-by-id collection doc-id)))))) - -(deftest find-full-document-map-by-object-id-when-document-does-exist - (let [collection "libraries" - doc-id (ObjectId.) - doc { :data-store "MongoDB", :language "Clojure", :_id doc-id }] - (mgcol/insert collection doc) - (is (= (doc (mgcol/find-map-by-id collection doc-id)))))) - -(deftest find-partial-document-by-id-when-document-does-exist - (let [collection "libraries" - doc-id (monger.util/random-uuid) - doc { :data-store "MongoDB", :language "Clojure", :_id doc-id }] - (mgcol/insert collection doc) - (is (= ({ :language "Clojure" } (mgcol/find-by-id collection doc-id [ :language ])))))) - - -(deftest find-partial-document-as-map-by-id-when-document-does-exist - (let [collection "libraries" - doc-id (monger.util/random-uuid) - doc { :data-store "MongoDB", :language "Clojure", :_id doc-id }] - (mgcol/insert collection doc) - (is (= ({ :language "Clojure" } (mgcol/find-map-by-id collection doc-id [ :language ])))))) - - -;; -;; find -;; - -(deftest find-full-document-when-collection-is-empty - (let [collection "docs" - cursor (mgcol/find collection)] - (is (empty? (iterator-seq cursor))))) - -(deftest find-document-seq-when-collection-is-empty - (let [collection "docs"] - (is (empty? (mgcol/find-seq collection))))) - -(deftest find-multiple-documents-when-collection-is-empty - (let [collection "libraries"] - (is (empty? (mgcol/find collection { :language "Scala" }))))) - -(deftest find-multiple-maps-when-collection-is-empty - (let [collection "libraries"] - (is (empty? (mgcol/find-maps collection { :language "Scala" }))))) - -(deftest find-multiple-documents-by-regex - (let [collection "libraries"] - (mgcol/insert-batch collection [{ :language "Clojure", :name "monger" } - { :language "Java", :name "nhibernate" } - { :language "JavaScript", :name "sprout-core" }]) - (is (= 2 (monger.core/count (mgcol/find collection { :language #"Java*" })))))) - -(deftest find-multiple-documents - (let [collection "libraries"] - (mgcol/insert-batch collection [{ :language "Clojure", :name "monger" } - { :language "Clojure", :name "langohr" } - { :language "Clojure", :name "incanter" } - { :language "Scala", :name "akka" }]) - (is (= 1 (monger.core/count (mgcol/find collection { :language "Scala" })))) - (is (= 3 (.count (mgcol/find collection { :language "Clojure" })))) - (is (empty? (mgcol/find collection { :language "Java" }))))) - - -(deftest find-document-specify-fields - (let [collection "libraries" - _ (mgcol/insert collection { :language "Clojure", :name "monger" }) - result (mgcol/find collection { :language "Clojure"} [:language])] - (is (= (seq [:_id :language]) (keys (mgcnv/from-db-object (.next result) true)))))) - -(deftest find-and-iterate-over-multiple-documents-the-hard-way - (let [collection "libraries"] - (mgcol/insert-batch collection [{ :language "Clojure", :name "monger" } - { :language "Clojure", :name "langohr" } - { :language "Clojure", :name "incanter" } - { :language "Scala", :name "akka" }]) - (doseq [doc (take 3 (map (fn [dbo] - (mgcnv/from-db-object dbo true)) - (mgcol/find-seq collection { :language "Clojure" })))] - (is (= "Clojure" (:language doc)))))) - -(deftest find-and-iterate-over-multiple-documents - (let [collection "libraries"] - (mgcol/insert-batch collection [{ :language "Clojure", :name "monger" } - { :language "Clojure", :name "langohr" } - { :language "Clojure", :name "incanter" } - { :language "Scala", :name "akka" }]) - (doseq [doc (take 3 (mgcol/find-maps collection { :language "Clojure" }))] - (is (= "Clojure" (:language doc)))))) - - -(deftest find-multiple-maps - (let [collection "libraries"] - (mgcol/insert-batch collection [{ :language "Clojure", :name "monger" } - { :language "Clojure", :name "langohr" } - { :language "Clojure", :name "incanter" } - { :language "Scala", :name "akka" }]) - (is (= 1 (clojure.core/count (mgcol/find-maps collection { :language "Scala" })))) - (is (= 3 (.count (mgcol/find-maps collection { :language "Clojure" })))) - (is (empty? (mgcol/find-maps collection { :language "Java" }))) - (is (empty? (mgcol/find-maps monger.core/*mongodb-database* collection { :language "Java" } [:language :name]))))) - - - -(deftest find-multiple-partial-documents - (let [collection "libraries"] - (mgcol/insert-batch collection [{ :language "Clojure", :name "monger" } - { :language "Clojure", :name "langohr" } - { :language "Clojure", :name "incanter" } - { :language "Scala", :name "akka" }]) - (let [scala-libs (mgcol/find collection { :language "Scala" } [:name]) - clojure-libs (mgcol/find collection { :language "Clojure"} [:language])] - (is (= 1 (.count scala-libs))) - (is (= 3 (.count clojure-libs))) - (doseq [i clojure-libs] - (let [doc (mgcnv/from-db-object i true)] - (is (= (:language doc) "Clojure")))) - (is (empty? (mgcol/find collection { :language "Erlang" } [:name])))))) - -;; -;; update, save -;; - -(deftest update-document-by-id-without-upsert - (let [collection "libraries" - doc-id (monger.util/random-uuid) - date (Date.) - doc { :created-at date, :data-store "MongoDB", :language "Clojure", :_id doc-id } - modified-doc { :created-at date, :data-store "MongoDB", :language "Erlang", :_id doc-id }] - (mgcol/insert collection doc) - (is (= (doc (mgcol/find-by-id collection doc-id)))) - (mgcol/update collection { :_id doc-id } { :language "Erlang" }) - (is (= (modified-doc (mgcol/find-by-id collection doc-id)))))) - - -(deftest update-multiple-documents - (let [collection "libraries"] - (mgcol/insert collection { :language "Clojure", :name "monger" }) - (mgcol/insert collection { :language "Clojure", :name "langohr" }) - (mgcol/insert collection { :language "Clojure", :name "incanter" }) - (mgcol/insert collection { :language "Scala", :name "akka" }) - (is (= 3 (mgcol/count collection { :language "Clojure" }))) - (is (= 1 (mgcol/count collection { :language "Scala" }))) - (is (= 0 (mgcol/count collection { :language "Python" }))) - (mgcol/update collection { :language "Clojure" } { $set { :language "Python" } } :multi true) - (is (= 0 (mgcol/count collection { :language "Clojure" }))) - (is (= 1 (mgcol/count collection { :language "Scala" }))) - (is (= 3 (mgcol/count collection { :language "Python" }))))) - - -(deftest save-a-new-document - (let [collection "people" - document { :name "Joe", :age 30 }] - (is (monger.result/ok? (mgcol/save "people" document))) - (is (= 1 (mgcol/count collection))))) - - -(deftest save-a-new-basic-db-object - (let [collection "people" - doc (mgcnv/to-db-object { :name "Joe", :age 30 })] - (is (nil? (monger.util/get-id doc))) - (mgcol/save monger.core/*mongodb-database* "people" doc WriteConcern/SAFE) - (is (not (nil? (monger.util/get-id doc)))))) - - - -(deftest update-an-existing-document-using-save - (let [collection "people" - doc-id "people-1" - document { :_id doc-id, :name "Joe", :age 30 }] - (is (monger.result/ok? (mgcol/insert "people" document))) - (is (= 1 (mgcol/count collection))) - (mgcol/save collection { :_id doc-id, :name "Alan", :age 40 }) - (is (= 1 (mgcol/count collection { :name "Alan", :age 40 }))))) - - -(deftest set-an-attribute-on-existing-document-using-update - (let [collection "people" - doc-id (monger.util/object-id) - document { :_id doc-id, :name "Joe", :age 30 }] - (is (monger.result/ok? (mgcol/insert "people" document))) - (is (= 1 (mgcol/count collection))) - (is (= 0 (mgcol/count collection { :has_kids true }))) - (mgcol/update collection { :_id doc-id } { $set { :has_kids true } }) - (is (= 1 (mgcol/count collection { :has_kids true }))))) - - - -(deftest upsert-a-document - (let [collection "libraries" - doc-id (monger.util/random-uuid) - date (Date.) - doc { :created-at date, :data-store "MongoDB", :language "Clojure", :_id doc-id } - modified-doc { :created-at date, :data-store "MongoDB", :language "Erlang", :_id doc-id }] - (is (not (monger.result/updated-existing? (mgcol/update collection { :language "Clojure" } doc :upsert true)))) - (is (= 1 (mgcol/count collection))) - (is (monger.result/updated-existing? (mgcol/update collection { :language "Clojure" } modified-doc :multi false :upsert true))) - (is (= 1 (mgcol/count collection))) - (is (= (modified-doc (mgcol/find-by-id collection doc-id)))) - (mgcol/remove collection))) - - ;; ;; indexes ;; diff --git a/test/monger/test/inserting.clj b/test/monger/test/inserting.clj new file mode 100644 index 0000000..366e97e --- /dev/null +++ b/test/monger/test/inserting.clj @@ -0,0 +1,81 @@ +(set! *warn-on-reflection* true) + +(ns monger.test.inserting + (:import [com.mongodb WriteResult WriteConcern DBCursor DBObject] + [org.bson.types ObjectId] + [java.util Date]) + (:require [monger core util] + [monger.collection :as mgcol] + [monger.result :as mgres] + [monger.conversion :as mgcnv] + [monger.test.helper :as helper]) + (:use [clojure.test] + [monger.operators] + [monger.test.fixtures])) + +(helper/connect!) + +(use-fixtures :each purge-people purge-docs purge-things purge-libraries) + + +;; +;; insert +;; + +(deftest insert-a-basic-document-without-id-and-with-default-write-concern + (let [collection "people" + doc { :name "Joe", :age 30 }] + (is (monger.result/ok? (mgcol/insert "people" doc))) + (is (= 1 (mgcol/count collection))))) + +(deftest insert-a-basic-document-with-explicitly-passed-database-without-id-and-with-default-write-concern + (let [collection "people" + doc { :name "Joe", :age 30 }] + (dotimes [n 5] + (is (monger.result/ok? (mgcol/insert monger.core/*mongodb-database* "people" doc WriteConcern/SAFE)))) + (is (= 5 (mgcol/count collection))))) + +(deftest insert-a-basic-document-without-id-and-with-explicit-write-concern + (let [collection "people" + doc { :name "Joe", :age 30 }] + (is (monger.result/ok? (mgcol/insert "people" doc WriteConcern/SAFE))) + (is (= 1 (mgcol/count collection))))) + +(deftest insert-a-basic-db-object-without-id-and-with-default-write-concern + (let [collection "people" + doc (mgcnv/to-db-object { :name "Joe", :age 30 })] + (is (nil? (.get ^DBObject doc "_id"))) + (mgcol/insert "people" doc) + (is (not (nil? (monger.util/get-id doc)))))) + +(deftest insert-a-map-with-id-and-with-default-write-concern + (let [collection "people" + id (ObjectId.) + doc { :name "Joe", :age 30 "_id" id } + result (mgcol/insert "people" doc)] + (is (= id (monger.util/get-id doc))))) + + + +;; +;; insert-batch +;; + +(deftest insert-a-batch-of-basic-documents-without-ids-and-with-default-write-concern + (let [collection "people" + docs [{ :name "Joe", :age 30 }, { :name "Paul", :age 27 }]] + (is (monger.result/ok? (mgcol/insert-batch "people" docs))) + (is (= 2 (mgcol/count collection))))) + +(deftest insert-a-batch-of-basic-documents-without-ids-and-with-explicit-write-concern + (let [collection "people" + docs [{ :name "Joe", :age 30 }, { :name "Paul", :age 27 }]] + (is (monger.result/ok? (mgcol/insert-batch "people" docs WriteConcern/NORMAL))) + (is (= 2 (mgcol/count collection))))) + +(deftest insert-a-batch-of-basic-documents-with-explicit-database-without-ids-and-with-explicit-write-concern + (let [collection "people" + docs [{ :name "Joe", :age 30 }, { :name "Paul", :age 27 }]] + (dotimes [n 44] + (is (monger.result/ok? (mgcol/insert-batch monger.core/*mongodb-database* "people" docs WriteConcern/NORMAL)))) + (is (= 88 (mgcol/count collection))))) diff --git a/test/monger/test/regular_finders.clj b/test/monger/test/regular_finders.clj new file mode 100644 index 0000000..9c97116 --- /dev/null +++ b/test/monger/test/regular_finders.clj @@ -0,0 +1,231 @@ +(set! *warn-on-reflection* true) + +(ns monger.test.regular-finders + (:import [com.mongodb WriteResult WriteConcern DBCursor DBObject] + [org.bson.types ObjectId] + [java.util Date]) + (:require [monger core util] + [monger.collection :as mgcol] + [monger.result :as mgres] + [monger.conversion :as mgcnv] + [monger.test.helper :as helper]) + (:use [clojure.test] + [monger.operators] + [monger.test.fixtures])) + +(helper/connect!) + +(use-fixtures :each purge-people purge-docs purge-things purge-libraries) + + +;; +;; find-one +;; + +(deftest find-one-full-document-when-collection-is-empty + (let [collection "docs"] + (is (nil? (mgcol/find-one collection {}))))) + +(deftest find-one-full-document-as-map-when-collection-is-empty + (let [collection "docs"] + (is (nil? (mgcol/find-one-as-map collection {}))))) + + +(deftest find-one-full-document-when-collection-has-matches + (let [collection "docs" + doc-id (monger.util/random-uuid) + doc { :data-store "MongoDB", :language "Clojure", :_id doc-id } + _ (mgcol/insert collection doc) + found-one (mgcol/find-one collection { :language "Clojure" })] + (is (= (:_id doc) (monger.util/get-id found-one))) + (is (= (mgcnv/from-db-object found-one true) doc)) + (is (= (mgcnv/to-db-object doc) found-one)))) + +(deftest find-one-full-document-as-map-when-collection-has-matches + (let [collection "docs" + doc-id (monger.util/random-uuid) + doc { :data-store "MongoDB", :language "Clojure", :_id doc-id }] + (mgcol/insert collection doc) + (is (= doc (mgcol/find-one-as-map collection { :language "Clojure" }))))) + + + +(deftest find-one-partial-document-when-collection-has-matches + (let [collection "docs" + doc-id (monger.util/random-uuid) + doc { :data-store "MongoDB", :language "Clojure", :_id doc-id } + fields [:language] + _ (mgcol/insert collection doc) + loaded (mgcol/find-one collection { :language "Clojure" } fields)] + (is (nil? (.get ^DBObject loaded "data-store"))) + (is (= doc-id (monger.util/get-id loaded))) + (is (= "Clojure" (.get ^DBObject loaded "language"))))) + + +(deftest find-one-partial-document-as-map-when-collection-has-matches + (let [collection "docs" + doc-id (monger.util/random-uuid) + doc { :data-store "MongoDB", :language "Clojure", :_id doc-id } + fields [:data-store]] + (mgcol/insert collection doc) + (is (= { :data-store "MongoDB", :_id doc-id } (mgcol/find-one-as-map collection { :language "Clojure" } fields true))))) + + + +;; +;; find-by-id +;; + +(deftest find-full-document-by-string-id-when-that-document-does-not-exist + (let [collection "libraries" + doc-id (monger.util/random-uuid)] + (is (nil? (mgcol/find-by-id collection doc-id))))) + +(deftest find-full-document-by-object-id-when-that-document-does-not-exist + (let [collection "libraries" + doc-id (ObjectId.)] + (is (nil? (mgcol/find-by-id collection doc-id))))) + +(deftest find-full-document-by-id-as-map-when-that-document-does-not-exist + (let [collection "libraries" + doc-id (monger.util/random-uuid)] + (is (nil? (mgcol/find-map-by-id collection doc-id))))) + + +(deftest find-full-document-by-string-id-when-document-does-exist + (let [collection "libraries" + doc-id (monger.util/random-uuid) + doc { :data-store "MongoDB", :language "Clojure", :_id doc-id }] + (mgcol/insert collection doc) + (is (= (doc (mgcol/find-by-id collection doc-id)))))) + +(deftest find-full-document-by-object-id-when-document-does-exist + (let [collection "libraries" + doc-id (ObjectId.) + doc { :data-store "MongoDB", :language "Clojure", :_id doc-id }] + (mgcol/insert collection doc) + (is (= (doc (mgcol/find-by-id collection doc-id)))))) + +(deftest find-full-document-map-by-string-id-when-document-does-exist + (let [collection "libraries" + doc-id (monger.util/random-uuid) + doc { :data-store "MongoDB", :language "Clojure", :_id doc-id }] + (mgcol/insert collection doc) + (is (= (doc (mgcol/find-map-by-id collection doc-id)))))) + +(deftest find-full-document-map-by-object-id-when-document-does-exist + (let [collection "libraries" + doc-id (ObjectId.) + doc { :data-store "MongoDB", :language "Clojure", :_id doc-id }] + (mgcol/insert collection doc) + (is (= (doc (mgcol/find-map-by-id collection doc-id)))))) + +(deftest find-partial-document-by-id-when-document-does-exist + (let [collection "libraries" + doc-id (monger.util/random-uuid) + doc { :data-store "MongoDB", :language "Clojure", :_id doc-id }] + (mgcol/insert collection doc) + (is (= ({ :language "Clojure" } (mgcol/find-by-id collection doc-id [ :language ])))))) + + +(deftest find-partial-document-as-map-by-id-when-document-does-exist + (let [collection "libraries" + doc-id (monger.util/random-uuid) + doc { :data-store "MongoDB", :language "Clojure", :_id doc-id }] + (mgcol/insert collection doc) + (is (= ({ :language "Clojure" } (mgcol/find-map-by-id collection doc-id [ :language ])))))) + + +;; +;; find +;; + +(deftest find-full-document-when-collection-is-empty + (let [collection "docs" + cursor (mgcol/find collection)] + (is (empty? (iterator-seq cursor))))) + +(deftest find-document-seq-when-collection-is-empty + (let [collection "docs"] + (is (empty? (mgcol/find-seq collection))))) + +(deftest find-multiple-documents-when-collection-is-empty + (let [collection "libraries"] + (is (empty? (mgcol/find collection { :language "Scala" }))))) + +(deftest find-multiple-maps-when-collection-is-empty + (let [collection "libraries"] + (is (empty? (mgcol/find-maps collection { :language "Scala" }))))) + +(deftest find-multiple-documents-by-regex + (let [collection "libraries"] + (mgcol/insert-batch collection [{ :language "Clojure", :name "monger" } + { :language "Java", :name "nhibernate" } + { :language "JavaScript", :name "sprout-core" }]) + (is (= 2 (monger.core/count (mgcol/find collection { :language #"Java*" })))))) + +(deftest find-multiple-documents + (let [collection "libraries"] + (mgcol/insert-batch collection [{ :language "Clojure", :name "monger" } + { :language "Clojure", :name "langohr" } + { :language "Clojure", :name "incanter" } + { :language "Scala", :name "akka" }]) + (is (= 1 (monger.core/count (mgcol/find collection { :language "Scala" })))) + (is (= 3 (.count (mgcol/find collection { :language "Clojure" })))) + (is (empty? (mgcol/find collection { :language "Java" }))))) + + +(deftest find-document-specify-fields + (let [collection "libraries" + _ (mgcol/insert collection { :language "Clojure", :name "monger" }) + result (mgcol/find collection { :language "Clojure"} [:language])] + (is (= (seq [:_id :language]) (keys (mgcnv/from-db-object (.next result) true)))))) + +(deftest find-and-iterate-over-multiple-documents-the-hard-way + (let [collection "libraries"] + (mgcol/insert-batch collection [{ :language "Clojure", :name "monger" } + { :language "Clojure", :name "langohr" } + { :language "Clojure", :name "incanter" } + { :language "Scala", :name "akka" }]) + (doseq [doc (take 3 (map (fn [dbo] + (mgcnv/from-db-object dbo true)) + (mgcol/find-seq collection { :language "Clojure" })))] + (is (= "Clojure" (:language doc)))))) + +(deftest find-and-iterate-over-multiple-documents + (let [collection "libraries"] + (mgcol/insert-batch collection [{ :language "Clojure", :name "monger" } + { :language "Clojure", :name "langohr" } + { :language "Clojure", :name "incanter" } + { :language "Scala", :name "akka" }]) + (doseq [doc (take 3 (mgcol/find-maps collection { :language "Clojure" }))] + (is (= "Clojure" (:language doc)))))) + + +(deftest find-multiple-maps + (let [collection "libraries"] + (mgcol/insert-batch collection [{ :language "Clojure", :name "monger" } + { :language "Clojure", :name "langohr" } + { :language "Clojure", :name "incanter" } + { :language "Scala", :name "akka" }]) + (is (= 1 (clojure.core/count (mgcol/find-maps collection { :language "Scala" })))) + (is (= 3 (.count (mgcol/find-maps collection { :language "Clojure" })))) + (is (empty? (mgcol/find-maps collection { :language "Java" }))) + (is (empty? (mgcol/find-maps monger.core/*mongodb-database* collection { :language "Java" } [:language :name]))))) + + + +(deftest find-multiple-partial-documents + (let [collection "libraries"] + (mgcol/insert-batch collection [{ :language "Clojure", :name "monger" } + { :language "Clojure", :name "langohr" } + { :language "Clojure", :name "incanter" } + { :language "Scala", :name "akka" }]) + (let [scala-libs (mgcol/find collection { :language "Scala" } [:name]) + clojure-libs (mgcol/find collection { :language "Clojure"} [:language])] + (is (= 1 (.count scala-libs))) + (is (= 3 (.count clojure-libs))) + (doseq [i clojure-libs] + (let [doc (mgcnv/from-db-object i true)] + (is (= (:language doc) "Clojure")))) + (is (empty? (mgcol/find collection { :language "Erlang" } [:name])))))) diff --git a/test/monger/test/updating.clj b/test/monger/test/updating.clj new file mode 100644 index 0000000..7c0084e --- /dev/null +++ b/test/monger/test/updating.clj @@ -0,0 +1,101 @@ +(set! *warn-on-reflection* true) + +(ns monger.test.updating + (:import [com.mongodb WriteResult WriteConcern DBCursor DBObject] + [org.bson.types ObjectId] + [java.util Date]) + (:require [monger core util] + [monger.collection :as mgcol] + [monger.result :as mgres] + [monger.conversion :as mgcnv] + [monger.test.helper :as helper]) + (:use [clojure.test] + [monger.operators] + [monger.test.fixtures])) + +(helper/connect!) + +(use-fixtures :each purge-people purge-docs purge-things purge-libraries) + + +;; +;; update, save +;; + +(deftest update-document-by-id-without-upsert + (let [collection "libraries" + doc-id (monger.util/random-uuid) + date (Date.) + doc { :created-at date, :data-store "MongoDB", :language "Clojure", :_id doc-id } + modified-doc { :created-at date, :data-store "MongoDB", :language "Erlang", :_id doc-id }] + (mgcol/insert collection doc) + (is (= (doc (mgcol/find-by-id collection doc-id)))) + (mgcol/update collection { :_id doc-id } { :language "Erlang" }) + (is (= (modified-doc (mgcol/find-by-id collection doc-id)))))) + + +(deftest update-multiple-documents + (let [collection "libraries"] + (mgcol/insert collection { :language "Clojure", :name "monger" }) + (mgcol/insert collection { :language "Clojure", :name "langohr" }) + (mgcol/insert collection { :language "Clojure", :name "incanter" }) + (mgcol/insert collection { :language "Scala", :name "akka" }) + (is (= 3 (mgcol/count collection { :language "Clojure" }))) + (is (= 1 (mgcol/count collection { :language "Scala" }))) + (is (= 0 (mgcol/count collection { :language "Python" }))) + (mgcol/update collection { :language "Clojure" } { $set { :language "Python" } } :multi true) + (is (= 0 (mgcol/count collection { :language "Clojure" }))) + (is (= 1 (mgcol/count collection { :language "Scala" }))) + (is (= 3 (mgcol/count collection { :language "Python" }))))) + + +(deftest save-a-new-document + (let [collection "people" + document { :name "Joe", :age 30 }] + (is (monger.result/ok? (mgcol/save "people" document))) + (is (= 1 (mgcol/count collection))))) + + +(deftest save-a-new-basic-db-object + (let [collection "people" + doc (mgcnv/to-db-object { :name "Joe", :age 30 })] + (is (nil? (monger.util/get-id doc))) + (mgcol/save monger.core/*mongodb-database* "people" doc WriteConcern/SAFE) + (is (not (nil? (monger.util/get-id doc)))))) + + + +(deftest update-an-existing-document-using-save + (let [collection "people" + doc-id "people-1" + document { :_id doc-id, :name "Joe", :age 30 }] + (is (monger.result/ok? (mgcol/insert "people" document))) + (is (= 1 (mgcol/count collection))) + (mgcol/save collection { :_id doc-id, :name "Alan", :age 40 }) + (is (= 1 (mgcol/count collection { :name "Alan", :age 40 }))))) + + +(deftest set-an-attribute-on-existing-document-using-update + (let [collection "people" + doc-id (monger.util/object-id) + document { :_id doc-id, :name "Joe", :age 30 }] + (is (monger.result/ok? (mgcol/insert "people" document))) + (is (= 1 (mgcol/count collection))) + (is (= 0 (mgcol/count collection { :has_kids true }))) + (mgcol/update collection { :_id doc-id } { $set { :has_kids true } }) + (is (= 1 (mgcol/count collection { :has_kids true }))))) + + + +(deftest upsert-a-document + (let [collection "libraries" + doc-id (monger.util/random-uuid) + date (Date.) + doc { :created-at date, :data-store "MongoDB", :language "Clojure", :_id doc-id } + modified-doc { :created-at date, :data-store "MongoDB", :language "Erlang", :_id doc-id }] + (is (not (monger.result/updated-existing? (mgcol/update collection { :language "Clojure" } doc :upsert true)))) + (is (= 1 (mgcol/count collection))) + (is (monger.result/updated-existing? (mgcol/update collection { :language "Clojure" } modified-doc :multi false :upsert true))) + (is (= 1 (mgcol/count collection))) + (is (= (modified-doc (mgcol/find-by-id collection doc-id)))) + (mgcol/remove collection)))