Added support to search short URLs by title

This commit is contained in:
Alejandro Celaya 2021-02-04 21:27:16 +01:00
parent 2640c7b43c
commit 16873201e9
4 changed files with 16 additions and 12 deletions

View file

@ -1,6 +1,6 @@
#!/usr/bin/env sh #!/usr/bin/env sh
export APP_ENV=test export APP_ENV=test
export DB_DRIVER=mysql export DB_DRIVER=postgres
export TEST_ENV=api export TEST_ENV=api
# Try to stop server just in case it hanged in last execution # Try to stop server just in case it hanged in last execution

View file

@ -120,6 +120,7 @@ class ShortUrlRepository extends EntitySpecificationRepository implements ShortU
->andWhere($qb->expr()->orX( ->andWhere($qb->expr()->orX(
$qb->expr()->like('s.longUrl', ':searchPattern'), $qb->expr()->like('s.longUrl', ':searchPattern'),
$qb->expr()->like('s.shortCode', ':searchPattern'), $qb->expr()->like('s.shortCode', ':searchPattern'),
$qb->expr()->like('s.title', ':searchPattern'),
$qb->expr()->like('t.name', ':searchPattern'), $qb->expr()->like('t.name', ':searchPattern'),
$qb->expr()->like('d.authority', ':searchPattern'), $qb->expr()->like('d.authority', ':searchPattern'),
)) ))

View file

@ -12,7 +12,7 @@ use function count;
class ListShortUrlsTest extends ApiTestCase class ListShortUrlsTest extends ApiTestCase
{ {
private const SHORT_URL_SHLINK = [ private const SHORT_URL_SHLINK_WITH_TITLE = [
'shortCode' => 'abc123', 'shortCode' => 'abc123',
'shortUrl' => 'http://doma.in/abc123', 'shortUrl' => 'http://doma.in/abc123',
'longUrl' => 'https://shlink.io', 'longUrl' => 'https://shlink.io',
@ -25,7 +25,7 @@ class ListShortUrlsTest extends ApiTestCase
'maxVisits' => null, 'maxVisits' => null,
], ],
'domain' => null, 'domain' => null,
'title' => 'Shlink', 'title' => 'My cool title',
]; ];
private const SHORT_URL_DOCS = [ private const SHORT_URL_DOCS = [
'shortCode' => 'ghi789', 'shortCode' => 'ghi789',
@ -128,7 +128,7 @@ class ListShortUrlsTest extends ApiTestCase
public function provideFilteredLists(): iterable public function provideFilteredLists(): iterable
{ {
yield [[], [ yield [[], [
self::SHORT_URL_SHLINK, self::SHORT_URL_SHLINK_WITH_TITLE,
self::SHORT_URL_DOCS, self::SHORT_URL_DOCS,
self::SHORT_URL_CUSTOM_SLUG_AND_DOMAIN, self::SHORT_URL_CUSTOM_SLUG_AND_DOMAIN,
self::SHORT_URL_META, self::SHORT_URL_META,
@ -136,7 +136,7 @@ class ListShortUrlsTest extends ApiTestCase
self::SHORT_URL_CUSTOM_DOMAIN, self::SHORT_URL_CUSTOM_DOMAIN,
], 'valid_api_key']; ], 'valid_api_key'];
yield [['orderBy' => 'shortCode'], [ yield [['orderBy' => 'shortCode'], [
self::SHORT_URL_SHLINK, self::SHORT_URL_SHLINK_WITH_TITLE,
self::SHORT_URL_CUSTOM_SLUG, self::SHORT_URL_CUSTOM_SLUG,
self::SHORT_URL_CUSTOM_SLUG_AND_DOMAIN, self::SHORT_URL_CUSTOM_SLUG_AND_DOMAIN,
self::SHORT_URL_META, self::SHORT_URL_META,
@ -149,7 +149,7 @@ class ListShortUrlsTest extends ApiTestCase
self::SHORT_URL_META, self::SHORT_URL_META,
self::SHORT_URL_CUSTOM_SLUG_AND_DOMAIN, self::SHORT_URL_CUSTOM_SLUG_AND_DOMAIN,
self::SHORT_URL_CUSTOM_SLUG, self::SHORT_URL_CUSTOM_SLUG,
self::SHORT_URL_SHLINK, self::SHORT_URL_SHLINK_WITH_TITLE,
], 'valid_api_key']; ], 'valid_api_key'];
yield [['orderBy' => 'shortCode-DESC'], [ yield [['orderBy' => 'shortCode-DESC'], [
self::SHORT_URL_DOCS, self::SHORT_URL_DOCS,
@ -157,7 +157,7 @@ class ListShortUrlsTest extends ApiTestCase
self::SHORT_URL_META, self::SHORT_URL_META,
self::SHORT_URL_CUSTOM_SLUG_AND_DOMAIN, self::SHORT_URL_CUSTOM_SLUG_AND_DOMAIN,
self::SHORT_URL_CUSTOM_SLUG, self::SHORT_URL_CUSTOM_SLUG,
self::SHORT_URL_SHLINK, self::SHORT_URL_SHLINK_WITH_TITLE,
], 'valid_api_key']; ], 'valid_api_key'];
yield [['startDate' => Chronos::parse('2018-12-01')->toAtomString()], [ yield [['startDate' => Chronos::parse('2018-12-01')->toAtomString()], [
self::SHORT_URL_META, self::SHORT_URL_META,
@ -165,12 +165,12 @@ class ListShortUrlsTest extends ApiTestCase
self::SHORT_URL_CUSTOM_DOMAIN, self::SHORT_URL_CUSTOM_DOMAIN,
], 'valid_api_key']; ], 'valid_api_key'];
yield [['endDate' => Chronos::parse('2018-12-01')->toAtomString()], [ yield [['endDate' => Chronos::parse('2018-12-01')->toAtomString()], [
self::SHORT_URL_SHLINK, self::SHORT_URL_SHLINK_WITH_TITLE,
self::SHORT_URL_DOCS, self::SHORT_URL_DOCS,
self::SHORT_URL_CUSTOM_SLUG_AND_DOMAIN, self::SHORT_URL_CUSTOM_SLUG_AND_DOMAIN,
], 'valid_api_key']; ], 'valid_api_key'];
yield [['tags' => ['foo']], [ yield [['tags' => ['foo']], [
self::SHORT_URL_SHLINK, self::SHORT_URL_SHLINK_WITH_TITLE,
self::SHORT_URL_META, self::SHORT_URL_META,
self::SHORT_URL_CUSTOM_DOMAIN, self::SHORT_URL_CUSTOM_DOMAIN,
], 'valid_api_key']; ], 'valid_api_key'];
@ -178,17 +178,20 @@ class ListShortUrlsTest extends ApiTestCase
self::SHORT_URL_META, self::SHORT_URL_META,
], 'valid_api_key']; ], 'valid_api_key'];
yield [['tags' => ['foo'], 'endDate' => Chronos::parse('2018-12-01')->toAtomString()], [ yield [['tags' => ['foo'], 'endDate' => Chronos::parse('2018-12-01')->toAtomString()], [
self::SHORT_URL_SHLINK, self::SHORT_URL_SHLINK_WITH_TITLE,
], 'valid_api_key']; ], 'valid_api_key'];
yield [['searchTerm' => 'alejandro'], [ yield [['searchTerm' => 'alejandro'], [
self::SHORT_URL_META, self::SHORT_URL_META,
self::SHORT_URL_CUSTOM_DOMAIN, self::SHORT_URL_CUSTOM_DOMAIN,
], 'valid_api_key']; ], 'valid_api_key'];
yield [['searchTerm' => 'cool'], [
self::SHORT_URL_SHLINK_WITH_TITLE,
], 'valid_api_key'];
yield [['searchTerm' => 'example.com'], [ yield [['searchTerm' => 'example.com'], [
self::SHORT_URL_CUSTOM_DOMAIN, self::SHORT_URL_CUSTOM_DOMAIN,
], 'valid_api_key']; ], 'valid_api_key'];
yield [[], [ yield [[], [
self::SHORT_URL_SHLINK, self::SHORT_URL_SHLINK_WITH_TITLE,
self::SHORT_URL_META, self::SHORT_URL_META,
self::SHORT_URL_CUSTOM_SLUG, self::SHORT_URL_CUSTOM_SLUG,
], 'author_api_key']; ], 'author_api_key'];

View file

@ -34,7 +34,7 @@ class ShortUrlsFixture extends AbstractFixture implements DependentFixtureInterf
'apiKey' => $authorApiKey, 'apiKey' => $authorApiKey,
'longUrl' => 'https://shlink.io', 'longUrl' => 'https://shlink.io',
'tags' => ['foo'], 'tags' => ['foo'],
'title' => 'Shlink', 'title' => 'My cool title',
]), $relationResolver), ]), $relationResolver),
'2018-05-01', '2018-05-01',
); );