Skip to content

Commit c3712fc

Browse files
committed
Extract the timezone regex for readability
Also added a test with the different characters in case we ever change the regex.
1 parent 488ba2b commit c3712fc

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

webapp/src/Validator/Constraints/TimeStringValidator.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ class TimeStringValidator extends ConstraintValidator
1010
{
1111
public function validate(mixed $value, Constraint $constraint): void
1212
{
13+
$timezoneRegex = "[A-Za-z][A-Za-z0-9_\/+-]{1,35}"; # See: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
1314
$relativeRegex = "\d+:\d\d(:\d\d(\.\d{1,6})?)?";
1415
if (!$constraint instanceof TimeString) {
1516
throw new UnexpectedTypeException($constraint, TimeString::class);
@@ -25,8 +26,8 @@ public function validate(mixed $value, Constraint $constraint): void
2526

2627
if ($constraint->allowRelative) {
2728
$regex = $constraint->relativeIsPositive ?
28-
"/^(\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d(\.\d{2,6})? [A-Za-z][A-Za-z0-9_\/+-]{1,35}|\+?" . $relativeRegex . ")$/" :
29-
"/^(\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d(\.\d{1,6})? [A-Za-z][A-Za-z0-9_\/+-]{1,35}|-" . $relativeRegex . ")$/";
29+
"/^(\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d(\.\d{2,6})? " . $timeZoneRegex . "|\+?" . $relativeRegex . ")$/" :
30+
"/^(\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d(\.\d{1,6})? " . $timeZoneRegex . "|-" . $relativeRegex . ")$/";
3031
$message = $constraint->absoluteRelativeMessage;
3132
} else {
3233
$regex = "/^\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d(\.\d{1,6})? [A-Za-z][A-Za-z0-9_\/+-]{1,35}$/";

webapp/tests/Unit/Controller/Jury/ContestControllerTest.php

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,14 @@ class ContestControllerTest extends JuryControllerTestCase
5757
'endtimeString' => '2021-07-17 16:11:00 CET',
5858
'unfreezetimeString' => '2021-07-17 16:12:00 CET',
5959
'deactivatetimeString' => '2021-07-17 16:13:00 CET'],
60+
['shortname' => 'otzNZ-CHAT',
61+
'name' => 'Other timezone (NZ-CHAT)',
62+
'activatetimeString' => '2021-07-17 16:08:00 NZ-CHAT',
63+
'starttimeString' => '2021-07-17 16:09:00 NZ-CHAT',
64+
'freezetimeString' => '2021-07-17 16:10:00 NZ-CHAT',
65+
'endtimeString' => '2021-07-17 16:11:00 NZ-CHAT',
66+
'unfreezetimeString' => '2021-07-17 16:12:00 NZ-CHAT',
67+
'deactivatetimeString' => '2021-07-17 16:13:00 NZ-CHAT'],
6068
['shortname' => 'otzunder',
6169
'name' => 'Other timezone (Underscore)',
6270
'activatetimeString' => '2021-07-17 16:08:00 America/Porto_Velho',
@@ -73,6 +81,14 @@ class ContestControllerTest extends JuryControllerTestCase
7381
'endtimeString' => '2021-07-17 16:11:00 Etc/GMT-3',
7482
'unfreezetimeString' => '',
7583
'deactivatetimeString' => ''],
84+
['shortname' => 'otzGMT2',
85+
'name' => 'Other timezone (GMT)',
86+
'activatetimeString' => '2021-07-17 16:08:00 Etc/GMT+3',
87+
'starttimeString' => '2021-07-17 16:09:00 Etc/GMT+3',
88+
'freezetimeString' => '2021-07-17 16:10:00 Etc/GMT+3',
89+
'endtimeString' => '2021-07-17 16:11:00 Etc/GMT+3',
90+
'unfreezetimeString' => '',
91+
'deactivatetimeString' => ''],
7692
['shortname' => 'otzrel',
7793
'name' => 'Other timezone (Relative)',
7894
'activatetimeString' => '-10:00',
@@ -93,7 +109,7 @@ class ContestControllerTest extends JuryControllerTestCase
93109
'endtimeString' => '2021-07-17 16:11:00 Europe/Amsterdam',
94110
'unfreezetimeString' => '',
95111
'deactivatetimeString' => ''],
96-
['shortname' => 'dirfreeze',
112+
['shortname' => 'dirfreeze',
97113
'name' => 'Direct freeze minimal',
98114
'activatetimeString' => '2021-07-17 16:07:59 Europe/Amsterdam',
99115
'starttimeString' => '2021-07-17 16:08:00 Europe/Amsterdam',

0 commit comments

Comments
 (0)