From 679fd2bf9255a26de661be0343cdcb8ee583fc0d Mon Sep 17 00:00:00 2001 From: Timo Sulg Date: Tue, 10 Sep 2013 17:54:37 +0200 Subject: [PATCH 1/3] Added support for LocalDate - required for serializing (clj-time/today). --- src/clojure/monger/joda_time.clj | 7 ++++ test/monger/test/clj_time_local_date_test.clj | 32 +++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 test/monger/test/clj_time_local_date_test.clj diff --git a/src/clojure/monger/joda_time.clj b/src/clojure/monger/joda_time.clj index b957349..66ef7ac 100644 --- a/src/clojure/monger/joda_time.clj +++ b/src/clojure/monger/joda_time.clj @@ -26,6 +26,9 @@ (extend-protocol ConvertToDBObject org.joda.time.base.AbstractInstant (to-db-object [^AbstractInstant input] + (to-db-object (.toDate input))) + org.joda.time.base.AbstractPartial + (to-db-object [^AbstractPartial input] (to-db-object (.toDate input)))) (extend-protocol ConvertFromDBObject @@ -56,6 +59,10 @@ (print-dup (.toDate d) out)) +(defmethod print-dup org.joda.time.base.AbstractPartial + [^org.joda.time.base.AbstractPartial d out] + (print-dup (.toDate d) out)) + ;; ;; JSON serialization ;; diff --git a/test/monger/test/clj_time_local_date_test.clj b/test/monger/test/clj_time_local_date_test.clj new file mode 100644 index 0000000..cfa77bc --- /dev/null +++ b/test/monger/test/clj_time_local_date_test.clj @@ -0,0 +1,32 @@ +;; requires profile dev2 for clj-time +(set! *warn-on-reflection* true) + +(ns monger.test.clj-time-local-date-test + (:import java.util.Date) + (:require [monger core joda-time] + [clojure stacktrace] + [monger.collection :as mgcol] + [clj-time.core :as dt] + [clj-time.coerce :as dt-coerce] + [monger.test.helper :as helper]) + (:use [clojure.test] + [monger.operators] + [monger.test.fixtures])) + +(monger.core/connect!) +(monger.core/set-db! (monger.core/get-db "monger-test")) + +(use-fixtures :each purge-people purge-docs purge-things purge-libraries) + +(deftest find-with-local-date + (let [collection "libraries"] + (mgcol/insert-batch collection [{:language "Clojure" :name "aleph" :created_at (dt/now)} + {:language "R" + :name "bayes" + :created_at (dt-coerce/to-date-time (dt/plus (dt/today) (dt/days 1)))}]) + (are [n the-criteria] + (= n (.count (mgcol/find collection the-criteria))) + 2 {:created_at {$gt (dt/today)}} + 1 {:created_at {"$gte" (dt/today) "$lt" (dt/plus (dt/today) (dt/days 1))}} + 1 {:created_at {"$gte" (dt/plus (dt/today) (dt/days 1))}}))) + From 7b3869ec04fb2eec623bcfccf202dff009f7ba02 Mon Sep 17 00:00:00 2001 From: Timo Sulg Date: Wed, 11 Sep 2013 14:51:35 +0200 Subject: [PATCH 2/3] Moved localdate tests into lib_integration_test. --- test/monger/test/clj_time_local_date_test.clj | 32 ------------------- test/monger/test/lib_integration_test.clj | 12 +++++-- 2 files changed, 10 insertions(+), 34 deletions(-) delete mode 100644 test/monger/test/clj_time_local_date_test.clj diff --git a/test/monger/test/clj_time_local_date_test.clj b/test/monger/test/clj_time_local_date_test.clj deleted file mode 100644 index cfa77bc..0000000 --- a/test/monger/test/clj_time_local_date_test.clj +++ /dev/null @@ -1,32 +0,0 @@ -;; requires profile dev2 for clj-time -(set! *warn-on-reflection* true) - -(ns monger.test.clj-time-local-date-test - (:import java.util.Date) - (:require [monger core joda-time] - [clojure stacktrace] - [monger.collection :as mgcol] - [clj-time.core :as dt] - [clj-time.coerce :as dt-coerce] - [monger.test.helper :as helper]) - (:use [clojure.test] - [monger.operators] - [monger.test.fixtures])) - -(monger.core/connect!) -(monger.core/set-db! (monger.core/get-db "monger-test")) - -(use-fixtures :each purge-people purge-docs purge-things purge-libraries) - -(deftest find-with-local-date - (let [collection "libraries"] - (mgcol/insert-batch collection [{:language "Clojure" :name "aleph" :created_at (dt/now)} - {:language "R" - :name "bayes" - :created_at (dt-coerce/to-date-time (dt/plus (dt/today) (dt/days 1)))}]) - (are [n the-criteria] - (= n (.count (mgcol/find collection the-criteria))) - 2 {:created_at {$gt (dt/today)}} - 1 {:created_at {"$gte" (dt/today) "$lt" (dt/plus (dt/today) (dt/days 1))}} - 1 {:created_at {"$gte" (dt/plus (dt/today) (dt/days 1))}}))) - diff --git a/test/monger/test/lib_integration_test.clj b/test/monger/test/lib_integration_test.clj index 6777383..ad78a6b 100644 --- a/test/monger/test/lib_integration_test.clj +++ b/test/monger/test/lib_integration_test.clj @@ -1,7 +1,7 @@ (ns monger.test.lib-integration-test (:use clojure.test monger.conversion) - (:import [org.joda.time DateTime DateMidnight] + (:import [org.joda.time DateTime DateMidnight LocalDate] org.bson.types.ObjectId com.mongodb.DBObject) (:require monger.json @@ -31,6 +31,10 @@ (is (instance? java.util.Date d)) (is (= 1318464000000 (.getTime ^java.util.Date d))))) +(deftest ^{:integration true} conversion-of-joda-localdate-to-db-object + (let [d (to-db-object (LocalDate. 2011 10 13))] + (is (instance? java.util.Date d)) + (is (= 1318456800000 (.getTime ^java.util.Date d))))) (deftest ^{:integration true} conversion-of-java-util-date-to-joda-datetime (let [input (.toDate ^DateTime (t/date-time 2011 10 13 23 55 0)) @@ -38,8 +42,12 @@ (is (instance? org.joda.time.DateTime output)) (is (= input (.toDate ^DateTime output))))) - (deftest ^{:integration true} test-reader-extensions (let [^DateTime d (t/date-time 2011 10 13 23 55 0)] (binding [*print-dup* true] (pr-str d)))) + +(deftest ^{:integration true} test-reader-extensions-for-localdate + (let [^DateTime d (t/today)] + (binding [*print-dup* true] + (pr-str d)))) \ No newline at end of file From b57c97a962b655f49e5b371d4d093dc4d1d46b1b Mon Sep 17 00:00:00 2001 From: Timo Sulg Date: Wed, 11 Sep 2013 16:29:59 +0200 Subject: [PATCH 3/3] fixed tests for LocalDate - now tests components of date separately. --- test/monger/test/lib_integration_test.clj | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/monger/test/lib_integration_test.clj b/test/monger/test/lib_integration_test.clj index ad78a6b..b13f221 100644 --- a/test/monger/test/lib_integration_test.clj +++ b/test/monger/test/lib_integration_test.clj @@ -34,7 +34,9 @@ (deftest ^{:integration true} conversion-of-joda-localdate-to-db-object (let [d (to-db-object (LocalDate. 2011 10 13))] (is (instance? java.util.Date d)) - (is (= 1318456800000 (.getTime ^java.util.Date d))))) + (is (= 111 (.getYear ^java.util.Date d))) ;; how many years since 1900 + (is (= 9 (.getMonth ^java.util.Date d))) ;; java.util.Date counts from 0 + (is (= 13 (.getDate ^java.util.Date d))))) (deftest ^{:integration true} conversion-of-java-util-date-to-joda-datetime (let [input (.toDate ^DateTime (t/date-time 2011 10 13 23 55 0))