1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package strfmt
16
17 import (
18 "bytes"
19 "database/sql"
20 "database/sql/driver"
21 "encoding/gob"
22 "testing"
23 "time"
24
25 "github.com/stretchr/testify/assert"
26 "github.com/stretchr/testify/require"
27 "go.mongodb.org/mongo-driver/bson"
28 )
29
30 var _ sql.Scanner = &Date{}
31 var _ driver.Valuer = Date{}
32
33 func TestDate(t *testing.T) {
34 pp := Date{}
35 err := pp.UnmarshalText([]byte{})
36 require.NoError(t, err)
37 err = pp.UnmarshalText([]byte("yada"))
38 require.Error(t, err)
39
40 orig := "2014-12-15"
41 bj := []byte("\"" + orig + "\"")
42 err = pp.UnmarshalText([]byte(orig))
43 require.NoError(t, err)
44
45 txt, err := pp.MarshalText()
46 require.NoError(t, err)
47 assert.Equal(t, orig, string(txt))
48
49 err = pp.UnmarshalJSON(bj)
50 require.NoError(t, err)
51 assert.EqualValues(t, orig, pp.String())
52
53 err = pp.UnmarshalJSON([]byte(`"1972/01/01"`))
54 require.Error(t, err)
55
56 b, err := pp.MarshalJSON()
57 require.NoError(t, err)
58 assert.Equal(t, bj, b)
59
60 dateOriginal := Date(time.Date(2014, 10, 10, 0, 0, 0, 0, time.UTC))
61
62 bsonData, err := bson.Marshal(&dateOriginal)
63 require.NoError(t, err)
64
65 var dateCopy Date
66 err = bson.Unmarshal(bsonData, &dateCopy)
67 require.NoError(t, err)
68 assert.Equal(t, dateOriginal, dateCopy)
69
70 var dateZero Date
71 err = dateZero.UnmarshalJSON([]byte(jsonNull))
72 require.NoError(t, err)
73 assert.Equal(t, Date{}, dateZero)
74 }
75
76 func TestDate_Scan(t *testing.T) {
77 ref := time.Now().Truncate(24 * time.Hour).UTC()
78 date, str := Date(ref), ref.Format(RFC3339FullDate)
79
80 values := []interface{}{str, []byte(str), ref}
81 for _, value := range values {
82 result := Date{}
83 _ = (&result).Scan(value)
84 assert.Equal(t, date, result, "value: %#v", value)
85 }
86
87 dd := Date{}
88 err := dd.Scan(nil)
89 require.NoError(t, err)
90 assert.Equal(t, Date{}, dd)
91
92 err = dd.Scan(19700101)
93 require.Error(t, err)
94 }
95
96 func TestDate_Value(t *testing.T) {
97 ref := time.Now().Truncate(24 * time.Hour).UTC()
98 date := Date(ref)
99 dbv, err := date.Value()
100 require.NoError(t, err)
101 assert.EqualValues(t, dbv, ref.Format("2006-01-02"))
102 }
103
104 func TestDate_IsDate(t *testing.T) {
105 tests := []struct {
106 value string
107 valid bool
108 }{
109 {"2017-12-22", true},
110 {"2017-1-1", false},
111 {"17-13-22", false},
112 {"2017-02-29", false},
113 {"1900-02-29", false},
114 {"2100-02-29", false},
115 {"2000-02-29", true},
116 {"2400-02-29", true},
117 {"2017-13-22", false},
118 {"2017-12-32", false},
119 {"20171-12-32", false},
120 {"YYYY-MM-DD", false},
121 {"20-17-2017", false},
122 {"2017-12-22T01:02:03Z", false},
123 }
124 for _, test := range tests {
125 assert.Equal(t, test.valid, IsDate(test.value), "value [%s] should be valid: [%t]", test.value, test.valid)
126 }
127 }
128
129 func TestDeepCopyDate(t *testing.T) {
130 ref := time.Now().Truncate(24 * time.Hour).UTC()
131 date := Date(ref)
132 in := &date
133
134 out := new(Date)
135 in.DeepCopyInto(out)
136 assert.Equal(t, in, out)
137
138 out2 := in.DeepCopy()
139 assert.Equal(t, in, out2)
140
141 var inNil *Date
142 out3 := inNil.DeepCopy()
143 assert.Nil(t, out3)
144 }
145
146 func TestGobEncodingDate(t *testing.T) {
147 now := time.Now()
148
149 b := bytes.Buffer{}
150 enc := gob.NewEncoder(&b)
151 err := enc.Encode(Date(now))
152 require.NoError(t, err)
153 assert.NotEmpty(t, b.Bytes())
154
155 var result Date
156
157 dec := gob.NewDecoder(&b)
158 err = dec.Decode(&result)
159 require.NoError(t, err)
160 assert.Equal(t, now.Year(), time.Time(result).Year())
161 assert.Equal(t, now.Month(), time.Time(result).Month())
162 assert.Equal(t, now.Day(), time.Time(result).Day())
163 }
164
165 func TestDate_Equal(t *testing.T) {
166 t.Parallel()
167
168 d1 := Date(time.Date(2020, 10, 11, 12, 13, 14, 15, time.UTC))
169 d2 := Date(time.Date(2020, 10, 11, 12, 13, 14, 15, time.UTC))
170 d3 := Date(time.Date(2020, 11, 12, 13, 14, 15, 16, time.UTC))
171
172
173 assert.True(t, d1.Equal(d1), "Same Date should Equal itself")
174 assert.True(t, d1.Equal(d2), "Date instances should be equal")
175 assert.False(t, d1.Equal(d3), "Date instances should not be equal")
176 }
177
View as plain text