1// Copyright (C) MongoDB, Inc. 2014-present. 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); you may 4// not use this file except in compliance with the License. You may obtain 5// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 6 7package json 8 9import ( 10 "fmt" 11 . "github.com/smartystreets/goconvey/convey" 12 "testing" 13) 14 15func TestISODateValue(t *testing.T) { 16 17 Convey("When unmarshalling JSON with ISODate values", t, func() { 18 19 Convey("works for a single key", func() { 20 var jsonMap map[string]interface{} 21 22 key := "key" 23 value := "ISODate(\"2006-01-02T15:04-0700\")" 24 data := fmt.Sprintf(`{"%v":%v}`, key, value) 25 26 err := Unmarshal([]byte(data), &jsonMap) 27 So(err, ShouldBeNil) 28 29 jsonValue, ok := jsonMap[key].(ISODate) 30 So(ok, ShouldBeTrue) 31 So(jsonValue, ShouldEqual, ISODate("2006-01-02T15:04-0700")) 32 }) 33 34 Convey("works for multiple keys", func() { 35 var jsonMap map[string]interface{} 36 37 key1, key2, key3 := "key1", "key2", "key3" 38 value1, value2, value3 := "ISODate(\"2006-01-02T15:04Z0700\")", "ISODate(\"2013-01-02T15:04Z0700\")", "ISODate(\"2014-02-02T15:04Z0700\")" 39 data := fmt.Sprintf(`{"%v":%v,"%v":%v,"%v":%v}`, 40 key1, value1, key2, value2, key3, value3) 41 42 err := Unmarshal([]byte(data), &jsonMap) 43 So(err, ShouldBeNil) 44 45 jsonValue1, ok := jsonMap[key1].(ISODate) 46 So(ok, ShouldBeTrue) 47 So(jsonValue1, ShouldEqual, ISODate("2006-01-02T15:04Z0700")) 48 49 jsonValue2, ok := jsonMap[key2].(ISODate) 50 So(ok, ShouldBeTrue) 51 So(jsonValue2, ShouldEqual, ISODate("2013-01-02T15:04Z0700")) 52 53 jsonValue3, ok := jsonMap[key3].(ISODate) 54 So(ok, ShouldBeTrue) 55 So(jsonValue3, ShouldEqual, ISODate("2014-02-02T15:04Z0700")) 56 }) 57 58 Convey("works in an array", func() { 59 var jsonMap map[string]interface{} 60 61 key := "key" 62 value := "ISODate(\"2006-01-02T15:04-0700\")" 63 data := fmt.Sprintf(`{"%v":[%v,%v,%v]}`, 64 key, value, value, value) 65 66 err := Unmarshal([]byte(data), &jsonMap) 67 So(err, ShouldBeNil) 68 69 jsonArray, ok := jsonMap[key].([]interface{}) 70 So(ok, ShouldBeTrue) 71 72 for _, _jsonValue := range jsonArray { 73 jsonValue, ok := _jsonValue.(ISODate) 74 So(ok, ShouldBeTrue) 75 So(jsonValue, ShouldEqual, ISODate("2006-01-02T15:04-0700")) 76 } 77 }) 78 79 Convey("will take valid format 2006-01-02T15:04:05.000-0700", func() { 80 var jsonMap map[string]interface{} 81 82 key := "key" 83 value := "ISODate(\"2006-01-02T15:04:05.000-0700\")" 84 data := fmt.Sprintf(`{"%v":%v}`, key, value) 85 86 err := Unmarshal([]byte(data), &jsonMap) 87 So(err, ShouldBeNil) 88 89 jsonValue, ok := jsonMap[key].(ISODate) 90 So(ok, ShouldBeTrue) 91 So(jsonValue, ShouldEqual, ISODate("2006-01-02T15:04:05.000-0700")) 92 }) 93 94 95 Convey("will take valid format 2006-01-02T15:04:05", func() { 96 var jsonMap map[string]interface{} 97 98 key := "key" 99 value := "ISODate(\"2014-01-02T15:04:05Z\")" 100 data := fmt.Sprintf(`{"%v":%v}`, key, value) 101 102 err := Unmarshal([]byte(data), &jsonMap) 103 So(err, ShouldBeNil) 104 105 jsonValue, ok := jsonMap[key].(ISODate) 106 So(ok, ShouldBeTrue) 107 So(jsonValue, ShouldEqual, ISODate("2014-01-02T15:04:05Z")) 108 }) 109 110 111 Convey("will take valid format 2006-01-02T15:04-0700", func() { 112 var jsonMap map[string]interface{} 113 114 key := "key" 115 value := "ISODate(\"2006-01-02T15:04-0700\")" 116 data := fmt.Sprintf(`{"%v":%v}`, key, value) 117 118 err := Unmarshal([]byte(data), &jsonMap) 119 So(err, ShouldBeNil) 120 121 jsonValue, ok := jsonMap[key].(ISODate) 122 So(ok, ShouldBeTrue) 123 So(jsonValue, ShouldEqual, ISODate("2006-01-02T15:04-0700")) 124 }) 125 126 127 128 }) 129} 130 131