diff --git a/module/CLI/src/RedirectRule/RedirectRuleHandler.php b/module/CLI/src/RedirectRule/RedirectRuleHandler.php index c1251b1d..689bbb20 100644 --- a/module/CLI/src/RedirectRule/RedirectRuleHandler.php +++ b/module/CLI/src/RedirectRule/RedirectRuleHandler.php @@ -24,6 +24,7 @@ use function max; use function min; use function Shlinkio\Shlink\Core\ArrayUtils\map; use function Shlinkio\Shlink\Core\enumValues; +use function Shlinkio\Shlink\Core\normalizeDate; use function sprintf; use function str_pad; use function strlen; @@ -124,8 +125,8 @@ class RedirectRuleHandler implements RedirectRuleHandlerInterface $this->askMandatory('City name to match?', $io), ), RedirectConditionType::BEFORE_DATE => RedirectCondition::forBeforeDate( - $this->askMandatory('Date to match? (ISO 8601)', $io), - ) + normalizeDate($this->askMandatory('Date to match? (ISO 8601)', $io)), + ), }; $continue = $io->confirm('Do you want to add another condition?'); diff --git a/module/CLI/test/RedirectRule/RedirectRuleHandlerTest.php b/module/CLI/test/RedirectRule/RedirectRuleHandlerTest.php index c93b5b71..60422949 100644 --- a/module/CLI/test/RedirectRule/RedirectRuleHandlerTest.php +++ b/module/CLI/test/RedirectRule/RedirectRuleHandlerTest.php @@ -19,6 +19,7 @@ use Shlinkio\Shlink\Core\RedirectRule\Model\RedirectConditionType; use Shlinkio\Shlink\Core\ShortUrl\Entity\ShortUrl; use Symfony\Component\Console\Style\StyleInterface; +use function Shlinkio\Shlink\Core\normalizeDate; use function sprintf; #[AllowMockObjectsWithoutExpectations] @@ -189,7 +190,7 @@ class RedirectRuleHandlerTest extends TestCase ]; yield 'Before date' => [ RedirectConditionType::BEFORE_DATE, - [RedirectCondition::forBeforeDate('2016-05-01T20:34:16+02:00')], + [RedirectCondition::forBeforeDate(normalizeDate('2016-05-01T20:34:16+02:00'))], ]; } diff --git a/module/Core/src/RedirectRule/Entity/RedirectCondition.php b/module/Core/src/RedirectRule/Entity/RedirectCondition.php index 167b723a..45e41c1e 100644 --- a/module/Core/src/RedirectRule/Entity/RedirectCondition.php +++ b/module/Core/src/RedirectRule/Entity/RedirectCondition.php @@ -17,6 +17,7 @@ use function Shlinkio\Shlink\Core\acceptLanguageToLocales; use function Shlinkio\Shlink\Core\ArrayUtils\some; use function Shlinkio\Shlink\Core\geolocationFromRequest; use function Shlinkio\Shlink\Core\ipAddressFromRequest; +use function Shlinkio\Shlink\Core\normalizeDate; use function Shlinkio\Shlink\Core\normalizeLocale; use function Shlinkio\Shlink\Core\splitLocale; use function sprintf; @@ -76,9 +77,9 @@ class RedirectCondition extends AbstractEntity implements JsonSerializable return new self(RedirectConditionType::GEOLOCATION_CITY_NAME, $cityName); } - public static function forBeforeDate(string $date): self + public static function forBeforeDate(Chronos $date): self { - return new self(RedirectConditionType::BEFORE_DATE, $date); + return new self(RedirectConditionType::BEFORE_DATE, $date->toAtomString()); } public static function fromRawData(array $rawData): self @@ -106,7 +107,7 @@ class RedirectCondition extends AbstractEntity implements JsonSerializable RedirectConditionType::IP_ADDRESS => self::forIpAddress($cond->matchValue), RedirectConditionType::GEOLOCATION_COUNTRY_CODE => self::forGeolocationCountryCode($cond->matchValue), RedirectConditionType::GEOLOCATION_CITY_NAME => self::forGeolocationCityName($cond->matchValue), - RedirectConditionType::BEFORE_DATE => self::forBeforeDate($cond->matchValue), + RedirectConditionType::BEFORE_DATE => self::forBeforeDate(normalizeDate($cond->matchValue)), }; } diff --git a/module/Core/test/RedirectRule/Entity/RedirectConditionTest.php b/module/Core/test/RedirectRule/Entity/RedirectConditionTest.php index 5edda6af..b35679d9 100644 --- a/module/Core/test/RedirectRule/Entity/RedirectConditionTest.php +++ b/module/Core/test/RedirectRule/Entity/RedirectConditionTest.php @@ -198,7 +198,7 @@ class RedirectConditionTest extends TestCase } #[Test, DataProvider('provideVisitsWithBeforeDateCondition')] - public function matchesBeforeDate(string $date, bool $expectedResult): void + public function matchesBeforeDate(Chronos $date, bool $expectedResult): void { $request = ServerRequestFactory::fromGlobals(); $result = RedirectCondition::forBeforeDate($date)->matchesRequest($request); @@ -208,7 +208,7 @@ class RedirectConditionTest extends TestCase public static function provideVisitsWithBeforeDateCondition(): iterable { - yield 'date later than current' => [Chronos::now()->addHours(1)->toIso8601String(), true]; - yield 'date earlier than current' => [Chronos::now()->subHours(1)->toIso8601String(), false]; + yield 'date later than current' => [Chronos::now()->addHours(1), true]; + yield 'date earlier than current' => [Chronos::now()->subHours(1), false]; } }