@@ -8,8 +8,9 @@ use crate::CliError;
8
8
use crate :: Exists ;
9
9
use crate :: Model ;
10
10
use crate :: Retrieve ;
11
+ use chrono:: DateTime ;
11
12
use chrono:: Duration ;
12
- use chrono:: NaiveDateTime ;
13
+ use chrono:: Utc ;
13
14
use clap:: Args ;
14
15
use clap:: Subcommand ;
15
16
use editoast_models:: DbConnection ;
@@ -62,10 +63,10 @@ pub struct SetSTDCMSearchEnvFromScenarioArgs {
62
63
pub work_schedule_group_id : Option < i64 > ,
63
64
/// If omitted, set to the earliest train start time in the timetable
64
65
#[ arg( long) ]
65
- pub search_window_begin : Option < NaiveDateTime > ,
66
+ pub search_window_begin : Option < DateTime < Utc > > ,
66
67
/// If omitted, set to the latest train start time in the timetable plus one day
67
68
#[ arg( long) ]
68
- pub search_window_end : Option < NaiveDateTime > ,
69
+ pub search_window_end : Option < DateTime < Utc > > ,
69
70
}
70
71
71
72
async fn set_stdcm_search_env_from_scenario (
@@ -126,10 +127,10 @@ pub struct SetSTDCMSearchEnvFromScratchArgs {
126
127
#[ arg( long) ]
127
128
/// If omitted, set to the earliest train start time in the timetable
128
129
#[ arg( long) ]
129
- pub search_window_begin : Option < NaiveDateTime > ,
130
+ pub search_window_begin : Option < DateTime < Utc > > ,
130
131
/// If omitted, set to the latest train start time in the timetable plus one day
131
132
#[ arg( long) ]
132
- pub search_window_end : Option < NaiveDateTime > ,
133
+ pub search_window_end : Option < DateTime < Utc > > ,
133
134
}
134
135
135
136
async fn set_stdcm_search_env_from_scratch (
@@ -178,10 +179,10 @@ async fn set_stdcm_search_env_from_scratch(
178
179
179
180
async fn resolve_search_window (
180
181
timetable_id : i64 ,
181
- search_window_begin : Option < NaiveDateTime > ,
182
- search_window_end : Option < NaiveDateTime > ,
182
+ search_window_begin : Option < DateTime < Utc > > ,
183
+ search_window_end : Option < DateTime < Utc > > ,
183
184
conn : & mut DbConnection ,
184
- ) -> Result < ( NaiveDateTime , NaiveDateTime ) , Box < dyn Error + Send + Sync > > {
185
+ ) -> Result < ( DateTime < Utc > , DateTime < Utc > ) , Box < dyn Error + Send + Sync > > {
185
186
let ( begin, end) = if let ( Some ( begin) , Some ( end) ) = ( search_window_begin, search_window_end) {
186
187
( begin, end)
187
188
} else {
@@ -193,8 +194,8 @@ async fn resolve_search_window(
193
194
return Err ( Box :: new ( CliError :: new ( 1 , error_msg) ) ) ;
194
195
} ;
195
196
196
- let begin = search_window_begin. unwrap_or ( min. naive_utc ( ) ) ;
197
- let end = search_window_end. unwrap_or ( max. naive_utc ( ) + Duration :: days ( 1 ) ) ;
197
+ let begin = search_window_begin. unwrap_or ( * min) ;
198
+ let end = search_window_end. unwrap_or ( * max + Duration :: days ( 1 ) ) ;
198
199
( begin, end)
199
200
} ;
200
201
@@ -235,22 +236,23 @@ mod tests {
235
236
} ;
236
237
237
238
use super :: * ;
238
- use chrono:: NaiveDateTime ;
239
+ use chrono:: DateTime ;
240
+ use chrono:: Utc ;
239
241
use editoast_models:: { DbConnection , DbConnectionPoolV2 } ;
240
242
use rstest:: rstest;
241
243
242
- fn make_naive_datetime ( s : & str ) -> NaiveDateTime {
243
- NaiveDateTime :: parse_from_str ( s , "%Y-%m-%d %H:%M:%S" ) . unwrap ( )
244
+ fn make_datetime ( s : & str ) -> DateTime < Utc > {
245
+ DateTime :: parse_from_rfc3339 ( s ) . unwrap ( ) . to_utc ( )
244
246
}
245
247
246
248
async fn create_train_schedules_from_start_times (
247
- start_times : Vec < NaiveDateTime > ,
249
+ start_times : Vec < DateTime < Utc > > ,
248
250
timetable_id : i64 ,
249
251
conn : & mut DbConnection ,
250
252
) {
251
253
for start_time in start_times {
252
254
simple_train_schedule_changeset ( timetable_id)
253
- . start_time ( start_time. and_utc ( ) )
255
+ . start_time ( start_time)
254
256
. create ( conn)
255
257
. await
256
258
. expect ( "Should be able to create train schedules" ) ;
@@ -261,45 +263,45 @@ mod tests {
261
263
#[ case:: both_none(
262
264
None ,
263
265
None ,
264
- make_naive_datetime ( "2000-01-01 11:59:59 " ) ,
265
- make_naive_datetime ( "2000-02-03 00:00:01 " )
266
+ make_datetime ( "2000-01-01 11:59:59Z " ) ,
267
+ make_datetime ( "2000-02-03 00:00:01Z " )
266
268
) ]
267
269
#[ case:: begin_none(
268
270
None ,
269
- Some ( make_naive_datetime ( "2000-02-01 00:00:00 " ) ) ,
270
- make_naive_datetime ( "2000-01-01 11:59:59 " ) ,
271
- make_naive_datetime ( "2000-02-01 00:00:00 " )
271
+ Some ( make_datetime ( "2000-02-01 00:00:00Z " ) ) ,
272
+ make_datetime ( "2000-01-01 11:59:59Z " ) ,
273
+ make_datetime ( "2000-02-01 00:00:00Z " )
272
274
) ]
273
275
#[ case:: end_none(
274
- Some ( make_naive_datetime ( "2000-02-01 08:00:00 " ) ) ,
276
+ Some ( make_datetime ( "2000-02-01 08:00:00Z " ) ) ,
275
277
None ,
276
- make_naive_datetime ( "2000-02-01 08:00:00 " ) ,
277
- make_naive_datetime ( "2000-02-03 00:00:01 " )
278
+ make_datetime ( "2000-02-01 08:00:00Z " ) ,
279
+ make_datetime ( "2000-02-03 00:00:01Z " )
278
280
) ]
279
281
#[ case:: both_some(
280
- Some ( make_naive_datetime ( "2000-02-01 08:00:00 " ) ) ,
281
- Some ( make_naive_datetime ( "2000-05-22 09:00:50 " ) ) ,
282
- make_naive_datetime ( "2000-02-01 08:00:00 " ) ,
283
- make_naive_datetime ( "2000-05-22 09:00:50 " )
282
+ Some ( make_datetime ( "2000-02-01 08:00:00Z " ) ) ,
283
+ Some ( make_datetime ( "2000-05-22 09:00:50Z " ) ) ,
284
+ make_datetime ( "2000-02-01 08:00:00Z " ) ,
285
+ make_datetime ( "2000-05-22 09:00:50Z " )
284
286
) ]
285
287
async fn test_resolve_search_window (
286
- #[ case] search_window_begin : Option < NaiveDateTime > ,
287
- #[ case] search_window_end : Option < NaiveDateTime > ,
288
- #[ case] expected_begin : NaiveDateTime ,
289
- #[ case] expected_end : NaiveDateTime ,
288
+ #[ case] search_window_begin : Option < DateTime < Utc > > ,
289
+ #[ case] search_window_end : Option < DateTime < Utc > > ,
290
+ #[ case] expected_begin : DateTime < Utc > ,
291
+ #[ case] expected_end : DateTime < Utc > ,
290
292
) {
291
293
let db_pool = DbConnectionPoolV2 :: for_tests ( ) ;
292
294
let conn = & mut db_pool. get_ok ( ) ;
293
295
294
296
let timetable = create_timetable ( conn) . await ;
295
297
296
298
let start_times = vec ! [
297
- make_naive_datetime ( "2000-01-01 12:00:00 " ) ,
298
- make_naive_datetime ( "2000-02-02 00:00:00 " ) ,
299
- make_naive_datetime ( "2000-01-01 11:59:59 " ) , // earliest
300
- make_naive_datetime ( "2000-01-15 08:59:59 " ) ,
301
- make_naive_datetime ( "2000-02-02 00:00:01 " ) , // latest
302
- make_naive_datetime ( "2000-01-19 17:00:00 " ) ,
299
+ make_datetime ( "2000-01-01 12:00:00Z " ) ,
300
+ make_datetime ( "2000-02-02 00:00:00Z " ) ,
301
+ make_datetime ( "2000-01-01 11:59:59Z " ) , // earliest
302
+ make_datetime ( "2000-01-15 08:59:59Z " ) ,
303
+ make_datetime ( "2000-02-02 00:00:01Z " ) , // latest
304
+ make_datetime ( "2000-01-19 17:00:00Z " ) ,
303
305
] ;
304
306
305
307
create_train_schedules_from_start_times ( start_times, timetable. id , conn) . await ;
@@ -327,23 +329,23 @@ mod tests {
327
329
328
330
#[ rstest]
329
331
#[ case:: both_some(
330
- Some ( make_naive_datetime ( "2000-02-01 08:00:00 " ) ) ,
331
- Some ( make_naive_datetime ( "2000-02-01 00:00:00 " ) )
332
+ Some ( make_datetime ( "2000-02-01 08:00:00Z " ) ) ,
333
+ Some ( make_datetime ( "2000-02-01 00:00:00Z " ) )
332
334
) ]
333
- #[ case:: end_none( Some ( make_naive_datetime ( "2000-03-01 00:00:00 " ) ) , None ) ]
334
- #[ case:: begin_none( None , Some ( make_naive_datetime ( "2000-01-01 08:00:00 " ) ) ) ]
335
+ #[ case:: end_none( Some ( make_datetime ( "2000-03-01 00:00:00Z " ) ) , None ) ]
336
+ #[ case:: begin_none( None , Some ( make_datetime ( "2000-01-01 08:00:00Z " ) ) ) ]
335
337
async fn test_resolve_search_window_incompatible_dates (
336
- #[ case] search_window_begin : Option < NaiveDateTime > ,
337
- #[ case] search_window_end : Option < NaiveDateTime > ,
338
+ #[ case] search_window_begin : Option < DateTime < Utc > > ,
339
+ #[ case] search_window_end : Option < DateTime < Utc > > ,
338
340
) {
339
341
let db_pool = DbConnectionPoolV2 :: for_tests ( ) ;
340
342
let conn = & mut db_pool. get_ok ( ) ;
341
343
342
344
let timetable = create_timetable ( conn) . await ;
343
345
344
346
let start_times = vec ! [
345
- make_naive_datetime ( "2000-01-01 12:00:00 " ) ,
346
- make_naive_datetime ( "2000-02-02 00:00:01 " ) ,
347
+ make_datetime ( "2000-01-01 12:00:00Z " ) ,
348
+ make_datetime ( "2000-02-02 00:00:01Z " ) ,
347
349
] ;
348
350
349
351
create_train_schedules_from_start_times ( start_times, timetable. id , conn) . await ;
@@ -366,8 +368,8 @@ mod tests {
366
368
let work_schedule_group = create_work_schedule_group ( conn) . await ;
367
369
368
370
let start_times = vec ! [
369
- make_naive_datetime ( "2000-01-01 12:00:00 " ) ,
370
- make_naive_datetime ( "2000-02-02 08:00:00 " ) ,
371
+ make_datetime ( "2000-01-01 12:00:00Z " ) ,
372
+ make_datetime ( "2000-02-02 08:00:00Z " ) ,
371
373
] ;
372
374
373
375
create_train_schedules_from_start_times (
@@ -394,11 +396,11 @@ mod tests {
394
396
395
397
assert_eq ! (
396
398
search_env. search_window_begin,
397
- make_naive_datetime ( "2000-01-01 12:00:00 " )
399
+ make_datetime ( "2000-01-01 12:00:00Z " )
398
400
) ;
399
401
assert_eq ! (
400
402
search_env. search_window_end,
401
- make_naive_datetime ( "2000-02-03 08:00:00 " )
403
+ make_datetime ( "2000-02-03 08:00:00Z " )
402
404
) ;
403
405
}
404
406
@@ -413,8 +415,8 @@ mod tests {
413
415
let electrical_profile_set = create_electrical_profile_set ( conn) . await ;
414
416
415
417
let start_times = vec ! [
416
- make_naive_datetime ( "2000-01-01 12:00:00 " ) ,
417
- make_naive_datetime ( "2000-02-02 08:00:00 " ) ,
418
+ make_datetime ( "2000-01-01 12:00:00Z " ) ,
419
+ make_datetime ( "2000-02-02 08:00:00Z " ) ,
418
420
] ;
419
421
420
422
create_train_schedules_from_start_times ( start_times, timetable. id , conn) . await ;
@@ -438,11 +440,11 @@ mod tests {
438
440
439
441
assert_eq ! (
440
442
search_env. search_window_begin,
441
- make_naive_datetime ( "2000-01-01 12:00:00 " )
443
+ make_datetime ( "2000-01-01 12:00:00Z " )
442
444
) ;
443
445
assert_eq ! (
444
446
search_env. search_window_end,
445
- make_naive_datetime ( "2000-02-03 08:00:00 " )
447
+ make_datetime ( "2000-02-03 08:00:00Z " )
446
448
) ;
447
449
}
448
450
}
0 commit comments