diff --git a/test/monger/test/collection_test.clj b/test/monger/test/collection_test.clj index 9e99010..eb41e3a 100644 --- a/test/monger/test/collection_test.clj +++ b/test/monger/test/collection_test.clj @@ -1,151 +1,157 @@ (ns monger.test.collection-test - (:import [com.mongodb WriteResult WriteConcern DBCursor DBObject MapReduceOutput MapReduceCommand MapReduceCommand$OutputType] - org.bson.types.ObjectId + (:import org.bson.types.ObjectId java.util.Date) (:require [monger.core :as mg] [monger.collection :as mc] - [monger.result :as mgres] - [monger.test.helper :as helper] [clojure.test :refer :all] - [monger.operators :refer :all] - [monger.test.fixtures :refer :all])) + [monger.operators :refer :all])) -(helper/connect!) +(let [conn (mg/connect) + db (mg/get-db conn "monger-test")] -(use-fixtures :each purge-people purge-docs purge-things purge-libraries) + (defn purge-collections + [f] + (mc/remove db "people") + (mc/remove db "docs") + (mc/remove db "things") + (mc/remove db "libraries") + (f) + (mc/remove db "people") + (mc/remove db "docs") + (mc/remove db "things") + (mc/remove db "libraries")) + + (use-fixtures :each purge-collections) + + ;; + ;; count, remove + ;; + + (deftest get-collection-size + (let [collection "things"] + (is (= 0 (mc/count db collection))) + (mc/insert-batch db collection [{:language "Clojure" :name "langohr"} + {:language "Clojure" :name "monger"} + {:language "Clojure" :name "incanter"} + {:language "Scala" :name "akka"}]) + (is (= 4 (mc/count db collection))) + (is (mc/any? db collection)) + (is (= 3 (mc/count db collection {:language "Clojure"}))) + (is (mc/any? db collection {:language "Clojure"})) + (is (= 1 (mc/count db collection {:language "Scala" }))) + (is (mc/any? db collection {:language "Scala"})) + (is (= 0 (mc/count db collection {:language "Python" }))) + (is (not (mc/any? db collection {:language "Python"}))))) -;; -;; count, remove -;; - -(deftest get-collection-size - (let [collection "things"] - (is (= 0 (mc/count collection))) - (mc/insert-batch collection [{:language "Clojure" :name "langohr"} - {:language "Clojure" :name "monger"} - {:language "Clojure" :name "incanter"} - {:language "Scala" :name "akka"}]) - (is (= 4 (mc/count collection))) - (is (mc/any? collection)) - (is (= 3 (mc/count mg/*mongodb-database* collection {:language "Clojure"}))) - (is (mc/any? mg/*mongodb-database* collection {:language "Clojure"})) - (is (= 1 (mc/count collection {:language "Scala" }))) - (is (mc/any? collection {:language "Scala"})) - (is (= 0 (mc/count mg/*mongodb-database* collection {:language "Python" }))) - (is (not (mc/any? mg/*mongodb-database* collection {:language "Python"}))))) + (deftest remove-all-documents-from-collection + (let [collection "libraries"] + (mc/insert-batch db collection [{:language "Clojure" :name "monger"} + {:language "Clojure" :name "langohr"} + {:language "Clojure" :name "incanter"} + {:language "Scala" :name "akka"}]) + (is (= 4 (mc/count db collection))) + (mc/remove db collection) + (is (= 0 (mc/count db collection))))) -(deftest remove-all-documents-from-collection - (let [collection "libraries"] - (mc/insert-batch collection [{:language "Clojure" :name "monger"} - {:language "Clojure" :name "langohr"} - {:language "Clojure" :name "incanter"} - {:language "Scala" :name "akka"}]) - (is (= 4 (mc/count collection))) - (mc/remove collection) - (is (= 0 (mc/count collection))))) + (deftest remove-some-documents-from-collection + (let [collection "libraries"] + (mc/insert-batch db collection [{:language "Clojure" :name "monger"} + {:language "Clojure" :name "langohr"} + {:language "Clojure" :name "incanter"} + {:language "Scala" :name "akka"}]) + (is (= 4 (mc/count db collection))) + (mc/remove db collection {:language "Clojure"}) + (is (= 1 (mc/count db collection))))) + + (deftest remove-a-single-document-from-collection + (let [collection "libraries" + oid (ObjectId.)] + (mc/insert-batch db collection [{:language "Clojure" :name "monger" :_id oid}]) + (mc/remove-by-id db collection oid) + (is (= 0 (mc/count db collection))) + (is (nil? (mc/find-by-id db collection oid))))) -(deftest remove-some-documents-from-collection - (let [collection "libraries"] - (mc/insert-batch collection [{:language "Clojure" :name "monger"} - {:language "Clojure" :name "langohr"} - {:language "Clojure" :name "incanter"} - {:language "Scala" :name "akka"}]) - (is (= 4 (mc/count collection))) - (mc/remove collection {:language "Clojure"}) - (is (= 1 (mc/count collection))))) + ;; + ;; exists?, drop, create + ;; -(deftest remove-a-single-document-from-collection - (let [collection "libraries" - oid (ObjectId.)] - (mc/insert-batch collection [{:language "Clojure" :name "monger" :_id oid}]) - (mc/remove-by-id collection oid) - (is (= 0 (mc/count collection))) - (is (nil? (mc/find-by-id collection oid))))) + (deftest checking-for-collection-existence-when-it-does-not-exist + (let [collection "widgets"] + (mc/drop db collection) + (is (false? (mc/exists? db collection))))) + + (deftest checking-for-collection-existence-when-it-does-exist + (let [collection "widgets"] + (mc/drop db collection) + (mc/insert-batch db collection [{:name "widget1"} + {:name "widget2"}]) + (is (mc/exists? db collection)) + (mc/drop db collection) + (is (false? (mc/exists? db collection))) + (mc/create db "widgets" {:capped true :size 100000 :max 10}) + (is (mc/exists? db collection)) + (mc/rename db collection "gadgets") + (is (not (mc/exists? db collection))) + (is (mc/exists? db "gadgets")) + (mc/drop db "gadgets"))) + + ;; + ;; any?, empty? + ;; + + (deftest test-any-on-empty-collection + (let [collection "things"] + (is (not (mc/any? db collection))))) + + (deftest test-any-on-non-empty-collection + (let [collection "things" + _ (mc/insert db collection {:language "Clojure" :name "langohr"})] + (is (mc/any? db "things" {:language "Clojure"})))) + + (deftest test-empty-on-empty-collection + (let [collection "things"] + (is (mc/empty? db collection)))) + + (deftest test-empty-on-non-empty-collection + (let [collection "things" + _ (mc/insert db collection {:language "Clojure" :name "langohr"})] + (is (not (mc/empty? db "things"))))) -;; -;; exists?, drop, create -;; + ;; + ;; distinct + ;; -(deftest checking-for-collection-existence-when-it-does-not-exist - (let [collection "widgets"] - (mc/drop collection) - (is (false? (mc/exists? collection))))) - -(deftest checking-for-collection-existence-when-it-does-exist - (let [collection "widgets"] - (mc/drop collection) - (mc/insert-batch collection [{:name "widget1"} - {:name "widget2"}]) - (is (mc/exists? collection)) - (mc/drop collection) - (is (false? (mc/exists? collection))) - (mc/create "widgets" {:capped true :size 100000 :max 10}) - (is (mc/exists? collection)) - (mc/rename collection "gadgets") - (is (not (mc/exists? collection))) - (is (mc/exists? "gadgets")) - (mc/drop "gadgets"))) - -;; -;; any?, empty? -;; - -(deftest test-any-on-empty-collection - (let [collection "things"] - (is (not (mc/any? collection))))) - -(deftest test-any-on-non-empty-collection - (let [collection "things" - _ (mc/insert collection {:language "Clojure" :name "langohr"})] - (is (mc/any? "things")) - (is (mc/any? mg/*mongodb-database* "things" {:language "Clojure"})))) - -(deftest test-empty-on-empty-collection - (let [collection "things"] - (is (mc/empty? collection)) - (is (mc/empty? mg/*mongodb-database* collection)))) - -(deftest test-empty-on-non-empty-collection - (let [collection "things" - _ (mc/insert collection {:language "Clojure" :name "langohr"})] - (is (not (mc/empty? "things"))))) + (deftest test-distinct-values + (let [collection "widgets" + batch [{:state "CA" :quantity 1 :price 199.00} + {:state "NY" :quantity 2 :price 199.00} + {:state "NY" :quantity 1 :price 299.00} + {:state "IL" :quantity 2 :price 11.50 } + {:state "CA" :quantity 2 :price 2.95 } + {:state "IL" :quantity 3 :price 5.50 }]] + (mc/insert-batch db collection batch) + (is (= ["CA" "IL" "NY"] (sort (mc/distinct db collection :state {})))) + (is (= ["CA" "NY"] (sort (mc/distinct db collection :state {:price {$gt 100.00}})))))) -;; -;; distinct -;; + ;; + ;; miscellenous + ;; -(deftest test-distinct-values - (let [collection "widgets" - batch [{:state "CA" :quantity 1 :price 199.00} - {:state "NY" :quantity 2 :price 199.00} - {:state "NY" :quantity 1 :price 299.00} - {:state "IL" :quantity 2 :price 11.50 } - {:state "CA" :quantity 2 :price 2.95 } - {:state "IL" :quantity 3 :price 5.50 }]] - (mc/insert-batch collection batch) - (is (= ["CA" "IL" "NY"] (sort (mc/distinct mg/*mongodb-database* collection :state {})))) - (is (= ["CA" "NY"] (sort (mc/distinct collection :state {:price {$gt 100.00}})))))) - - -;; -;; miscellenous -;; - -(deftest test-system-collection-predicate - (are [name] (is (mc/system-collection? name)) - "system.indexes" - "system" - ;; we treat default GridFS collections as system ones, - ;; possibly this is a bad idea, time will tell. MK. - "fs.chunks" - "fs.files") - (are [name] (is (not (mc/system-collection? name))) - "events" - "accounts" - "megacorp_account" - "myapp_development")) + (deftest test-system-collection-predicate + (are [name] (is (mc/system-collection? name)) + "system.indexes" + "system" + ;; we treat default GridFS collections as system ones, + ;; possibly this is a bad idea, time will tell. MK. + "fs.chunks" + "fs.files") + (are [name] (is (not (mc/system-collection? name))) + "events" + "accounts" + "megacorp_account" + "myapp_development")))