From 626caa4afa997750d83015e0f2c62bea50f12dfb Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Wed, 17 Jul 2024 20:12:56 +0200 Subject: [PATCH] Add API test for dynamic IP-based redirects --- module/Core/test-api/Action/RedirectTest.php | 12 ++++++++++++ .../Rest/test-api/Action/ListRedirectRulesTest.php | 11 +++++++++++ .../Fixtures/ShortUrlRedirectRulesFixture.php | 8 ++++++++ 3 files changed, 31 insertions(+) diff --git a/module/Core/test-api/Action/RedirectTest.php b/module/Core/test-api/Action/RedirectTest.php index 2c54e8a7..dc6ca174 100644 --- a/module/Core/test-api/Action/RedirectTest.php +++ b/module/Core/test-api/Action/RedirectTest.php @@ -10,6 +10,8 @@ use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\Attributes\TestWith; use Shlinkio\Shlink\TestUtils\ApiTest\ApiTestCase; +use function sprintf; + use const ShlinkioTest\Shlink\ANDROID_USER_AGENT; use const ShlinkioTest\Shlink\DESKTOP_USER_AGENT; use const ShlinkioTest\Shlink\IOS_USER_AGENT; @@ -86,6 +88,16 @@ class RedirectTest extends ApiTestCase ], 'https://blog.alejandrocelaya.com/2017/12/09/acmailer-7-0-the-most-important-release-in-a-long-time/', ]; + + $clientDetection = require __DIR__ . '/../../../../config/autoload/client-detection.global.php'; + foreach ($clientDetection['ip_address_resolution']['headers_to_inspect'] as $header) { + yield sprintf('rule: IP address in "%s" header', $header) => [ + [ + RequestOptions::HEADERS => [$header => '1.2.3.4'], + ], + 'https://example.com/static-ip-address', + ]; + } } /** diff --git a/module/Rest/test-api/Action/ListRedirectRulesTest.php b/module/Rest/test-api/Action/ListRedirectRulesTest.php index 8f4efdda..494a6564 100644 --- a/module/Rest/test-api/Action/ListRedirectRulesTest.php +++ b/module/Rest/test-api/Action/ListRedirectRulesTest.php @@ -87,6 +87,17 @@ class ListRedirectRulesTest extends ApiTestCase ], ], ], + [ + 'longUrl' => 'https://example.com/static-ip-address', + 'priority' => 6, + 'conditions' => [ + [ + 'type' => 'ip-address', + 'matchKey' => null, + 'matchValue' => '1.2.3.4', + ], + ], + ], ]])] public function returnsListOfRulesForShortUrl(string $shortCode, array $expectedRules): void { diff --git a/module/Rest/test-api/Fixtures/ShortUrlRedirectRulesFixture.php b/module/Rest/test-api/Fixtures/ShortUrlRedirectRulesFixture.php index b21f86e1..3aa81315 100644 --- a/module/Rest/test-api/Fixtures/ShortUrlRedirectRulesFixture.php +++ b/module/Rest/test-api/Fixtures/ShortUrlRedirectRulesFixture.php @@ -70,6 +70,14 @@ class ShortUrlRedirectRulesFixture extends AbstractFixture implements DependentF ); $manager->persist($iosRule); + $ipAddressRule = new ShortUrlRedirectRule( + shortUrl: $defShortUrl, + priority: 6, + longUrl: 'https://example.com/static-ip-address', + conditions: new ArrayCollection([RedirectCondition::forIpAddress('1.2.3.4')]), + ); + $manager->persist($ipAddressRule); + $manager->flush(); } }