From d847c7648e2b925d97a84107b3b5e9d323d873fd Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Sun, 29 Jan 2023 10:29:26 +0100 Subject: [PATCH 1/2] Rename loosely mode to loose mode --- CHANGELOG.md | 21 +++++++++++++++++-- config/autoload/url-shortener.global.php | 2 +- .../Core/src/Options/UrlShortenerOptions.php | 4 ++-- .../Core/src/ShortUrl/Model/ShortUrlMode.php | 8 ++++++- .../Model/Validation/CustomSlugFilter.php | 2 +- .../Repository/ShortUrlRepositoryTest.php | 6 +++--- .../test/ShortUrl/Entity/ShortUrlTest.php | 4 ++-- .../ShortUrl/Model/ShortUrlCreationTest.php | 8 +++---- 8 files changed, 39 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bd0c8222..265b419d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,23 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com), and this project adheres to [Semantic Versioning](https://semver.org). +## [Unreleased] +### Added +* *Nothing* + +### Changed +* [#1685](https://github.com/shlinkio/shlink/issues/1685) Changed `loosely` mode to `loose`, as it was a typo. The old one keeps working and maps to the new one, but it's considered deprecated. + +### Deprecated +* *Nothing* + +### Removed +* *Nothing* + +### Fixed +* *Nothing* + + ## [3.5.0] - 2023-01-28 ### Added * [#1557](https://github.com/shlinkio/shlink/issues/1557) Added support to dynamically redirect to different long URLs based on the visitor's device type. @@ -25,9 +42,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com), and this * [#1662](https://github.com/shlinkio/shlink/issues/1662) Added support to provide openswoole-specific config options via env vars prefixed with `OPENSWOOLE_`. * [#1389](https://github.com/shlinkio/shlink/issues/1389) and [#706](https://github.com/shlinkio/shlink/issues/706) Added support for case-insensitive short URLs. - In order to achieve this, a new env var/config option has been implemented (`SHORT_URL_MODE`), which allows either `strict` or `loosely`. + In order to achieve this, a new env var/config option has been implemented (`SHORT_URL_MODE`), which allows either `strict` or ~~`loosely`~~ `loose`. - Default value is `strict`, but if `loosely` is provided, then short URLs will be matched in a case-insensitive way, and new short URLs will be generated with short-codes in lowercase only. + Default value is `strict`, but if `loose` is provided, then short URLs will be matched in a case-insensitive way, and new short URLs will be generated with short-codes in lowercase only. ### Changed * *Nothing* diff --git a/config/autoload/url-shortener.global.php b/config/autoload/url-shortener.global.php index 2816577d..2a121bee 100644 --- a/config/autoload/url-shortener.global.php +++ b/config/autoload/url-shortener.global.php @@ -14,7 +14,7 @@ return (static function (): array { MIN_SHORT_CODES_LENGTH, ); $modeFromEnv = EnvVars::SHORT_URL_MODE->loadFromEnv(ShortUrlMode::STRICT->value); - $mode = ShortUrlMode::tryFrom($modeFromEnv) ?? ShortUrlMode::STRICT; + $mode = ShortUrlMode::tryDeprecated($modeFromEnv) ?? ShortUrlMode::STRICT; return [ diff --git a/module/Core/src/Options/UrlShortenerOptions.php b/module/Core/src/Options/UrlShortenerOptions.php index 98597bad..6e6ac087 100644 --- a/module/Core/src/Options/UrlShortenerOptions.php +++ b/module/Core/src/Options/UrlShortenerOptions.php @@ -22,8 +22,8 @@ final class UrlShortenerOptions ) { } - public function isLooselyMode(): bool + public function isLooseMode(): bool { - return $this->mode === ShortUrlMode::LOOSELY; + return $this->mode === ShortUrlMode::LOOSE; } } diff --git a/module/Core/src/ShortUrl/Model/ShortUrlMode.php b/module/Core/src/ShortUrl/Model/ShortUrlMode.php index 41698e18..d359e8cc 100644 --- a/module/Core/src/ShortUrl/Model/ShortUrlMode.php +++ b/module/Core/src/ShortUrl/Model/ShortUrlMode.php @@ -5,5 +5,11 @@ namespace Shlinkio\Shlink\Core\ShortUrl\Model; enum ShortUrlMode: string { case STRICT = 'strict'; - case LOOSELY = 'loosely'; + case LOOSE = 'loose'; + + /** @deprecated */ + public static function tryDeprecated(string $mode): ?self + { + return $mode === 'loosely' ? self::LOOSE : self::tryFrom($mode); + } } diff --git a/module/Core/src/ShortUrl/Model/Validation/CustomSlugFilter.php b/module/Core/src/ShortUrl/Model/Validation/CustomSlugFilter.php index ec0b30d3..d7012bf1 100644 --- a/module/Core/src/ShortUrl/Model/Validation/CustomSlugFilter.php +++ b/module/Core/src/ShortUrl/Model/Validation/CustomSlugFilter.php @@ -24,7 +24,7 @@ class CustomSlugFilter implements FilterInterface return $value; } - $value = $this->options->isLooselyMode() ? strtolower($value) : $value; + $value = $this->options->isLooseMode() ? strtolower($value) : $value; return (match ($this->options->multiSegmentSlugsEnabled) { true => trim(str_replace(' ', '-', $value), '/'), false => str_replace([' ', '/'], '-', $value), diff --git a/module/Core/test-db/ShortUrl/Repository/ShortUrlRepositoryTest.php b/module/Core/test-db/ShortUrl/Repository/ShortUrlRepositoryTest.php index dd0cc4f0..5f47ffb3 100644 --- a/module/Core/test-db/ShortUrl/Repository/ShortUrlRepositoryTest.php +++ b/module/Core/test-db/ShortUrl/Repository/ShortUrlRepositoryTest.php @@ -55,13 +55,13 @@ class ShortUrlRepositoryTest extends DatabaseTestCase )); self::assertSame($regularOne, $this->repo->findOneWithDomainFallback( ShortUrlIdentifier::fromShortCodeAndDomain('foo'), - ShortUrlMode::LOOSELY, + ShortUrlMode::LOOSE, )); self::assertSame($regularOne, $this->repo->findOneWithDomainFallback( ShortUrlIdentifier::fromShortCodeAndDomain('fOo'), - ShortUrlMode::LOOSELY, + ShortUrlMode::LOOSE, )); - // TODO MS is doing loosely checks always, making this fail. + // TODO MS is doing loose checks always, making this fail. if (! $this->getEntityManager()->getConnection()->getDatabasePlatform() instanceof SQLServerPlatform) { self::assertNull($this->repo->findOneWithDomainFallback( ShortUrlIdentifier::fromShortCodeAndDomain('foo'), diff --git a/module/Core/test/ShortUrl/Entity/ShortUrlTest.php b/module/Core/test/ShortUrl/Entity/ShortUrlTest.php index b69b369a..8b40baca 100644 --- a/module/Core/test/ShortUrl/Entity/ShortUrlTest.php +++ b/module/Core/test/ShortUrl/Entity/ShortUrlTest.php @@ -139,7 +139,7 @@ class ShortUrlTest extends TestCase } /** @test */ - public function generatesLowercaseOnlyShortCodesInLooselyMode(): void + public function generatesLowercaseOnlyShortCodesInLooseMode(): void { $range = range(1, 1000); // Use a "big" number to reduce false negatives $allFor = static fn (ShortUrlMode $mode): bool => every($range, static function () use ($mode): bool { @@ -152,7 +152,7 @@ class ShortUrlTest extends TestCase return $shortCode === strtolower($shortCode); }); - self::assertTrue($allFor(ShortUrlMode::LOOSELY)); + self::assertTrue($allFor(ShortUrlMode::LOOSE)); self::assertFalse($allFor(ShortUrlMode::STRICT)); } } diff --git a/module/Core/test/ShortUrl/Model/ShortUrlCreationTest.php b/module/Core/test/ShortUrl/Model/ShortUrlCreationTest.php index 9582180b..904dab01 100644 --- a/module/Core/test/ShortUrl/Model/ShortUrlCreationTest.php +++ b/module/Core/test/ShortUrl/Model/ShortUrlCreationTest.php @@ -140,20 +140,20 @@ class ShortUrlCreationTest extends TestCase { yield ['πŸ”₯', 'πŸ”₯']; yield ['🦣 πŸ…', '🦣-πŸ…']; - yield ['🦣 πŸ…', '🦣-πŸ…', false, ShortUrlMode::LOOSELY]; + yield ['🦣 πŸ…', '🦣-πŸ…', false, ShortUrlMode::LOOSE]; yield ['foobar', 'foobar']; yield ['foo bar', 'foo-bar']; yield ['foo bar baz', 'foo-bar-baz']; yield ['foo bar-baz', 'foo-bar-baz']; - yield ['foo BAR-baz', 'foo-bar-baz', false, ShortUrlMode::LOOSELY]; + yield ['foo BAR-baz', 'foo-bar-baz', false, ShortUrlMode::LOOSE]; yield ['foo/bar/baz', 'foo/bar/baz', true]; yield ['/foo/bar/baz', 'foo/bar/baz', true]; - yield ['/foo/baR/baZ', 'foo/bar/baz', true, ShortUrlMode::LOOSELY]; + yield ['/foo/baR/baZ', 'foo/bar/baz', true, ShortUrlMode::LOOSE]; yield ['foo/bar/baz', 'foo-bar-baz']; yield ['/foo/bar/baz', '-foo-bar-baz']; yield ['wp-admin.php', 'wp-admin.php']; yield ['UPPER_lower', 'UPPER_lower']; - yield ['UPPER_lower', 'upper_lower', false, ShortUrlMode::LOOSELY]; + yield ['UPPER_lower', 'upper_lower', false, ShortUrlMode::LOOSE]; yield ['more~url_special.chars', 'more~url_special.chars']; yield ['ꡬ글', 'ꡬ글']; yield ['グーグル', 'グーグル']; From 8afa582aa5ee869f041d6002bb58c57a94aeb6da Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Sun, 29 Jan 2023 11:32:13 +0100 Subject: [PATCH 2/2] Create ShortUrlModeTest --- .../test/ShortUrl/Model/ShortUrlModeTest.php | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 module/Core/test/ShortUrl/Model/ShortUrlModeTest.php diff --git a/module/Core/test/ShortUrl/Model/ShortUrlModeTest.php b/module/Core/test/ShortUrl/Model/ShortUrlModeTest.php new file mode 100644 index 00000000..18aa2d54 --- /dev/null +++ b/module/Core/test/ShortUrl/Model/ShortUrlModeTest.php @@ -0,0 +1,29 @@ + ['invalid', null]; + yield 'foo' => ['foo', null]; + yield 'loose' => ['loose', ShortUrlMode::LOOSE]; + yield 'loosely' => ['loosely', ShortUrlMode::LOOSE]; + yield 'strict' => ['strict', ShortUrlMode::STRICT]; + } +}