Type date in RedirectCondition::forBeforeDate as Chronos

This commit is contained in:
Alejandro Celaya
2025-12-18 09:11:54 +01:00
parent dae52fedf4
commit 54dc82cb90
4 changed files with 12 additions and 9 deletions

View File

@@ -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?');

View File

@@ -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'))],
];
}

View File

@@ -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)),
};
}

View File

@@ -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];
}
}