From 175712d4a951342f105b40ae64bc40d3c1405c94 Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Sun, 25 Feb 2024 19:38:54 +0100 Subject: [PATCH] Add test for ShortUrlRedirectRule request matching --- .../Entity/ShortUrlRedirectRule.php | 2 +- .../Entity/ShortUrlRedirectRuleTest.php | 49 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 module/Core/test/RedirectRule/Entity/ShortUrlRedirectRuleTest.php diff --git a/module/Core/src/RedirectRule/Entity/ShortUrlRedirectRule.php b/module/Core/src/RedirectRule/Entity/ShortUrlRedirectRule.php index 7fa1a671..74a87930 100644 --- a/module/Core/src/RedirectRule/Entity/ShortUrlRedirectRule.php +++ b/module/Core/src/RedirectRule/Entity/ShortUrlRedirectRule.php @@ -28,7 +28,7 @@ class ShortUrlRedirectRule extends AbstractEntity */ public function matchesRequest(ServerRequestInterface $request): bool { - return every( + return $this->conditions->count() > 0 && every( $this->conditions, static fn (RedirectCondition $condition) => $condition->matchesRequest($request), ); diff --git a/module/Core/test/RedirectRule/Entity/ShortUrlRedirectRuleTest.php b/module/Core/test/RedirectRule/Entity/ShortUrlRedirectRuleTest.php new file mode 100644 index 00000000..244e4f2f --- /dev/null +++ b/module/Core/test/RedirectRule/Entity/ShortUrlRedirectRuleTest.php @@ -0,0 +1,49 @@ +withHeader('Accept-Language', 'en-UK') + ->withQueryParams(['foo' => 'bar']); + + $result = $this->createRule($conditions)->matchesRequest($request); + + self::assertEquals($expectedResult, $result); + } + + public static function provideConditions(): iterable + { + yield 'no conditions' => [[], false]; + yield 'not all conditions match' => [ + [RedirectCondition::forLanguage('en-UK'), RedirectCondition::forQueryParam('foo', 'foo')], + false, + ]; + yield 'all conditions match' => [ + [RedirectCondition::forLanguage('en-UK'), RedirectCondition::forQueryParam('foo', 'bar')], + true, + ]; + } + + /** + * @param RedirectCondition[] $conditions + */ + private function createRule(array $conditions): ShortUrlRedirectRule + { + $shortUrl = ShortUrl::withLongUrl('https://s.test'); + return new ShortUrlRedirectRule($shortUrl, 1, '', new ArrayCollection($conditions)); + } +}