From b0cd0bf6710cb00f518a68c1b47c56449ae23af2 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Sat, 10 May 2014 16:28:02 -0400 Subject: [PATCH] Aggregation framework tests now pass --- .../test/aggregation_framework_test.clj | 158 +++++++++--------- 1 file changed, 79 insertions(+), 79 deletions(-) diff --git a/test/monger/test/aggregation_framework_test.clj b/test/monger/test/aggregation_framework_test.clj index e3d2aba..74a364f 100644 --- a/test/monger/test/aggregation_framework_test.clj +++ b/test/monger/test/aggregation_framework_test.clj @@ -1,88 +1,88 @@ (ns monger.test.aggregation-framework-test - (:require monger.core [monger.collection :as mc] - [monger.test.helper :as helper] + (:require [monger.core :as mg] + [monger.collection :as mc] [clojure.test :refer :all] - [monger.operators :refer :all] - [monger.test.fixtures :refer :all])) + [monger.operators :refer :all])) + +(let [conn (mg/connect) + db (mg/get-db conn "monger-test") + coll "docs"] + (defn purge-collections + [f] + (mc/purge-many db [coll]) + (f) + (mc/purge-many db [coll])) + + (use-fixtures :each purge-collections) + + (deftest test-basic-single-stage-$project-aggregation + (let [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 }] + expected #{{:quantity 1 :state "CA"} + {:quantity 2 :state "NY"} + {:quantity 1 :state "NY"} + {:quantity 2 :state "IL"} + {:quantity 2 :state "CA"} + {:quantity 3 :state "IL"}}] + (mc/insert-batch db coll batch) + (is (= 6 (mc/count db coll))) + (let [result (set (map #(select-keys % [:state :quantity]) + (mc/aggregate db coll [{$project {:state 1 :quantity 1}}])))] + (is (= expected result))))) -(helper/connect!) - -(use-fixtures :each purge-docs) - -(deftest test-basic-single-stage-$project-aggregation - (let [collection "docs" - 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 }] - expected #{{:quantity 1 :state "CA"} - {:quantity 2 :state "NY"} - {:quantity 1 :state "NY"} - {:quantity 2 :state "IL"} - {:quantity 2 :state "CA"} - {:quantity 3 :state "IL"}}] - (mc/insert-batch collection batch) - (is (= 6 (mc/count collection))) - (let [result (set (map #(select-keys % [:state :quantity]) - (mc/aggregate "docs" [{$project {:state 1 :quantity 1}}])))] - (is (= expected result))))) + (deftest test-basic-projection-with-multiplication + (let [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 }] + expected #{{:_id "NY" :subtotal 398.0} + {:_id "NY" :subtotal 299.0} + {:_id "IL" :subtotal 23.0} + {:_id "CA" :subtotal 5.9} + {:_id "IL" :subtotal 16.5} + {:_id "CA" :subtotal 199.0}}] + (mc/insert-batch db coll batch) + (let [result (set (mc/aggregate db coll [{$project {:subtotal {$multiply ["$quantity", "$price"]} + :_id "$state"}}]))] + (is (= expected result))))) -(deftest test-basic-projection-with-multiplication - (let [collection "docs" - 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 }] - expected #{{:_id "NY" :subtotal 398.0} - {:_id "NY" :subtotal 299.0} - {:_id "IL" :subtotal 23.0} - {:_id "CA" :subtotal 5.9} - {:_id "IL" :subtotal 16.5} - {:_id "CA" :subtotal 199.0}}] - (mc/insert-batch collection batch) - (let [result (set (mc/aggregate "docs" [{$project {:subtotal {$multiply ["$quantity", "$price"]} - :_id "$state"}}]))] - (is (= expected result))))) + (deftest test-basic-total-aggregation + (let [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 }] + expected #{{:_id "CA" :total 204.9} {:_id "IL" :total 39.5} {:_id "NY" :total 697.0}}] + (mc/insert-batch db coll batch) + (let [result (set (mc/aggregate db coll [{$project {:subtotal {$multiply ["$quantity", "$price"]} + :_id 1 + :state 1}} + {$group {:_id "$state" + :total {$sum "$subtotal"}}}]))] + (is (= expected result))))) -(deftest test-basic-total-aggregation - (let [collection "docs" - 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 }] - expected #{{:_id "CA" :total 204.9} {:_id "IL" :total 39.5} {:_id "NY" :total 697.0}}] - (mc/insert-batch collection batch) - (let [result (set (mc/aggregate "docs" [{$project {:subtotal {$multiply ["$quantity", "$price"]} - :_id 1 - :state 1}} - {$group {:_id "$state" - :total {$sum "$subtotal"}}}]))] - (is (= expected result))))) + (deftest test-$first-aggregation-operator + (let [batch [{ :state "CA" } + { :state "IL"}] + expected "CA"] + (mc/insert-batch db coll batch) + (let [result (:state (first (mc/aggregate db coll [{$group { :_id 1 :state {$first "$state"} }}])))] + (is (= expected result))))) - -(deftest test-$first-aggregation-operator - (let [collection "docs" - batch [{ :state "CA" } - { :state "IL"}] - expected "CA"] - (mc/insert-batch collection batch) - (let [result (:state (first (mc/aggregate collection [{$group { :_id 1 :state {$first "$state"} }}])))] - (is (= expected result))))) - -(deftest test-$last-aggregation-operator - (let [collection "docs" - batch [{ :state "CA" } - { :state "IL"}] - expected "IL"] - (mc/insert-batch collection batch) - (let [result (:state (first (mc/aggregate collection [{$group { :_id 1 :state {$last "$state"} }}])))] - (is (= expected result))))) + (deftest test-$last-aggregation-operator + (let [batch [{ :state "CA" } + { :state "IL"}] + expected "IL"] + (mc/insert-batch db coll batch) + (let [result (:state (first (mc/aggregate db coll [{$group { :_id 1 :state {$last "$state"} }}])))] + (is (= expected result))))))