3 namespace Tests\Wallabag\ImportBundle\Import
;
5 use Wallabag\ImportBundle\Import\ChromeImport
;
6 use Wallabag\UserBundle\Entity\User
;
7 use Wallabag\CoreBundle\Entity\Entry
;
8 use Wallabag\ImportBundle\Redis\Producer
;
10 use Monolog\Handler\TestHandler
;
11 use Simpleue\Queue\RedisQueue
;
12 use M6Web\Component\RedisMock\RedisMockFactory
;
14 class ChromeImportTest
extends \PHPUnit_Framework_TestCase
18 protected $logHandler;
19 protected $contentProxy;
21 private function getChromeImport($unsetUser = false)
23 $this->user
= new User();
25 $this->em
= $this->getMockBuilder('Doctrine\ORM\EntityManager')
26 ->disableOriginalConstructor()
29 $this->contentProxy
= $this->getMockBuilder('Wallabag\CoreBundle\Helper\ContentProxy')
30 ->disableOriginalConstructor()
33 $wallabag = new ChromeImport($this->em
, $this->contentProxy
);
35 $this->logHandler
= new TestHandler();
36 $logger = new Logger('test', [$this->logHandler
]);
37 $wallabag->setLogger($logger);
39 if (false === $unsetUser) {
40 $wallabag->setUser($this->user
);
46 public function testInit()
48 $chromeImport = $this->getChromeImport();
50 $this->assertEquals('Chrome', $chromeImport->getName());
51 $this->assertNotEmpty($chromeImport->getUrl());
52 $this->assertEquals('import.chrome.description', $chromeImport->getDescription());
55 public function testImport()
57 $chromeImport = $this->getChromeImport();
58 $chromeImport->setFilepath(__DIR__
.'/../fixtures/chrome-bookmarks');
60 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
61 ->disableOriginalConstructor()
64 $entryRepo->expects($this->exactly(1))
65 ->method('findByUrlAndUserId')
69 ->expects($this->any())
70 ->method('getRepository')
71 ->willReturn($entryRepo);
73 $entry = $this->getMockBuilder('Wallabag\CoreBundle\Entity\Entry')
74 ->disableOriginalConstructor()
78 ->expects($this->exactly(1))
79 ->method('updateEntry')
82 $res = $chromeImport->import();
84 $this->assertTrue($res);
85 $this->assertEquals(['skipped' => 0, 'imported' => 1, 'queued' => 0], $chromeImport->getSummary());
88 public function testImportAndMarkAllAsRead()
90 $chromeImport = $this->getChromeImport();
91 $chromeImport->setFilepath(__DIR__
.'/../fixtures/chrome-bookmarks');
93 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
94 ->disableOriginalConstructor()
97 $entryRepo->expects($this->exactly(1))
98 ->method('findByUrlAndUserId')
99 ->will($this->onConsecutiveCalls(false, true));
102 ->expects($this->any())
103 ->method('getRepository')
104 ->willReturn($entryRepo);
107 ->expects($this->exactly(1))
108 ->method('updateEntry')
109 ->willReturn(new Entry($this->user
));
111 // check that every entry persisted are archived
113 ->expects($this->any())
115 ->with($this->callback(function ($persistedEntry) {
116 return $persistedEntry->isArchived();
119 $res = $chromeImport->setMarkAsRead(true)->import();
121 $this->assertTrue($res);
123 $this->assertEquals(['skipped' => 0, 'imported' => 1, 'queued' => 0], $chromeImport->getSummary());
126 public function testImportWithRabbit()
128 $chromeImport = $this->getChromeImport();
129 $chromeImport->setFilepath(__DIR__
.'/../fixtures/chrome-bookmarks');
131 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
132 ->disableOriginalConstructor()
135 $entryRepo->expects($this->never())
136 ->method('findByUrlAndUserId');
139 ->expects($this->never())
140 ->method('getRepository');
142 $entry = $this->getMockBuilder('Wallabag\CoreBundle\Entity\Entry')
143 ->disableOriginalConstructor()
147 ->expects($this->never())
148 ->method('updateEntry');
150 $producer = $this->getMockBuilder('OldSound\RabbitMqBundle\RabbitMq\Producer')
151 ->disableOriginalConstructor()
155 ->expects($this->exactly(1))
158 $chromeImport->setProducer($producer);
160 $res = $chromeImport->setMarkAsRead(true)->import();
162 $this->assertTrue($res);
163 $this->assertEquals(['skipped' => 0, 'imported' => 0, 'queued' => 1], $chromeImport->getSummary());
166 public function testImportWithRedis()
168 $chromeImport = $this->getChromeImport();
169 $chromeImport->setFilepath(__DIR__
.'/../fixtures/chrome-bookmarks');
171 $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
172 ->disableOriginalConstructor()
175 $entryRepo->expects($this->never())
176 ->method('findByUrlAndUserId');
179 ->expects($this->never())
180 ->method('getRepository');
182 $entry = $this->getMockBuilder('Wallabag\CoreBundle\Entity\Entry')
183 ->disableOriginalConstructor()
187 ->expects($this->never())
188 ->method('updateEntry');
190 $factory = new RedisMockFactory();
191 $redisMock = $factory->getAdapter('Predis\Client', true);
193 $queue = new RedisQueue($redisMock, 'chrome');
194 $producer = new Producer($queue);
196 $chromeImport->setProducer($producer);
198 $res = $chromeImport->setMarkAsRead(true)->import();
200 $this->assertTrue($res);
201 $this->assertEquals(['skipped' => 0, 'imported' => 0, 'queued' => 1], $chromeImport->getSummary());
203 $this->assertNotEmpty($redisMock->lpop('chrome'));
206 public function testImportBadFile()
208 $chromeImport = $this->getChromeImport();
209 $chromeImport->setFilepath(__DIR__
.'/../fixtures/wallabag-v1.jsonx');
211 $res = $chromeImport->import();
213 $this->assertFalse($res);
215 $records = $this->logHandler
->getRecords();
216 $this->assertContains('Wallabag Browser Import: unable to read file', $records[0]['message']);
217 $this->assertEquals('ERROR', $records[0]['level_name']);
220 public function testImportUserNotDefined()
222 $chromeImport = $this->getChromeImport(true);
223 $chromeImport->setFilepath(__DIR__
.'/../fixtures/chrome-bookmarks');
225 $res = $chromeImport->import();
227 $this->assertFalse($res);
229 $records = $this->logHandler
->getRecords();
230 $this->assertContains('Wallabag Browser Import: user is not defined', $records[0]['message']);
231 $this->assertEquals('ERROR', $records[0]['level_name']);