@@ -32,11 +32,11 @@ public function testAddYaml(): void
32
32
{
33
33
$ yaml = <<<EOF
34
34
duration: 2:00:00
35
- name : NWERC 2020 Practice Session
36
- penalty-time : 20
37
- scoreboard-freeze-length : 30:00
38
- short-name : practice
39
- start-time : 2021-03-27 09:00:00+00:00
35
+ formal_name : NWERC 2020 Practice Session
36
+ penalty_time : 20
37
+ scoreboard_freeze_duration : 30:00
38
+ id : practice
39
+ start_time : 2021-03-27 09:00:00+00:00
40
40
problems:
41
41
- color: '#FE9DAF'
42
42
letter: A
@@ -80,6 +80,8 @@ public function testAddYaml(): void
80
80
$ expected = $ this ->parseSortYaml ($ expectedYaml );
81
81
$ actual = $ this ->parseSortYaml ($ exportContestYaml );
82
82
self ::assertSame ($ expected , $ actual );
83
+ self ::assertSame ($ this ->getContest ($ cid )->getActivatetime (), $ this ->getContest ($ cid )->getStarttime ());
84
+ self ::assertNull ($ this ->getContest ($ cid )->getDeactivatetime ());
83
85
}
84
86
85
87
public function testAddJson (): void
@@ -238,4 +240,104 @@ public function provideChangeTimes(): Generator
238
240
yield [['id ' => 1 , 'scoreboard_thaw_time ' => '+15 seconds ' ], 204 , null , [], false , true ];
239
241
yield [['id ' => 1 , 'scoreboard_thaw_time ' => '-15 seconds ' ], 200 , 'Demo contest ' , [], true , true ];
240
242
}
243
+
244
+ /**
245
+ * @dataProvider provideNewContest
246
+ */
247
+ public function testActivationTimeContestYaml (
248
+ string $ activationTime , string $ startTime , ?string $ deactivationTime ,
249
+ bool $ setActivation , bool $ setDeactivation
250
+ ): void {
251
+ $ yaml = <<<EOF
252
+ duration: 2:00:00
253
+ formal_name: New Contest to check Activation
254
+ penalty-time: 20
255
+ scoreboard_freeze_duration: 30:00
256
+ name: activation
257
+ id: activation
258
+ start_time: {$ startTime }
259
+ problems:
260
+ - color: '#FE9DAF'
261
+ letter: A
262
+ rgb: '#FE9DAF'
263
+ id: anothereruption
264
+ EOF ;
265
+
266
+ if ($ setActivation ) {
267
+ $ yaml = "activation_time: " .$ activationTime ."\n" .$ yaml ;
268
+ }
269
+ if ($ setDeactivation ) {
270
+ $ yaml = "deactivation_time: " .$ deactivationTime ."\n" .$ yaml ;
271
+ }
272
+ $ url = $ this ->helperGetEndpointURL ($ this ->apiEndpoint );
273
+ $ tempYamlFile = tempnam (sys_get_temp_dir (), "/contest-yaml- " );
274
+ file_put_contents ($ tempYamlFile , $ yaml );
275
+ $ yamlFile = new UploadedFile ($ tempYamlFile , 'contest.yaml ' );
276
+ $ cid = $ this ->verifyApiJsonResponse ('POST ' , $ url , 200 , $ this ->apiUser , [], ['yaml ' => $ yamlFile ]);
277
+ self ::assertIsString ($ cid );
278
+ unlink ($ tempYamlFile );
279
+
280
+ $ now = Utils::now ();
281
+ $ nowTime = Utils::printtime ($ now , 'Y-m-d H:i:s ' );
282
+ $ activation = Utils::toEpochFloat ($ activationTime );
283
+ $ start = Utils::toEpochFloat ($ startTime );
284
+
285
+ self ::assertIsString ($ cid );
286
+ self ::assertSame ('New Contest to check Activation ' , $ this ->getContest ($ cid )->getName ());
287
+ self ::assertSame ($ start , $ this ->getContest ($ cid )->getStarttime ());
288
+
289
+ if ($ setActivation ) {
290
+ self ::assertSame ($ activationTime , Utils::printtime ($ this ->getContest ($ cid )->getActivatetime (), 'Y-m-d H:i:s ' ));
291
+ self ::assertSame ($ activation , $ this ->getContest ($ cid )->getActivatetime ());
292
+ } else {
293
+ // Contest uploaded starts in the past
294
+ if (Utils::printtime (Utils::now (), 'Y-m-d H:i:s ' )>=$ startTime ) {
295
+ self ::assertSame ($ this ->getContest ($ cid )->getActivatetime (), $ this ->getContest ($ cid )->getStarttime ());
296
+ } else {
297
+ self ::assertTrue ($ this ->getContest ($ cid )->getActivatetime () <= $ now );
298
+ }
299
+ }
300
+ if ($ deactivationTime ) {
301
+ self ::assertSame ($ deactivationTime , Utils::printtime ($ this ->getContest ($ cid )->getDeactivatetime (), 'Y-m-d H:i:s ' ));
302
+ } else {
303
+ self ::assertNull ($ this ->getContest ($ cid )->getDeactivatetime ());
304
+ }
305
+ }
306
+
307
+ public function provideNewContest (): Generator
308
+ {
309
+ // Test Activation in past, present & future
310
+ yield [Utils::printtime (Utils::now ()-14 *24 *60 *60 , 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now ()-7 *24 *60 *60 , 'Y-m-d H:i:s ' ), null , True , False ];
311
+ yield [Utils::printtime (Utils::now ()-7 *24 *60 *60 , 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now (), 'Y-m-d H:i:s ' ), null , True , False ];
312
+ yield [Utils::printtime (Utils::now ()-1 , 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now (), 'Y-m-d H:i:s ' ), null , True , False ];
313
+ yield [Utils::printtime (Utils::now (), 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now (), 'Y-m-d H:i:s ' ), null , True , False ];
314
+ yield [Utils::printtime (Utils::now (), 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now ()+1 , 'Y-m-d H:i:s ' ), null , True , False ];
315
+ yield [Utils::printtime (Utils::now (), 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now ()+7 *24 *60 *60 , 'Y-m-d H:i:s ' ), null , True , False ];
316
+ yield [Utils::printtime (Utils::now ()+1 , 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now ()+7 *24 *60 *60 , 'Y-m-d H:i:s ' ), null , True , False ];
317
+ yield [Utils::printtime (Utils::now ()+7 *24 *60 *60 , 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now ()+14 *24 *60 *60 , 'Y-m-d H:i:s ' ), null , True , False ];
318
+ yield [Utils::printtime (Utils::now ()-7 *24 *60 *60 , 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now ()+7 *24 *60 *60 , 'Y-m-d H:i:s ' ), null , True , False ];
319
+ // Test Deactivation in past, present & future
320
+ yield [Utils::printtime (Utils::now ()-14 *24 *60 *60 , 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now ()-14 *24 *60 *60 , 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now ()-7 *24 *60 *60 , 'Y-m-d H:i:s ' ), False , True ];
321
+ yield [Utils::printtime (Utils::now ()-7 *24 *60 *60 , 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now ()-7 *24 *60 *60 , 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now ()-1 , 'Y-m-d H:i:s ' ), False , True ];
322
+ yield [Utils::printtime (Utils::now ()-7 *24 *60 *60 , 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now ()-7 *24 *60 *60 , 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now (), 'Y-m-d H:i:s ' ), False , True ];
323
+ yield [Utils::printtime (Utils::now ()-7 *24 *60 *60 , 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now ()-7 *24 *60 *60 , 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now ()+1 , 'Y-m-d H:i:s ' ), False , True ];
324
+ yield [Utils::printtime (Utils::now ()-7 *24 *60 *60 , 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now ()-7 *24 *60 *60 , 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now ()+7 *24 *60 *60 , 'Y-m-d H:i:s ' ), False , True ];
325
+ yield [Utils::printtime (Utils::now (), 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now (), 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now ()+7 *24 *60 *60 , 'Y-m-d H:i:s ' ), False , True ];
326
+ yield [Utils::printtime (Utils::now ()+1 , 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now ()+1 , 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now ()+7 *24 *60 *60 , 'Y-m-d H:i:s ' ), False , True ];
327
+ yield [Utils::printtime (Utils::now ()+7 *24 *60 *60 , 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now ()+7 *24 *60 *60 , 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now ()+14 *24 *60 *60 , 'Y-m-d H:i:s ' ), False , True ];
328
+ // Only activate during the contest
329
+ foreach ([True , False ] as $ explicitSet ) {
330
+ yield [Utils::printtime (Utils::now ()-7 *24 *60 *60 , 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now ()-7 *24 *60 *60 , 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now ()-(7 *24 -2 )*60 *60 , 'Y-m-d H:i:s ' ), $ explicitSet , True ];
331
+ yield [Utils::printtime (Utils::now (), 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now (), 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now ()+2 *60 *60 , 'Y-m-d H:i:s ' ), $ explicitSet , True ];
332
+ yield [Utils::printtime (Utils::now ()+7 *24 *60 *60 , 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now ()+7 *24 *60 *60 , 'Y-m-d H:i:s ' ), Utils::printtime (Utils::now ()+(7 *24 +2 )*60 *60 , 'Y-m-d H:i:s ' ), $ explicitSet , True ];
333
+ }
334
+ // Pick hardcoded times
335
+ yield ["2000-01-01 10:10:10 " , "2000-01-01 10:10:10 " , "2002-01-01 10:10:10 " , False , True ];
336
+ yield ["2000-01-01 10:10:10 " , "2001-01-01 10:10:10 " , null , True , False ];
337
+ yield ["2077-01-01 10:10:10 " , "2099-01-01 10:10:10 " , null , True , False ];
338
+ yield ["2077-01-01 10:10:10 " , "2099-01-01 10:10:10 " , "2100-01-01 10:10:10 " , True , True ];
339
+ yield ["2000-01-01 10:10:10 " , "2000-01-01 10:10:10 " , null , False , False ];
340
+ yield [Utils::printtime (Utils::now (), 'Y-m-d H:i:s ' ), "2099-01-01 10:10:10 " , null , False , False ];
341
+ yield [Utils::printtime (Utils::now (), 'Y-m-d H:i:s ' ), "2077-01-01 10:10:10 " , "2099-01-01 10:10:10 " , False , True ];
342
+ }
241
343
}
0 commit comments