From 19d9efab32b5c6403e9ee95fb70a2ce56a27f14b Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Fri, 19 Aug 2016 23:52:19 +0200 Subject: Avoid breaking import when fetching fail graby will throw an Exception in some case (like a bad url, a restricted url or a secured pdf). Import doesn't handle that case and break the whole import. With that commit the import isn't stopped but the entry is just skipped. Also, as a bonus, I've added extra test on WallabagImportV2 when the json is empty. --- .../ImportBundle/Import/PocketImportTest.php | 51 ++++++++++++++++++++++ .../ImportBundle/Import/WallabagV2ImportTest.php | 40 +++++++++++++++++ .../ImportBundle/fixtures/wallabag-v2-empty.json | 0 3 files changed, 91 insertions(+) create mode 100644 tests/Wallabag/ImportBundle/fixtures/wallabag-v2-empty.json (limited to 'tests/Wallabag') diff --git a/tests/Wallabag/ImportBundle/Import/PocketImportTest.php b/tests/Wallabag/ImportBundle/Import/PocketImportTest.php index 41f9b51f..8534e1c8 100644 --- a/tests/Wallabag/ImportBundle/Import/PocketImportTest.php +++ b/tests/Wallabag/ImportBundle/Import/PocketImportTest.php @@ -390,4 +390,55 @@ class PocketImportTest extends \PHPUnit_Framework_TestCase $this->assertContains('PocketImport: Failed to import', $records[0]['message']); $this->assertEquals('ERROR', $records[0]['level_name']); } + + public function testImportWithExceptionFromGraby() + { + $client = new Client(); + + $mock = new Mock([ + new Response(200, ['Content-Type' => 'application/json'], Stream::factory(json_encode(['access_token' => 'wunderbar_token']))), + new Response(200, ['Content-Type' => 'application/json'], Stream::factory(' + { + "status": 1, + "list": { + "229279689": { + "resolved_url": "http://www.grantland.com/blog/the-triangle/post/_/id/38347/ryder-cup-preview" + } + } + } + ')), + ]); + + $client->getEmitter()->attach($mock); + + $pocketImport = $this->getPocketImport(); + + $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository') + ->disableOriginalConstructor() + ->getMock(); + + $entryRepo->expects($this->once()) + ->method('findByUrlAndUserId') + ->will($this->onConsecutiveCalls(false, true)); + + $this->em + ->expects($this->once()) + ->method('getRepository') + ->willReturn($entryRepo); + + $entry = new Entry($this->user); + + $this->contentProxy + ->expects($this->once()) + ->method('updateEntry') + ->will($this->throwException(new \Exception())); + + $pocketImport->setClient($client); + $pocketImport->authorize('wunderbar_code'); + + $res = $pocketImport->import(); + + $this->assertTrue($res); + $this->assertEquals(['skipped' => 1, 'imported' => 0], $pocketImport->getSummary()); + } } diff --git a/tests/Wallabag/ImportBundle/Import/WallabagV2ImportTest.php b/tests/Wallabag/ImportBundle/Import/WallabagV2ImportTest.php index 8ec66b12..4a45e0f0 100644 --- a/tests/Wallabag/ImportBundle/Import/WallabagV2ImportTest.php +++ b/tests/Wallabag/ImportBundle/Import/WallabagV2ImportTest.php @@ -143,4 +143,44 @@ class WallabagV2ImportTest extends \PHPUnit_Framework_TestCase $this->assertContains('WallabagImport: user is not defined', $records[0]['message']); $this->assertEquals('ERROR', $records[0]['level_name']); } + + public function testImportEmptyFile() + { + $wallabagV2Import = $this->getWallabagV2Import(); + $wallabagV2Import->setFilepath(__DIR__.'/../fixtures/wallabag-v2-empty.json'); + + $res = $wallabagV2Import->import(); + + $this->assertFalse($res); + $this->assertEquals(['skipped' => 0, 'imported' => 0], $wallabagV2Import->getSummary()); + } + + public function testImportWithExceptionFromGraby() + { + $wallabagV2Import = $this->getWallabagV2Import(); + $wallabagV2Import->setFilepath(__DIR__.'/../fixtures/wallabag-v2.json'); + + $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository') + ->disableOriginalConstructor() + ->getMock(); + + $entryRepo->expects($this->exactly(24)) + ->method('findByUrlAndUserId') + ->will($this->onConsecutiveCalls(false, true, false)); + + $this->em + ->expects($this->any()) + ->method('getRepository') + ->willReturn($entryRepo); + + $this->contentProxy + ->expects($this->exactly(2)) + ->method('updateEntry') + ->will($this->throwException(new \Exception())); + + $res = $wallabagV2Import->import(); + + $this->assertTrue($res); + $this->assertEquals(['skipped' => 24, 'imported' => 0], $wallabagV2Import->getSummary()); + } } diff --git a/tests/Wallabag/ImportBundle/fixtures/wallabag-v2-empty.json b/tests/Wallabag/ImportBundle/fixtures/wallabag-v2-empty.json new file mode 100644 index 00000000..e69de29b -- cgit v1.2.3