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
export APP_ENV=test
export DB_DRIVER=mysql
export DB_DRIVER=postgres
export TEST_ENV=api
# 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(
$qb->expr()->like('s.longUrl', ':searchPattern'),
$qb->expr()->like('s.shortCode', ':searchPattern'),
$qb->expr()->like('s.title', ':searchPattern'),
$qb->expr()->like('t.name', ':searchPattern'),
$qb->expr()->like('d.authority', ':searchPattern'),
))

View file

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

View file

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