3 namespace Tests\Wallabag\ImportBundle\Import
;
5 use M6Web\Component\RedisMock\RedisMockFactory
;
6 use Monolog\Handler\TestHandler
;
8 use Simpleue\Queue\RedisQueue
;
9 use Wallabag\CoreBundle\Entity\Entry
;
10 use Wallabag\ImportBundle\Import\ChromeImport
;
11 use Wallabag\ImportBundle\Redis\Producer
;
12 use Wallabag\UserBundle\Entity\User
;
14 class ChromeImportTest
extends \PHPUnit_Framework_TestCase
18 protected $logHandler;
19 protected $contentProxy;
20 protected $tagsAssigner;
22 public function testInit()
24 $chromeImport = $this->getChromeImport();
26 $this->assertSame('Chrome', $chromeImport->getName());
27 $this->assertNotEmpty($chromeImport->getUrl());
28 $this->assertSame('import.chrome.description', $chromeImport->getDescription());
31 public function testImport()
33 $chromeImport = $this->getChromeImport(false, 1);
34 $chromeImport->setFilepath(__DIR__
. '/../fixtures/chrome-bookmarks');
36 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
37 ->disableOriginalConstructor()
40 $entryRepo->expects($this->exactly(1))
41 ->method('findByUrlAndUserId')
45 ->expects($this->any())
46 ->method('getRepository')
47 ->willReturn($entryRepo);
49 $entry = $this->getMockBuilder('Wallabag\CoreBundle\Entity\Entry')
50 ->disableOriginalConstructor()
54 ->expects($this->exactly(1))
55 ->method('updateEntry')
58 $res = $chromeImport->import();
60 $this->assertTrue($res);
61 $this->assertSame(['skipped' => 0, 'imported' => 1, 'queued' => 0], $chromeImport->getSummary());
64 public function testImportAndMarkAllAsRead()
66 $chromeImport = $this->getChromeImport(false, 1);
67 $chromeImport->setFilepath(__DIR__
. '/../fixtures/chrome-bookmarks');
69 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
70 ->disableOriginalConstructor()
73 $entryRepo->expects($this->exactly(1))
74 ->method('findByUrlAndUserId')
75 ->will($this->onConsecutiveCalls(false, true));
78 ->expects($this->any())
79 ->method('getRepository')
80 ->willReturn($entryRepo);
83 ->expects($this->exactly(1))
84 ->method('updateEntry')
85 ->willReturn(new Entry($this->user
));
87 // check that every entry persisted are archived
89 ->expects($this->any())
91 ->with($this->callback(function ($persistedEntry) {
92 return $persistedEntry->isArchived();
95 $res = $chromeImport->setMarkAsRead(true)->import();
97 $this->assertTrue($res);
99 $this->assertSame(['skipped' => 0, 'imported' => 1, 'queued' => 0], $chromeImport->getSummary());
102 public function testImportWithRabbit()
104 $chromeImport = $this->getChromeImport();
105 $chromeImport->setFilepath(__DIR__
. '/../fixtures/chrome-bookmarks');
107 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
108 ->disableOriginalConstructor()
111 $entryRepo->expects($this->never())
112 ->method('findByUrlAndUserId');
115 ->expects($this->never())
116 ->method('getRepository');
118 $entry = $this->getMockBuilder('Wallabag\CoreBundle\Entity\Entry')
119 ->disableOriginalConstructor()
123 ->expects($this->never())
124 ->method('updateEntry');
126 $producer = $this->getMockBuilder('OldSound\RabbitMqBundle\RabbitMq\Producer')
127 ->disableOriginalConstructor()
131 ->expects($this->exactly(1))
134 $chromeImport->setProducer($producer);
136 $res = $chromeImport->setMarkAsRead(true)->import();
138 $this->assertTrue($res);
139 $this->assertSame(['skipped' => 0, 'imported' => 0, 'queued' => 1], $chromeImport->getSummary());
142 public function testImportWithRedis()
144 $chromeImport = $this->getChromeImport();
145 $chromeImport->setFilepath(__DIR__
. '/../fixtures/chrome-bookmarks');
147 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
148 ->disableOriginalConstructor()
151 $entryRepo->expects($this->never())
152 ->method('findByUrlAndUserId');
155 ->expects($this->never())
156 ->method('getRepository');
158 $entry = $this->getMockBuilder('Wallabag\CoreBundle\Entity\Entry')
159 ->disableOriginalConstructor()
163 ->expects($this->never())
164 ->method('updateEntry');
166 $factory = new RedisMockFactory();
167 $redisMock = $factory->getAdapter('Predis\Client', true);
169 $queue = new RedisQueue($redisMock, 'chrome');
170 $producer = new Producer($queue);
172 $chromeImport->setProducer($producer);
174 $res = $chromeImport->setMarkAsRead(true)->import();
176 $this->assertTrue($res);
177 $this->assertSame(['skipped' => 0, 'imported' => 0, 'queued' => 1], $chromeImport->getSummary());
179 $this->assertNotEmpty($redisMock->lpop('chrome'));
182 public function testImportBadFile()
184 $chromeImport = $this->getChromeImport();
185 $chromeImport->setFilepath(__DIR__
. '/../fixtures/wallabag-v1.jsonx');
187 $res = $chromeImport->import();
189 $this->assertFalse($res);
191 $records = $this->logHandler
->getRecords();
192 $this->assertContains('Wallabag Browser Import: unable to read file', $records[0]['message']);
193 $this->assertSame('ERROR', $records[0]['level_name']);
196 public function testImportUserNotDefined()
198 $chromeImport = $this->getChromeImport(true);
199 $chromeImport->setFilepath(__DIR__
. '/../fixtures/chrome-bookmarks');
201 $res = $chromeImport->import();
203 $this->assertFalse($res);
205 $records = $this->logHandler
->getRecords();
206 $this->assertContains('Wallabag Browser Import: user is not defined', $records[0]['message']);
207 $this->assertSame('ERROR', $records[0]['level_name']);
210 private function getChromeImport($unsetUser = false, $dispatched = 0)
212 $this->user
= new User();
214 $this->em
= $this->getMockBuilder('Doctrine\ORM\EntityManager')
215 ->disableOriginalConstructor()
218 $this->contentProxy
= $this->getMockBuilder('Wallabag\CoreBundle\Helper\ContentProxy')
219 ->disableOriginalConstructor()
222 $this->tagsAssigner
= $this->getMockBuilder('Wallabag\CoreBundle\Helper\TagsAssigner')
223 ->disableOriginalConstructor()
226 $dispatcher = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventDispatcher')
227 ->disableOriginalConstructor()
231 ->expects($this->exactly($dispatched))
232 ->method('dispatch');
234 $wallabag = new ChromeImport($this->em
, $this->contentProxy
, $this->tagsAssigner
, $dispatcher);
236 $this->logHandler
= new TestHandler();
237 $logger = new Logger('test', [$this->logHandler
]);
238 $wallabag->setLogger($logger);
240 if (false === $unsetUser) {
241 $wallabag->setUser($this->user
);