@@ -149,3 +149,72 @@ pub fn format_datetime(dt: &NaiveDateTime) -> String {
149
149
pub fn format_date ( date : & NaiveDate ) -> String {
150
150
format ! ( "{}" , date. format( "%Y-%m-%d" ) )
151
151
}
152
+
153
+ #[ cfg( test) ]
154
+ mod tests {
155
+ use super :: * ;
156
+ use chrono:: { Local , NaiveDate } ;
157
+
158
+ #[ test]
159
+ fn test_parse_today ( ) {
160
+ let result = parse_datetime ( "today" ) . unwrap ( ) ;
161
+ let now = Local :: now ( ) . date_naive ( ) ;
162
+ let start = now. and_hms_opt ( 0 , 0 , 0 ) . unwrap ( ) ;
163
+ let finish = now. and_hms_opt ( 23 , 59 , 59 ) . unwrap ( ) ;
164
+
165
+ assert_eq ! ( result. 0 , start) ;
166
+ assert_eq ! ( result. 1 , finish) ;
167
+ }
168
+
169
+ #[ test]
170
+ fn test_parse_yesterday ( ) {
171
+ let result = parse_datetime ( "yesterday" ) . unwrap ( ) ;
172
+ let yesterday = Local :: now ( ) . date_naive ( ) - chrono:: Duration :: days ( 1 ) ;
173
+ let start = yesterday. and_hms_opt ( 0 , 0 , 0 ) . unwrap ( ) ;
174
+ let finish = yesterday. and_hms_opt ( 23 , 59 , 59 ) . unwrap ( ) ;
175
+
176
+ assert_eq ! ( result. 0 , start) ;
177
+ assert_eq ! ( result. 1 , finish) ;
178
+ }
179
+
180
+ #[ test]
181
+ fn test_parse_specific_date ( ) {
182
+ let result = parse_datetime ( "2023-12-11" ) . unwrap ( ) ;
183
+ let date = NaiveDate :: from_ymd_opt ( 2023 , 12 , 11 ) . unwrap ( ) ;
184
+ let start = date. and_hms_opt ( 0 , 0 , 0 ) . unwrap ( ) ;
185
+ let finish = date. and_hms_opt ( 23 , 59 , 59 ) . unwrap ( ) ;
186
+
187
+ assert_eq ! ( result. 0 , start) ;
188
+ assert_eq ! ( result. 1 , finish) ;
189
+ }
190
+
191
+ #[ test]
192
+ fn test_parse_specific_datetime ( ) {
193
+ let result = parse_datetime ( "2023-12-11 14:30:45" ) . unwrap ( ) ;
194
+ let date = NaiveDate :: from_ymd_opt ( 2023 , 12 , 11 ) . unwrap ( ) ;
195
+ let start = date. and_hms_opt ( 14 , 30 , 45 ) . unwrap ( ) ;
196
+ let finish = start;
197
+
198
+ assert_eq ! ( result. 0 , start) ;
199
+ assert_eq ! ( result. 1 , finish) ;
200
+ }
201
+
202
+ #[ test]
203
+ fn test_invalid_format ( ) {
204
+ let result = parse_datetime ( "invalid-date" ) ;
205
+
206
+ assert ! ( result. is_err( ) ) ;
207
+ assert_eq ! ( result. unwrap_err( ) , "Error parsing date/time value: invalid-date" ) ;
208
+ }
209
+
210
+ #[ test]
211
+ fn test_partial_date_parsing ( ) {
212
+ let result = parse_datetime ( "2023-12-11 14:30" ) . unwrap ( ) ;
213
+ let date = NaiveDate :: from_ymd_opt ( 2023 , 12 , 11 ) . unwrap ( ) ;
214
+ let start = date. and_hms_opt ( 14 , 30 , 0 ) . unwrap ( ) ;
215
+ let finish = date. and_hms_opt ( 14 , 30 , 59 ) . unwrap ( ) ;
216
+
217
+ assert_eq ! ( result. 0 , start) ;
218
+ assert_eq ! ( result. 1 , finish) ;
219
+ }
220
+ }
0 commit comments