mirror of
https://github.com/wallabag/wallabag.git
synced 2024-10-31 22:28:54 +00:00
Move Tags assigner to a separate file
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
parent
35941d57ee
commit
6bc6fb1f60
20 changed files with 274 additions and 200 deletions
|
@ -318,7 +318,7 @@ class EntryRestController extends WallabagRestController
|
|||
|
||||
$tags = $request->request->get('tags', '');
|
||||
if (!empty($tags)) {
|
||||
$this->get('wallabag_core.content_proxy')->assignTagsToEntry($entry, $tags);
|
||||
$this->get('wallabag_core.tags_assigner')->assignTagsToEntry($entry, $tags);
|
||||
}
|
||||
|
||||
if (!is_null($isStarred)) {
|
||||
|
@ -379,7 +379,7 @@ class EntryRestController extends WallabagRestController
|
|||
|
||||
$tags = $request->request->get('tags', '');
|
||||
if (!empty($tags)) {
|
||||
$this->get('wallabag_core.content_proxy')->assignTagsToEntry($entry, $tags);
|
||||
$this->get('wallabag_core.tags_assigner')->assignTagsToEntry($entry, $tags);
|
||||
}
|
||||
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
|
@ -497,7 +497,7 @@ class EntryRestController extends WallabagRestController
|
|||
|
||||
$tags = $request->request->get('tags', '');
|
||||
if (!empty($tags)) {
|
||||
$this->get('wallabag_core.content_proxy')->assignTagsToEntry($entry, $tags);
|
||||
$this->get('wallabag_core.tags_assigner')->assignTagsToEntry($entry, $tags);
|
||||
}
|
||||
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
|
@ -626,7 +626,7 @@ class EntryRestController extends WallabagRestController
|
|||
$tags = $element->tags;
|
||||
|
||||
if (false !== $entry && !(empty($tags))) {
|
||||
$this->get('wallabag_core.content_proxy')->assignTagsToEntry($entry, $tags);
|
||||
$this->get('wallabag_core.tags_assigner')->assignTagsToEntry($entry, $tags);
|
||||
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$em->persist($entry);
|
||||
|
|
|
@ -28,7 +28,7 @@ class TagController extends Controller
|
|||
$form->handleRequest($request);
|
||||
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
$this->get('wallabag_core.content_proxy')->assignTagsToEntry(
|
||||
$this->get('wallabag_core.tags_assigner')->assignTagsToEntry(
|
||||
$entry,
|
||||
$form->get('label')->getData()
|
||||
);
|
||||
|
|
|
@ -4,10 +4,9 @@ namespace Wallabag\CoreBundle\Helper;
|
|||
|
||||
use Graby\Graby;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Symfony\Component\EventDispatcher\EventDispatcher;
|
||||
use Wallabag\CoreBundle\Entity\Entry;
|
||||
use Wallabag\CoreBundle\Entity\Tag;
|
||||
use Wallabag\CoreBundle\Tools\Utils;
|
||||
use Wallabag\CoreBundle\Repository\TagRepository;
|
||||
use Symfony\Component\HttpFoundation\File\MimeType\MimeTypeExtensionGuesser;
|
||||
|
||||
/**
|
||||
|
@ -19,16 +18,15 @@ class ContentProxy
|
|||
protected $graby;
|
||||
protected $tagger;
|
||||
protected $logger;
|
||||
protected $tagRepository;
|
||||
protected $mimeGuesser;
|
||||
protected $fetchingErrorMessage;
|
||||
protected $eventDispatcher;
|
||||
|
||||
public function __construct(Graby $graby, RuleBasedTagger $tagger, TagRepository $tagRepository, LoggerInterface $logger, $fetchingErrorMessage)
|
||||
public function __construct(Graby $graby, RuleBasedTagger $tagger, LoggerInterface $logger, $fetchingErrorMessage)
|
||||
{
|
||||
$this->graby = $graby;
|
||||
$this->tagger = $tagger;
|
||||
$this->logger = $logger;
|
||||
$this->tagRepository = $tagRepository;
|
||||
$this->mimeGuesser = new MimeTypeExtensionGuesser();
|
||||
$this->fetchingErrorMessage = $fetchingErrorMessage;
|
||||
}
|
||||
|
@ -121,54 +119,6 @@ class ContentProxy
|
|||
return $entry;
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign some tags to an entry.
|
||||
*
|
||||
* @param Entry $entry
|
||||
* @param array|string $tags An array of tag or a string coma separated of tag
|
||||
* @param array $entitiesReady Entities from the EntityManager which are persisted but not yet flushed
|
||||
* It is mostly to fix duplicate tag on import @see http://stackoverflow.com/a/7879164/569101
|
||||
*/
|
||||
public function assignTagsToEntry(Entry $entry, $tags, array $entitiesReady = [])
|
||||
{
|
||||
if (!is_array($tags)) {
|
||||
$tags = explode(',', $tags);
|
||||
}
|
||||
|
||||
// keeps only Tag entity from the "not yet flushed entities"
|
||||
$tagsNotYetFlushed = [];
|
||||
foreach ($entitiesReady as $entity) {
|
||||
if ($entity instanceof Tag) {
|
||||
$tagsNotYetFlushed[$entity->getLabel()] = $entity;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($tags as $label) {
|
||||
$label = trim($label);
|
||||
|
||||
// avoid empty tag
|
||||
if (0 === strlen($label)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isset($tagsNotYetFlushed[$label])) {
|
||||
$tagEntity = $tagsNotYetFlushed[$label];
|
||||
} else {
|
||||
$tagEntity = $this->tagRepository->findOneByLabel($label);
|
||||
|
||||
if (is_null($tagEntity)) {
|
||||
$tagEntity = new Tag();
|
||||
$tagEntity->setLabel($label);
|
||||
}
|
||||
}
|
||||
|
||||
// only add the tag on the entry if the relation doesn't exist
|
||||
if (false === $entry->getTags()->contains($tagEntity)) {
|
||||
$entry->addTag($tagEntity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate that the given content as enough value to be used
|
||||
* instead of fetch the content from the url.
|
||||
|
|
76
src/Wallabag/CoreBundle/Helper/TagsAssigner.php
Normal file
76
src/Wallabag/CoreBundle/Helper/TagsAssigner.php
Normal file
|
@ -0,0 +1,76 @@
|
|||
<?php
|
||||
|
||||
namespace Wallabag\CoreBundle\Helper;
|
||||
|
||||
use Wallabag\CoreBundle\Entity\Entry;
|
||||
use Wallabag\CoreBundle\Entity\Tag;
|
||||
use Wallabag\CoreBundle\Repository\TagRepository;
|
||||
|
||||
class TagsAssigner
|
||||
{
|
||||
|
||||
/**
|
||||
* @var TagRepository $tagRepository
|
||||
*/
|
||||
protected $tagRepository;
|
||||
|
||||
public function __construct(TagRepository $tagRepository)
|
||||
{
|
||||
$this->tagRepository = $tagRepository;
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign some tags to an entry.
|
||||
*
|
||||
* @param Entry $entry
|
||||
* @param array|string $tags An array of tag or a string coma separated of tag
|
||||
* @param array $entitiesReady Entities from the EntityManager which are persisted but not yet flushed
|
||||
* It is mostly to fix duplicate tag on import @see http://stackoverflow.com/a/7879164/569101
|
||||
*
|
||||
* @return Tag[]
|
||||
*/
|
||||
public function assignTagsToEntry(Entry $entry, $tags, array $entitiesReady = [])
|
||||
{
|
||||
$tagsEntities = [];
|
||||
|
||||
if (!is_array($tags)) {
|
||||
$tags = explode(',', $tags);
|
||||
}
|
||||
|
||||
// keeps only Tag entity from the "not yet flushed entities"
|
||||
$tagsNotYetFlushed = [];
|
||||
foreach ($entitiesReady as $entity) {
|
||||
if ($entity instanceof Tag) {
|
||||
$tagsNotYetFlushed[$entity->getLabel()] = $entity;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($tags as $label) {
|
||||
$label = trim($label);
|
||||
|
||||
// avoid empty tag
|
||||
if (0 === strlen($label)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isset($tagsNotYetFlushed[$label])) {
|
||||
$tagEntity = $tagsNotYetFlushed[$label];
|
||||
} else {
|
||||
$tagEntity = $this->tagRepository->findOneByLabel($label);
|
||||
|
||||
if (null === $tagEntity) {
|
||||
$tagEntity = new Tag();
|
||||
$tagEntity->setLabel($label);
|
||||
}
|
||||
}
|
||||
|
||||
// only add the tag on the entry if the relation doesn't exist
|
||||
if (false === $entry->getTags()->contains($tagEntity)) {
|
||||
$entry->addTag($tagEntity);
|
||||
$tagsEntities[] = $tagEntity;
|
||||
}
|
||||
}
|
||||
|
||||
return $tagsEntities;
|
||||
}
|
||||
}
|
|
@ -89,10 +89,14 @@ services:
|
|||
arguments:
|
||||
- "@wallabag_core.graby"
|
||||
- "@wallabag_core.rule_based_tagger"
|
||||
- "@wallabag_core.tag_repository"
|
||||
- "@logger"
|
||||
- '%wallabag_core.fetching_error_message%'
|
||||
|
||||
wallabag_core.tags_assigner:
|
||||
class: Wallabag\CoreBundle\Helper\TagsAssigner
|
||||
arguments:
|
||||
- "@wallabag_core.tag_repository"
|
||||
|
||||
wallabag_core.rule_based_tagger:
|
||||
class: Wallabag\CoreBundle\Helper\RuleBasedTagger
|
||||
arguments:
|
||||
|
|
|
@ -8,6 +8,7 @@ use Doctrine\ORM\EntityManager;
|
|||
use Wallabag\CoreBundle\Helper\ContentProxy;
|
||||
use Wallabag\CoreBundle\Entity\Entry;
|
||||
use Wallabag\CoreBundle\Entity\Tag;
|
||||
use Wallabag\CoreBundle\Helper\TagsAssigner;
|
||||
use Wallabag\UserBundle\Entity\User;
|
||||
use OldSound\RabbitMqBundle\RabbitMq\ProducerInterface;
|
||||
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||
|
@ -18,6 +19,7 @@ abstract class AbstractImport implements ImportInterface
|
|||
protected $em;
|
||||
protected $logger;
|
||||
protected $contentProxy;
|
||||
protected $tagsAssigner;
|
||||
protected $eventDispatcher;
|
||||
protected $producer;
|
||||
protected $user;
|
||||
|
@ -26,11 +28,12 @@ abstract class AbstractImport implements ImportInterface
|
|||
protected $importedEntries = 0;
|
||||
protected $queuedEntries = 0;
|
||||
|
||||
public function __construct(EntityManager $em, ContentProxy $contentProxy, EventDispatcherInterface $eventDispatcher)
|
||||
public function __construct(EntityManager $em, ContentProxy $contentProxy, TagsAssigner $tagsAssigner, EventDispatcherInterface $eventDispatcher)
|
||||
{
|
||||
$this->em = $em;
|
||||
$this->logger = new NullLogger();
|
||||
$this->contentProxy = $contentProxy;
|
||||
$this->tagsAssigner = $tagsAssigner;
|
||||
$this->eventDispatcher = $eventDispatcher;
|
||||
}
|
||||
|
||||
|
|
|
@ -205,7 +205,7 @@ abstract class BrowserImport extends AbstractImport
|
|||
$entry = $this->fetchContent($entry, $data['url'], $data);
|
||||
|
||||
if (array_key_exists('tags', $data)) {
|
||||
$this->contentProxy->assignTagsToEntry(
|
||||
$this->tagsAssigner->assignTagsToEntry(
|
||||
$entry,
|
||||
$data['tags']
|
||||
);
|
||||
|
|
|
@ -112,7 +112,7 @@ class PinboardImport extends AbstractImport
|
|||
$entry = $this->fetchContent($entry, $data['url'], $data);
|
||||
|
||||
if (!empty($data['tags'])) {
|
||||
$this->contentProxy->assignTagsToEntry(
|
||||
$this->tagsAssigner->assignTagsToEntry(
|
||||
$entry,
|
||||
$data['tags'],
|
||||
$this->em->getUnitOfWork()->getScheduledEntityInsertions()
|
||||
|
|
|
@ -216,7 +216,7 @@ class PocketImport extends AbstractImport
|
|||
}
|
||||
|
||||
if (isset($importedEntry['tags']) && !empty($importedEntry['tags'])) {
|
||||
$this->contentProxy->assignTagsToEntry(
|
||||
$this->tagsAssigner->assignTagsToEntry(
|
||||
$entry,
|
||||
array_keys($importedEntry['tags']),
|
||||
$this->em->getUnitOfWork()->getScheduledEntityInsertions()
|
||||
|
|
|
@ -111,7 +111,7 @@ abstract class WallabagImport extends AbstractImport
|
|||
$entry = $this->fetchContent($entry, $data['url'], $data);
|
||||
|
||||
if (array_key_exists('tags', $data)) {
|
||||
$this->contentProxy->assignTagsToEntry(
|
||||
$this->tagsAssigner->assignTagsToEntry(
|
||||
$entry,
|
||||
$data['tags'],
|
||||
$this->em->getUnitOfWork()->getScheduledEntityInsertions()
|
||||
|
|
|
@ -20,6 +20,7 @@ services:
|
|||
arguments:
|
||||
- "@doctrine.orm.entity_manager"
|
||||
- "@wallabag_core.content_proxy"
|
||||
- "@wallabag_core.tags_assigner"
|
||||
- "@event_dispatcher"
|
||||
calls:
|
||||
- [ setClient, [ "@wallabag_import.pocket.client" ] ]
|
||||
|
@ -32,6 +33,7 @@ services:
|
|||
arguments:
|
||||
- "@doctrine.orm.entity_manager"
|
||||
- "@wallabag_core.content_proxy"
|
||||
- "@wallabag_core.tags_assigner"
|
||||
- "@event_dispatcher"
|
||||
calls:
|
||||
- [ setLogger, [ "@logger" ]]
|
||||
|
@ -43,6 +45,7 @@ services:
|
|||
arguments:
|
||||
- "@doctrine.orm.entity_manager"
|
||||
- "@wallabag_core.content_proxy"
|
||||
- "@wallabag_core.tags_assigner"
|
||||
- "@event_dispatcher"
|
||||
calls:
|
||||
- [ setLogger, [ "@logger" ]]
|
||||
|
@ -54,6 +57,7 @@ services:
|
|||
arguments:
|
||||
- "@doctrine.orm.entity_manager"
|
||||
- "@wallabag_core.content_proxy"
|
||||
- "@wallabag_core.tags_assigner"
|
||||
- "@event_dispatcher"
|
||||
calls:
|
||||
- [ setLogger, [ "@logger" ]]
|
||||
|
@ -65,6 +69,7 @@ services:
|
|||
arguments:
|
||||
- "@doctrine.orm.entity_manager"
|
||||
- "@wallabag_core.content_proxy"
|
||||
- "@wallabag_core.tags_assigner"
|
||||
- "@event_dispatcher"
|
||||
calls:
|
||||
- [ setLogger, [ "@logger" ]]
|
||||
|
@ -76,6 +81,7 @@ services:
|
|||
arguments:
|
||||
- "@doctrine.orm.entity_manager"
|
||||
- "@wallabag_core.content_proxy"
|
||||
- "@wallabag_core.tags_assigner"
|
||||
- "@event_dispatcher"
|
||||
calls:
|
||||
- [ setLogger, [ "@logger" ]]
|
||||
|
@ -87,6 +93,7 @@ services:
|
|||
arguments:
|
||||
- "@doctrine.orm.entity_manager"
|
||||
- "@wallabag_core.content_proxy"
|
||||
- "@wallabag_core.tags_assigner"
|
||||
- "@event_dispatcher"
|
||||
calls:
|
||||
- [ setLogger, [ "@logger" ]]
|
||||
|
@ -97,6 +104,7 @@ services:
|
|||
arguments:
|
||||
- "@doctrine.orm.entity_manager"
|
||||
- "@wallabag_core.content_proxy"
|
||||
- "@wallabag_core.tags_assigner"
|
||||
- "@event_dispatcher"
|
||||
calls:
|
||||
- [ setLogger, [ "@logger" ]]
|
||||
|
|
|
@ -7,6 +7,8 @@ use Wallabag\CoreBundle\Helper\ContentProxy;
|
|||
use Wallabag\CoreBundle\Entity\Entry;
|
||||
use Wallabag\CoreBundle\Entity\Tag;
|
||||
use Wallabag\UserBundle\Entity\User;
|
||||
use Wallabag\CoreBundle\Repository\TagRepository;
|
||||
use Wallabag\CoreBundle\Helper\RuleBasedTagger;
|
||||
|
||||
class ContentProxyTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
|
@ -33,7 +35,7 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
|
|||
'language' => '',
|
||||
]);
|
||||
|
||||
$proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger(), $this->fetchingErrorMessage);
|
||||
$proxy = new ContentProxy($graby, $tagger, $this->getLogger(), $this->fetchingErrorMessage);
|
||||
$entry = $proxy->updateEntry(new Entry(new User()), 'http://user@:80');
|
||||
|
||||
$this->assertEquals('http://user@:80', $entry->getUrl());
|
||||
|
@ -67,7 +69,7 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
|
|||
'language' => '',
|
||||
]);
|
||||
|
||||
$proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger(), $this->fetchingErrorMessage);
|
||||
$proxy = new ContentProxy($graby, $tagger, $this->getLogger(), $this->fetchingErrorMessage);
|
||||
$entry = $proxy->updateEntry(new Entry(new User()), 'http://0.0.0.0');
|
||||
|
||||
$this->assertEquals('http://0.0.0.0', $entry->getUrl());
|
||||
|
@ -106,7 +108,7 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
|
|||
],
|
||||
]);
|
||||
|
||||
$proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger(), $this->fetchingErrorMessage);
|
||||
$proxy = new ContentProxy($graby, $tagger, $this->getLogger(), $this->fetchingErrorMessage);
|
||||
$entry = $proxy->updateEntry(new Entry(new User()), 'http://domain.io');
|
||||
|
||||
$this->assertEquals('http://domain.io', $entry->getUrl());
|
||||
|
@ -147,7 +149,7 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
|
|||
],
|
||||
]);
|
||||
|
||||
$proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger(), $this->fetchingErrorMessage);
|
||||
$proxy = new ContentProxy($graby, $tagger, $this->getLogger(), $this->fetchingErrorMessage);
|
||||
$entry = $proxy->updateEntry(new Entry(new User()), 'http://0.0.0.0');
|
||||
|
||||
$this->assertEquals('http://1.1.1.1', $entry->getUrl());
|
||||
|
@ -188,7 +190,7 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
|
|||
],
|
||||
]);
|
||||
|
||||
$proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger(), $this->fetchingErrorMessage);
|
||||
$proxy = new ContentProxy($graby, $tagger, $this->getLogger(), $this->fetchingErrorMessage);
|
||||
$entry = $proxy->updateEntry(new Entry(new User()), 'http://0.0.0.0');
|
||||
|
||||
$this->assertEquals('http://1.1.1.1', $entry->getUrl());
|
||||
|
@ -210,7 +212,7 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
$graby = $this->getMockBuilder('Graby\Graby')->getMock();
|
||||
|
||||
$proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger(), $this->fetchingErrorMessage);
|
||||
$proxy = new ContentProxy($graby, $tagger, $this->getLogger(), $this->fetchingErrorMessage);
|
||||
$entry = $proxy->updateEntry(new Entry(new User()), 'http://0.0.0.0', [
|
||||
'html' => str_repeat('this is my content', 325),
|
||||
'title' => 'this is my title',
|
||||
|
@ -239,8 +241,7 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
|
|||
->method('tag')
|
||||
->will($this->throwException(new \Exception()));
|
||||
|
||||
$tagRepo = $this->getTagRepositoryMock();
|
||||
$proxy = new ContentProxy($graby, $tagger, $tagRepo, $this->getLogger(), $this->fetchingErrorMessage);
|
||||
$proxy = new ContentProxy($graby, $tagger, $this->getLogger(), $this->fetchingErrorMessage);
|
||||
|
||||
$entry = $proxy->updateEntry(new Entry(new User()), 'http://0.0.0.0', [
|
||||
'html' => str_repeat('this is my content', 325),
|
||||
|
@ -253,134 +254,14 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
|
|||
$this->assertCount(0, $entry->getTags());
|
||||
}
|
||||
|
||||
public function testAssignTagsWithArrayAndExtraSpaces()
|
||||
{
|
||||
$graby = $this->getMockBuilder('Graby\Graby')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$tagRepo = $this->getTagRepositoryMock();
|
||||
$proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger(), $this->fetchingErrorMessage);
|
||||
|
||||
$entry = new Entry(new User());
|
||||
|
||||
$proxy->assignTagsToEntry($entry, [' tag1', 'tag2 ']);
|
||||
|
||||
$this->assertCount(2, $entry->getTags());
|
||||
$this->assertEquals('tag1', $entry->getTags()[0]->getLabel());
|
||||
$this->assertEquals('tag2', $entry->getTags()[1]->getLabel());
|
||||
}
|
||||
|
||||
public function testAssignTagsWithString()
|
||||
{
|
||||
$graby = $this->getMockBuilder('Graby\Graby')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$tagRepo = $this->getTagRepositoryMock();
|
||||
$proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger(), $this->fetchingErrorMessage);
|
||||
|
||||
$entry = new Entry(new User());
|
||||
|
||||
$proxy->assignTagsToEntry($entry, 'tag1, tag2');
|
||||
|
||||
$this->assertCount(2, $entry->getTags());
|
||||
$this->assertEquals('tag1', $entry->getTags()[0]->getLabel());
|
||||
$this->assertEquals('tag2', $entry->getTags()[1]->getLabel());
|
||||
}
|
||||
|
||||
public function testAssignTagsWithEmptyArray()
|
||||
{
|
||||
$graby = $this->getMockBuilder('Graby\Graby')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$tagRepo = $this->getTagRepositoryMock();
|
||||
$proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger(), $this->fetchingErrorMessage);
|
||||
|
||||
$entry = new Entry(new User());
|
||||
|
||||
$proxy->assignTagsToEntry($entry, []);
|
||||
|
||||
$this->assertCount(0, $entry->getTags());
|
||||
}
|
||||
|
||||
public function testAssignTagsWithEmptyString()
|
||||
{
|
||||
$graby = $this->getMockBuilder('Graby\Graby')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$tagRepo = $this->getTagRepositoryMock();
|
||||
$proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger(), $this->fetchingErrorMessage);
|
||||
|
||||
$entry = new Entry(new User());
|
||||
|
||||
$proxy->assignTagsToEntry($entry, '');
|
||||
|
||||
$this->assertCount(0, $entry->getTags());
|
||||
}
|
||||
|
||||
public function testAssignTagsAlreadyAssigned()
|
||||
{
|
||||
$graby = $this->getMockBuilder('Graby\Graby')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$tagRepo = $this->getTagRepositoryMock();
|
||||
$proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger(), $this->fetchingErrorMessage);
|
||||
|
||||
$tagEntity = new Tag();
|
||||
$tagEntity->setLabel('tag1');
|
||||
|
||||
$entry = new Entry(new User());
|
||||
$entry->addTag($tagEntity);
|
||||
|
||||
$proxy->assignTagsToEntry($entry, 'tag1, tag2');
|
||||
|
||||
$this->assertCount(2, $entry->getTags());
|
||||
$this->assertEquals('tag1', $entry->getTags()[0]->getLabel());
|
||||
$this->assertEquals('tag2', $entry->getTags()[1]->getLabel());
|
||||
}
|
||||
|
||||
public function testAssignTagsNotFlushed()
|
||||
{
|
||||
$graby = $this->getMockBuilder('Graby\Graby')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$tagRepo = $this->getTagRepositoryMock();
|
||||
$tagRepo->expects($this->never())
|
||||
->method('__call');
|
||||
|
||||
$proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger(), $this->fetchingErrorMessage);
|
||||
|
||||
$tagEntity = new Tag();
|
||||
$tagEntity->setLabel('tag1');
|
||||
|
||||
$entry = new Entry(new User());
|
||||
|
||||
$proxy->assignTagsToEntry($entry, 'tag1', [$tagEntity]);
|
||||
|
||||
$this->assertCount(1, $entry->getTags());
|
||||
$this->assertEquals('tag1', $entry->getTags()[0]->getLabel());
|
||||
}
|
||||
|
||||
private function getTaggerMock()
|
||||
{
|
||||
return $this->getMockBuilder('Wallabag\CoreBundle\Helper\RuleBasedTagger')
|
||||
return $this->getMockBuilder(RuleBasedTagger::class)
|
||||
->setMethods(['tag'])
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
}
|
||||
|
||||
private function getTagRepositoryMock()
|
||||
{
|
||||
return $this->getMockBuilder('Wallabag\CoreBundle\Repository\TagRepository')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
}
|
||||
|
||||
private function getLogger()
|
||||
{
|
||||
return new NullLogger();
|
||||
|
|
114
tests/Wallabag/CoreBundle/Helper/TagsAssignerTest.php
Normal file
114
tests/Wallabag/CoreBundle/Helper/TagsAssignerTest.php
Normal file
|
@ -0,0 +1,114 @@
|
|||
<?php
|
||||
|
||||
namespace Tests\Wallabag\CoreBundle\Helper;
|
||||
|
||||
use Psr\Log\NullLogger;
|
||||
use Wallabag\CoreBundle\Helper\ContentProxy;
|
||||
use Wallabag\CoreBundle\Entity\Entry;
|
||||
use Wallabag\CoreBundle\Entity\Tag;
|
||||
use Wallabag\CoreBundle\Helper\TagsAssigner;
|
||||
use Wallabag\UserBundle\Entity\User;
|
||||
use Wallabag\CoreBundle\Repository\TagRepository;
|
||||
use Wallabag\CoreBundle\Helper\RuleBasedTagger;
|
||||
|
||||
class TagsAssignerTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
|
||||
public function testAssignTagsWithArrayAndExtraSpaces()
|
||||
{
|
||||
|
||||
$tagRepo = $this->getTagRepositoryMock();
|
||||
$tagsAssigner = new TagsAssigner($tagRepo);
|
||||
|
||||
$entry = new Entry(new User());
|
||||
|
||||
$tagsAssigner->assignTagsToEntry($entry, [' tag1', 'tag2 ']);
|
||||
|
||||
$this->assertCount(2, $entry->getTags());
|
||||
$this->assertEquals('tag1', $entry->getTags()[0]->getLabel());
|
||||
$this->assertEquals('tag2', $entry->getTags()[1]->getLabel());
|
||||
}
|
||||
|
||||
public function testAssignTagsWithString()
|
||||
{
|
||||
$tagRepo = $this->getTagRepositoryMock();
|
||||
$tagsAssigner = new TagsAssigner($tagRepo);
|
||||
|
||||
$entry = new Entry(new User());
|
||||
|
||||
$tagsAssigner->assignTagsToEntry($entry, 'tag1, tag2');
|
||||
|
||||
$this->assertCount(2, $entry->getTags());
|
||||
$this->assertEquals('tag1', $entry->getTags()[0]->getLabel());
|
||||
$this->assertEquals('tag2', $entry->getTags()[1]->getLabel());
|
||||
}
|
||||
|
||||
public function testAssignTagsWithEmptyArray()
|
||||
{
|
||||
$tagRepo = $this->getTagRepositoryMock();
|
||||
$tagsAssigner = new TagsAssigner($tagRepo);
|
||||
|
||||
$entry = new Entry(new User());
|
||||
|
||||
$tagsAssigner->assignTagsToEntry($entry, []);
|
||||
|
||||
$this->assertCount(0, $entry->getTags());
|
||||
}
|
||||
|
||||
public function testAssignTagsWithEmptyString()
|
||||
{
|
||||
$tagRepo = $this->getTagRepositoryMock();
|
||||
$tagsAssigner = new TagsAssigner($tagRepo);
|
||||
|
||||
$entry = new Entry(new User());
|
||||
|
||||
$tagsAssigner->assignTagsToEntry($entry, '');
|
||||
|
||||
$this->assertCount(0, $entry->getTags());
|
||||
}
|
||||
|
||||
public function testAssignTagsAlreadyAssigned()
|
||||
{
|
||||
$tagRepo = $this->getTagRepositoryMock();
|
||||
$tagsAssigner = new TagsAssigner($tagRepo);
|
||||
|
||||
$tagEntity = new Tag();
|
||||
$tagEntity->setLabel('tag1');
|
||||
|
||||
$entry = new Entry(new User());
|
||||
$entry->addTag($tagEntity);
|
||||
|
||||
$tagsAssigner->assignTagsToEntry($entry, 'tag1, tag2');
|
||||
|
||||
$this->assertCount(2, $entry->getTags());
|
||||
$this->assertEquals('tag1', $entry->getTags()[0]->getLabel());
|
||||
$this->assertEquals('tag2', $entry->getTags()[1]->getLabel());
|
||||
}
|
||||
|
||||
public function testAssignTagsNotFlushed()
|
||||
{
|
||||
|
||||
$tagRepo = $this->getTagRepositoryMock();
|
||||
$tagRepo->expects($this->never())
|
||||
->method('__call');
|
||||
|
||||
$tagsAssigner = new TagsAssigner($tagRepo);
|
||||
|
||||
$tagEntity = new Tag();
|
||||
$tagEntity->setLabel('tag1');
|
||||
|
||||
$entry = new Entry(new User());
|
||||
|
||||
$tagsAssigner->assignTagsToEntry($entry, 'tag1', [$tagEntity]);
|
||||
|
||||
$this->assertCount(1, $entry->getTags());
|
||||
$this->assertEquals('tag1', $entry->getTags()[0]->getLabel());
|
||||
}
|
||||
|
||||
private function getTagRepositoryMock()
|
||||
{
|
||||
return $this->getMockBuilder(TagRepository::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
}
|
||||
}
|
|
@ -17,6 +17,7 @@ class ChromeImportTest extends \PHPUnit_Framework_TestCase
|
|||
protected $em;
|
||||
protected $logHandler;
|
||||
protected $contentProxy;
|
||||
protected $tagsAssigner;
|
||||
|
||||
private function getChromeImport($unsetUser = false, $dispatched = 0)
|
||||
{
|
||||
|
@ -30,6 +31,10 @@ class ChromeImportTest extends \PHPUnit_Framework_TestCase
|
|||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$this->tagsAssigner = $this->getMockBuilder('Wallabag\CoreBundle\Helper\TagsAssigner')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$dispatcher = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventDispatcher')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
@ -38,7 +43,7 @@ class ChromeImportTest extends \PHPUnit_Framework_TestCase
|
|||
->expects($this->exactly($dispatched))
|
||||
->method('dispatch');
|
||||
|
||||
$wallabag = new ChromeImport($this->em, $this->contentProxy, $dispatcher);
|
||||
$wallabag = new ChromeImport($this->em, $this->contentProxy, $this->tagsAssigner, $dispatcher);
|
||||
|
||||
$this->logHandler = new TestHandler();
|
||||
$logger = new Logger('test', [$this->logHandler]);
|
||||
|
|
|
@ -17,6 +17,7 @@ class FirefoxImportTest extends \PHPUnit_Framework_TestCase
|
|||
protected $em;
|
||||
protected $logHandler;
|
||||
protected $contentProxy;
|
||||
protected $tagsAssigner;
|
||||
|
||||
private function getFirefoxImport($unsetUser = false, $dispatched = 0)
|
||||
{
|
||||
|
@ -30,6 +31,10 @@ class FirefoxImportTest extends \PHPUnit_Framework_TestCase
|
|||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$this->tagsAssigner = $this->getMockBuilder('Wallabag\CoreBundle\Helper\TagsAssigner')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$dispatcher = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventDispatcher')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
@ -38,7 +43,7 @@ class FirefoxImportTest extends \PHPUnit_Framework_TestCase
|
|||
->expects($this->exactly($dispatched))
|
||||
->method('dispatch');
|
||||
|
||||
$wallabag = new FirefoxImport($this->em, $this->contentProxy, $dispatcher);
|
||||
$wallabag = new FirefoxImport($this->em, $this->contentProxy, $this->tagsAssigner, $dispatcher);
|
||||
|
||||
$this->logHandler = new TestHandler();
|
||||
$logger = new Logger('test', [$this->logHandler]);
|
||||
|
|
|
@ -17,6 +17,7 @@ class InstapaperImportTest extends \PHPUnit_Framework_TestCase
|
|||
protected $em;
|
||||
protected $logHandler;
|
||||
protected $contentProxy;
|
||||
protected $tagsAssigner;
|
||||
|
||||
private function getInstapaperImport($unsetUser = false, $dispatched = 0)
|
||||
{
|
||||
|
@ -30,6 +31,10 @@ class InstapaperImportTest extends \PHPUnit_Framework_TestCase
|
|||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$this->tagsAssigner = $this->getMockBuilder('Wallabag\CoreBundle\Helper\TagsAssigner')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$dispatcher = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventDispatcher')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
@ -38,7 +43,7 @@ class InstapaperImportTest extends \PHPUnit_Framework_TestCase
|
|||
->expects($this->exactly($dispatched))
|
||||
->method('dispatch');
|
||||
|
||||
$import = new InstapaperImport($this->em, $this->contentProxy, $dispatcher);
|
||||
$import = new InstapaperImport($this->em, $this->contentProxy, $this->tagsAssigner, $dispatcher);
|
||||
|
||||
$this->logHandler = new TestHandler();
|
||||
$logger = new Logger('test', [$this->logHandler]);
|
||||
|
|
|
@ -23,6 +23,8 @@ class PocketImportTest extends \PHPUnit_Framework_TestCase
|
|||
protected $em;
|
||||
protected $contentProxy;
|
||||
protected $logHandler;
|
||||
protected $tagsAssigner;
|
||||
protected $uow;
|
||||
|
||||
private function getPocketImport($consumerKey = 'ConsumerKey', $dispatched = 0)
|
||||
{
|
||||
|
@ -37,6 +39,10 @@ class PocketImportTest extends \PHPUnit_Framework_TestCase
|
|||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$this->tagsAssigner = $this->getMockBuilder('Wallabag\CoreBundle\Helper\TagsAssigner')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$this->em = $this->getMockBuilder('Doctrine\ORM\EntityManager')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
@ -63,7 +69,7 @@ class PocketImportTest extends \PHPUnit_Framework_TestCase
|
|||
->expects($this->exactly($dispatched))
|
||||
->method('dispatch');
|
||||
|
||||
$pocket = new PocketImport($this->em, $this->contentProxy, $dispatcher);
|
||||
$pocket = new PocketImport($this->em, $this->contentProxy, $this->tagsAssigner, $dispatcher);
|
||||
$pocket->setUser($this->user);
|
||||
|
||||
$this->logHandler = new TestHandler();
|
||||
|
|
|
@ -17,6 +17,7 @@ class ReadabilityImportTest extends \PHPUnit_Framework_TestCase
|
|||
protected $em;
|
||||
protected $logHandler;
|
||||
protected $contentProxy;
|
||||
protected $tagsAssigner;
|
||||
|
||||
private function getReadabilityImport($unsetUser = false, $dispatched = 0)
|
||||
{
|
||||
|
@ -30,6 +31,10 @@ class ReadabilityImportTest extends \PHPUnit_Framework_TestCase
|
|||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$this->tagsAssigner = $this->getMockBuilder('Wallabag\CoreBundle\Helper\TagsAssigner')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$dispatcher = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventDispatcher')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
@ -38,7 +43,7 @@ class ReadabilityImportTest extends \PHPUnit_Framework_TestCase
|
|||
->expects($this->exactly($dispatched))
|
||||
->method('dispatch');
|
||||
|
||||
$wallabag = new ReadabilityImport($this->em, $this->contentProxy, $dispatcher);
|
||||
$wallabag = new ReadabilityImport($this->em, $this->contentProxy, $this->tagsAssigner, $dispatcher);
|
||||
|
||||
$this->logHandler = new TestHandler();
|
||||
$logger = new Logger('test', [$this->logHandler]);
|
||||
|
|
|
@ -17,6 +17,8 @@ class WallabagV1ImportTest extends \PHPUnit_Framework_TestCase
|
|||
protected $em;
|
||||
protected $logHandler;
|
||||
protected $contentProxy;
|
||||
protected $tagsAssigner;
|
||||
protected $uow;
|
||||
|
||||
private function getWallabagV1Import($unsetUser = false, $dispatched = 0)
|
||||
{
|
||||
|
@ -44,6 +46,10 @@ class WallabagV1ImportTest extends \PHPUnit_Framework_TestCase
|
|||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$this->tagsAssigner = $this->getMockBuilder('Wallabag\CoreBundle\Helper\TagsAssigner')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$dispatcher = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventDispatcher')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
@ -52,7 +58,7 @@ class WallabagV1ImportTest extends \PHPUnit_Framework_TestCase
|
|||
->expects($this->exactly($dispatched))
|
||||
->method('dispatch');
|
||||
|
||||
$wallabag = new WallabagV1Import($this->em, $this->contentProxy, $dispatcher);
|
||||
$wallabag = new WallabagV1Import($this->em, $this->contentProxy, $this->tagsAssigner, $dispatcher);
|
||||
|
||||
$this->logHandler = new TestHandler();
|
||||
$logger = new Logger('test', [$this->logHandler]);
|
||||
|
|
|
@ -17,6 +17,8 @@ class WallabagV2ImportTest extends \PHPUnit_Framework_TestCase
|
|||
protected $em;
|
||||
protected $logHandler;
|
||||
protected $contentProxy;
|
||||
protected $tagsAssigner;
|
||||
protected $uow;
|
||||
|
||||
private function getWallabagV2Import($unsetUser = false, $dispatched = 0)
|
||||
{
|
||||
|
@ -44,6 +46,10 @@ class WallabagV2ImportTest extends \PHPUnit_Framework_TestCase
|
|||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$this->tagsAssigner = $this->getMockBuilder('Wallabag\CoreBundle\Helper\TagsAssigner')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$dispatcher = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventDispatcher')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
@ -52,7 +58,7 @@ class WallabagV2ImportTest extends \PHPUnit_Framework_TestCase
|
|||
->expects($this->exactly($dispatched))
|
||||
->method('dispatch');
|
||||
|
||||
$wallabag = new WallabagV2Import($this->em, $this->contentProxy, $dispatcher);
|
||||
$wallabag = new WallabagV2Import($this->em, $this->contentProxy, $this->tagsAssigner, $dispatcher);
|
||||
|
||||
$this->logHandler = new TestHandler();
|
||||
$logger = new Logger('test', [$this->logHandler]);
|
||||
|
|
Loading…
Reference in a new issue