From a05b61159e147776f63baee731b5026796e5f7ae Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Fri, 30 Jun 2017 16:54:26 +0200 Subject: Fix PATCH method The PATCH method for the entry should only update what user sent to us and not the whole entry as it was before. Also, sending tags when patching an entry will now remove all current tags & assocatied new ones. --- .../Controller/EntryRestControllerTest.php | 68 ++++++++++++++++++---- .../CoreBundle/Helper/ContentProxyTest.php | 7 +-- 2 files changed, 60 insertions(+), 15 deletions(-) (limited to 'tests') diff --git a/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php b/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php index ae4af4cd..0647bb23 100644 --- a/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php +++ b/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php @@ -519,10 +519,7 @@ class EntryRestControllerTest extends WallabagApiTestCase $this->markTestSkipped('No content found in db.'); } - // hydrate the tags relations - $nbTags = count($entry->getTags()); - - $this->client->request('PATCH', '/api/entries/' . $entry->getId() . '.json', [ + $this->client->request('PATCH', '/api/entries/'.$entry->getId().'.json', [ 'title' => 'New awesome title', 'tags' => 'new tag ' . uniqid(), 'starred' => '1', @@ -532,6 +529,7 @@ class EntryRestControllerTest extends WallabagApiTestCase 'authors' => 'bob,sponge', 'content' => 'awesome', 'public' => 0, + 'published_at' => 1488833381, ]); $this->assertSame(200, $this->client->getResponse()->getStatusCode()); @@ -541,7 +539,7 @@ class EntryRestControllerTest extends WallabagApiTestCase $this->assertSame($entry->getId(), $content['id']); $this->assertSame($entry->getUrl(), $content['url']); $this->assertSame('New awesome title', $content['title']); - $this->assertGreaterThan($nbTags, count($content['tags'])); + $this->assertGreaterThanOrEqual(1, count($content['tags']), 'We force only one tag'); $this->assertSame(1, $content['user_id']); $this->assertSame('de_AT', $content['language']); $this->assertSame('http://preview.io/picture.jpg', $content['preview_picture']); @@ -549,6 +547,7 @@ class EntryRestControllerTest extends WallabagApiTestCase $this->assertContains('bob', $content['published_by']); $this->assertSame('awesome', $content['content']); $this->assertFalse($content['is_public'], 'Entry is no more shared'); + $this->assertContains('2017-03-06', $content['published_at']); } public function testPatchEntryWithoutQuotes() @@ -562,8 +561,8 @@ class EntryRestControllerTest extends WallabagApiTestCase $this->markTestSkipped('No content found in db.'); } - // hydrate the tags relations - $nbTags = count($entry->getTags()); + $previousContent = $entry->getContent(); + $previousLanguage = $entry->getLanguage(); $this->client->request('PATCH', '/api/entries/' . $entry->getId() . '.json', [ 'title' => 'New awesome title', @@ -579,9 +578,11 @@ class EntryRestControllerTest extends WallabagApiTestCase $this->assertSame($entry->getId(), $content['id']); $this->assertSame($entry->getUrl(), $content['url']); - $this->assertSame('New awesome title', $content['title']); + $this->assertGreaterThanOrEqual(1, count($content['tags']), 'We force only one tag'); $this->assertGreaterThan($nbTags, count($content['tags'])); $this->assertEmpty($content['published_by'], 'Authors were not saved because of an array instead of a string'); + $this->assertEquals($previousContent, $content['content'], 'Ensure content has not moved'); + $this->assertEquals($previousLanguage, $content['language'], 'Ensure language has not moved'); } public function testGetTagsEntry() @@ -727,8 +728,10 @@ class EntryRestControllerTest extends WallabagApiTestCase $this->markTestSkipped('No content found in db.'); } - $this->client->request('PATCH', '/api/entries/' . $entry->getId() . '.json', [ - 'title' => $entry->getTitle() . '++', + $previousTitle = $entry->getTitle(); + + $this->client->request('PATCH', '/api/entries/'.$entry->getId().'.json', [ + 'title' => $entry->getTitle().'++', ]); $this->assertSame(200, $this->client->getResponse()->getStatusCode()); @@ -736,6 +739,7 @@ class EntryRestControllerTest extends WallabagApiTestCase $content = json_decode($this->client->getResponse()->getContent(), true); $this->assertSame(1, $content['is_archived']); + $this->assertEquals($previousTitle.'++', $content['title']); } public function testSaveIsStarredAfterPatch() @@ -907,6 +911,17 @@ class EntryRestControllerTest extends WallabagApiTestCase $this->assertCount(4, $tags); } + public function testPostEntriesTagsListActionNoList() + { + $this->client->request('POST', '/api/entries/tags/lists?list='.json_encode([])); + + $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); + + $content = json_decode($this->client->getResponse()->getContent(), true); + + $this->assertEmpty($content); + } + public function testDeleteEntriesTagsListAction() { $em = $this->client->getContainer()->get('doctrine.orm.entity_manager'); @@ -933,6 +948,17 @@ class EntryRestControllerTest extends WallabagApiTestCase $this->assertCount(0, $entry->getTags()); } + public function testDeleteEntriesTagsListActionNoList() + { + $this->client->request('DELETE', '/api/entries/tags/list?list='.json_encode([])); + + $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); + + $content = json_decode($this->client->getResponse()->getContent(), true); + + $this->assertEmpty($content); + } + public function testPostEntriesListAction() { $list = [ @@ -953,6 +979,17 @@ class EntryRestControllerTest extends WallabagApiTestCase $this->assertSame('http://0.0.0.0/entry2', $content[1]['url']); } + public function testPostEntriesListActionWithNoUrls() + { + $this->client->request('POST', '/api/entries/lists?urls='.json_encode([])); + + $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); + + $content = json_decode($this->client->getResponse()->getContent(), true); + + $this->assertEmpty($content); + } + public function testDeleteEntriesListAction() { $em = $this->client->getContainer()->get('doctrine.orm.entity_manager'); @@ -978,6 +1015,17 @@ class EntryRestControllerTest extends WallabagApiTestCase $this->assertSame('http://0.0.0.0/test-entry-not-exist', $content[1]['url']); } + public function testDeleteEntriesListActionWithNoUrls() + { + $this->client->request('DELETE', '/api/entries/list?urls='.json_encode([])); + + $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); + + $content = json_decode($this->client->getResponse()->getContent(), true); + + $this->assertEmpty($content); + } + public function testLimitBulkAction() { $list = [ diff --git a/tests/Wallabag/CoreBundle/Helper/ContentProxyTest.php b/tests/Wallabag/CoreBundle/Helper/ContentProxyTest.php index c63671c4..f394b947 100644 --- a/tests/Wallabag/CoreBundle/Helper/ContentProxyTest.php +++ b/tests/Wallabag/CoreBundle/Helper/ContentProxyTest.php @@ -221,12 +221,9 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase ->method('tag'); $validator = $this->getValidator(); - $validator->expects($this->exactly(2)) + $validator->expects($this->once()) ->method('validate') - ->will($this->onConsecutiveCalls( - new ConstraintViolationList([new ConstraintViolation('oops', 'oops', [], 'oops', 'language', 'dontexist')]), - new ConstraintViolationList() - )); + ->willReturn(new ConstraintViolationList([new ConstraintViolation('oops', 'oops', [], 'oops', 'language', 'dontexist')])); $graby = $this->getMockBuilder('Graby\Graby') ->setMethods(['fetchContent']) -- cgit v1.2.3 From d0ec2ddd2354e39badd947c2214f47193784b1c7 Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Fri, 30 Jun 2017 17:04:40 +0200 Subject: Fix validateAndSetPreviewPicture Which wasn't covered by a test! --- .../CoreBundle/Helper/ContentProxyTest.php | 35 ++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'tests') diff --git a/tests/Wallabag/CoreBundle/Helper/ContentProxyTest.php b/tests/Wallabag/CoreBundle/Helper/ContentProxyTest.php index f394b947..c0b68d53 100644 --- a/tests/Wallabag/CoreBundle/Helper/ContentProxyTest.php +++ b/tests/Wallabag/CoreBundle/Helper/ContentProxyTest.php @@ -495,6 +495,41 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase $this->assertSame('1.1.1.1', $entry->getDomainName()); } + public function testWithImageAsContent() + { + $tagger = $this->getTaggerMock(); + $tagger->expects($this->once()) + ->method('tag'); + + $graby = $this->getMockBuilder('Graby\Graby') + ->setMethods(['fetchContent']) + ->disableOriginalConstructor() + ->getMock(); + + $graby->expects($this->any()) + ->method('fetchContent') + ->willReturn([ + 'html' => '

', + 'title' => 'this is my title', + 'url' => 'http://1.1.1.1/image.jpg', + 'content_type' => 'image/jpeg', + 'status' => '200', + 'open_graph' => [], + ]); + + $proxy = new ContentProxy($graby, $tagger, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage); + $entry = new Entry(new User()); + $proxy->updateEntry($entry, 'http://0.0.0.0'); + + $this->assertEquals('http://1.1.1.1/image.jpg', $entry->getUrl()); + $this->assertEquals('this is my title', $entry->getTitle()); + $this->assertContains('http://1.1.1.1/image.jpg', $entry->getContent()); + $this->assertSame('http://1.1.1.1/image.jpg', $entry->getPreviewPicture()); + $this->assertEquals('image/jpeg', $entry->getMimetype()); + $this->assertEquals('200', $entry->getHttpStatus()); + $this->assertEquals('1.1.1.1', $entry->getDomainName()); + } + private function getTaggerMock() { return $this->getMockBuilder(RuleBasedTagger::class) -- cgit v1.2.3 From c18a2476b601bc6b9893462d9be680c2e13c89e8 Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Mon, 3 Jul 2017 13:56:39 +0200 Subject: CS --- .../Controller/EntryRestControllerTest.php | 29 +++++++++++----------- .../CoreBundle/Helper/ContentProxyTest.php | 10 ++++---- 2 files changed, 19 insertions(+), 20 deletions(-) (limited to 'tests') diff --git a/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php b/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php index 0647bb23..c76be13d 100644 --- a/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php +++ b/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php @@ -519,7 +519,7 @@ class EntryRestControllerTest extends WallabagApiTestCase $this->markTestSkipped('No content found in db.'); } - $this->client->request('PATCH', '/api/entries/'.$entry->getId().'.json', [ + $this->client->request('PATCH', '/api/entries/' . $entry->getId() . '.json', [ 'title' => 'New awesome title', 'tags' => 'new tag ' . uniqid(), 'starred' => '1', @@ -579,10 +579,9 @@ class EntryRestControllerTest extends WallabagApiTestCase $this->assertSame($entry->getId(), $content['id']); $this->assertSame($entry->getUrl(), $content['url']); $this->assertGreaterThanOrEqual(1, count($content['tags']), 'We force only one tag'); - $this->assertGreaterThan($nbTags, count($content['tags'])); $this->assertEmpty($content['published_by'], 'Authors were not saved because of an array instead of a string'); - $this->assertEquals($previousContent, $content['content'], 'Ensure content has not moved'); - $this->assertEquals($previousLanguage, $content['language'], 'Ensure language has not moved'); + $this->assertSame($previousContent, $content['content'], 'Ensure content has not moved'); + $this->assertSame($previousLanguage, $content['language'], 'Ensure language has not moved'); } public function testGetTagsEntry() @@ -730,8 +729,8 @@ class EntryRestControllerTest extends WallabagApiTestCase $previousTitle = $entry->getTitle(); - $this->client->request('PATCH', '/api/entries/'.$entry->getId().'.json', [ - 'title' => $entry->getTitle().'++', + $this->client->request('PATCH', '/api/entries/' . $entry->getId() . '.json', [ + 'title' => $entry->getTitle() . '++', ]); $this->assertSame(200, $this->client->getResponse()->getStatusCode()); @@ -739,7 +738,7 @@ class EntryRestControllerTest extends WallabagApiTestCase $content = json_decode($this->client->getResponse()->getContent(), true); $this->assertSame(1, $content['is_archived']); - $this->assertEquals($previousTitle.'++', $content['title']); + $this->assertSame($previousTitle . '++', $content['title']); } public function testSaveIsStarredAfterPatch() @@ -913,9 +912,9 @@ class EntryRestControllerTest extends WallabagApiTestCase public function testPostEntriesTagsListActionNoList() { - $this->client->request('POST', '/api/entries/tags/lists?list='.json_encode([])); + $this->client->request('POST', '/api/entries/tags/lists?list=' . json_encode([])); - $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); + $this->assertSame(200, $this->client->getResponse()->getStatusCode()); $content = json_decode($this->client->getResponse()->getContent(), true); @@ -950,9 +949,9 @@ class EntryRestControllerTest extends WallabagApiTestCase public function testDeleteEntriesTagsListActionNoList() { - $this->client->request('DELETE', '/api/entries/tags/list?list='.json_encode([])); + $this->client->request('DELETE', '/api/entries/tags/list?list=' . json_encode([])); - $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); + $this->assertSame(200, $this->client->getResponse()->getStatusCode()); $content = json_decode($this->client->getResponse()->getContent(), true); @@ -981,9 +980,9 @@ class EntryRestControllerTest extends WallabagApiTestCase public function testPostEntriesListActionWithNoUrls() { - $this->client->request('POST', '/api/entries/lists?urls='.json_encode([])); + $this->client->request('POST', '/api/entries/lists?urls=' . json_encode([])); - $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); + $this->assertSame(200, $this->client->getResponse()->getStatusCode()); $content = json_decode($this->client->getResponse()->getContent(), true); @@ -1017,9 +1016,9 @@ class EntryRestControllerTest extends WallabagApiTestCase public function testDeleteEntriesListActionWithNoUrls() { - $this->client->request('DELETE', '/api/entries/list?urls='.json_encode([])); + $this->client->request('DELETE', '/api/entries/list?urls=' . json_encode([])); - $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); + $this->assertSame(200, $this->client->getResponse()->getStatusCode()); $content = json_decode($this->client->getResponse()->getContent(), true); diff --git a/tests/Wallabag/CoreBundle/Helper/ContentProxyTest.php b/tests/Wallabag/CoreBundle/Helper/ContentProxyTest.php index c0b68d53..f94c2137 100644 --- a/tests/Wallabag/CoreBundle/Helper/ContentProxyTest.php +++ b/tests/Wallabag/CoreBundle/Helper/ContentProxyTest.php @@ -521,13 +521,13 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase $entry = new Entry(new User()); $proxy->updateEntry($entry, 'http://0.0.0.0'); - $this->assertEquals('http://1.1.1.1/image.jpg', $entry->getUrl()); - $this->assertEquals('this is my title', $entry->getTitle()); + $this->assertSame('http://1.1.1.1/image.jpg', $entry->getUrl()); + $this->assertSame('this is my title', $entry->getTitle()); $this->assertContains('http://1.1.1.1/image.jpg', $entry->getContent()); $this->assertSame('http://1.1.1.1/image.jpg', $entry->getPreviewPicture()); - $this->assertEquals('image/jpeg', $entry->getMimetype()); - $this->assertEquals('200', $entry->getHttpStatus()); - $this->assertEquals('1.1.1.1', $entry->getDomainName()); + $this->assertSame('image/jpeg', $entry->getMimetype()); + $this->assertSame('200', $entry->getHttpStatus()); + $this->assertSame('1.1.1.1', $entry->getDomainName()); } private function getTaggerMock() -- cgit v1.2.3