mirror of
https://github.com/shlinkio/shlink.git
synced 2024-11-27 08:18:24 +03:00
Added tests for TagRepository::findTagsWithInfo
This commit is contained in:
parent
06c59fe2dd
commit
bdd14427d9
2 changed files with 58 additions and 1 deletions
|
@ -35,7 +35,7 @@ class TagRepository extends EntityRepository implements TagRepositoryInterface
|
||||||
FROM Shlinkio\Shlink\Core\Entity\Tag t
|
FROM Shlinkio\Shlink\Core\Entity\Tag t
|
||||||
LEFT JOIN t.shortUrls s
|
LEFT JOIN t.shortUrls s
|
||||||
LEFT JOIN s.visits v
|
LEFT JOIN s.visits v
|
||||||
GROUP BY tag
|
GROUP BY t
|
||||||
ORDER BY t.name ASC
|
ORDER BY t.name ASC
|
||||||
DQL;
|
DQL;
|
||||||
$query = $this->getEntityManager()->createQuery($dql);
|
$query = $this->getEntityManager()->createQuery($dql);
|
||||||
|
|
|
@ -4,13 +4,21 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace ShlinkioTest\Shlink\Core\Repository;
|
namespace ShlinkioTest\Shlink\Core\Repository;
|
||||||
|
|
||||||
|
use Doctrine\Common\Collections\ArrayCollection;
|
||||||
|
use Shlinkio\Shlink\Core\Entity\ShortUrl;
|
||||||
use Shlinkio\Shlink\Core\Entity\Tag;
|
use Shlinkio\Shlink\Core\Entity\Tag;
|
||||||
|
use Shlinkio\Shlink\Core\Entity\Visit;
|
||||||
|
use Shlinkio\Shlink\Core\Model\Visitor;
|
||||||
use Shlinkio\Shlink\Core\Repository\TagRepository;
|
use Shlinkio\Shlink\Core\Repository\TagRepository;
|
||||||
use Shlinkio\Shlink\TestUtils\DbTest\DatabaseTestCase;
|
use Shlinkio\Shlink\TestUtils\DbTest\DatabaseTestCase;
|
||||||
|
|
||||||
|
use function array_chunk;
|
||||||
|
|
||||||
class TagRepositoryTest extends DatabaseTestCase
|
class TagRepositoryTest extends DatabaseTestCase
|
||||||
{
|
{
|
||||||
protected const ENTITIES_TO_EMPTY = [
|
protected const ENTITIES_TO_EMPTY = [
|
||||||
|
Visit::class,
|
||||||
|
ShortUrl::class,
|
||||||
Tag::class,
|
Tag::class,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -40,4 +48,53 @@ class TagRepositoryTest extends DatabaseTestCase
|
||||||
|
|
||||||
$this->assertEquals(2, $this->repo->deleteByName($toDelete));
|
$this->assertEquals(2, $this->repo->deleteByName($toDelete));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @test */
|
||||||
|
public function properTagsInfoIsReturned(): void
|
||||||
|
{
|
||||||
|
$names = ['foo', 'bar', 'baz', 'another'];
|
||||||
|
$tags = [];
|
||||||
|
foreach ($names as $name) {
|
||||||
|
$tag = new Tag($name);
|
||||||
|
$tags[] = $tag;
|
||||||
|
$this->getEntityManager()->persist($tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
[$firstUrlTags] = array_chunk($tags, 3);
|
||||||
|
$secondUrlTags = [$tags[0]];
|
||||||
|
|
||||||
|
$shortUrl = new ShortUrl('');
|
||||||
|
$shortUrl->setTags(new ArrayCollection($firstUrlTags));
|
||||||
|
$this->getEntityManager()->persist($shortUrl);
|
||||||
|
$this->getEntityManager()->persist(new Visit($shortUrl, Visitor::emptyInstance()));
|
||||||
|
$this->getEntityManager()->persist(new Visit($shortUrl, Visitor::emptyInstance()));
|
||||||
|
$this->getEntityManager()->persist(new Visit($shortUrl, Visitor::emptyInstance()));
|
||||||
|
|
||||||
|
$shortUrl2 = new ShortUrl('');
|
||||||
|
$shortUrl2->setTags(new ArrayCollection($secondUrlTags));
|
||||||
|
$this->getEntityManager()->persist($shortUrl2);
|
||||||
|
$this->getEntityManager()->persist(new Visit($shortUrl2, Visitor::emptyInstance()));
|
||||||
|
|
||||||
|
$this->getEntityManager()->flush();
|
||||||
|
|
||||||
|
$result = $this->repo->findTagsWithInfo();
|
||||||
|
|
||||||
|
$this->assertCount(4, $result);
|
||||||
|
$this->assertEquals(
|
||||||
|
['tag' => $tags[3], 'shortUrlsCount' => 0, 'visitsCount' => 0],
|
||||||
|
$result[0]->jsonSerialize(),
|
||||||
|
);
|
||||||
|
$this->assertEquals(
|
||||||
|
['tag' => $tags[1], 'shortUrlsCount' => 1, 'visitsCount' => 3],
|
||||||
|
$result[1]->jsonSerialize(),
|
||||||
|
);
|
||||||
|
$this->assertEquals(
|
||||||
|
['tag' => $tags[2], 'shortUrlsCount' => 1, 'visitsCount' => 3],
|
||||||
|
$result[2]->jsonSerialize(),
|
||||||
|
);
|
||||||
|
$this->assertEquals(
|
||||||
|
['tag' => $tags[0], 'shortUrlsCount' => 2, 'visitsCount' => 4],
|
||||||
|
$result[3]->jsonSerialize(),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue