aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests
diff options
context:
space:
mode:
authorJeremy Benoist <jeremy.benoist@gmail.com>2017-06-30 16:54:26 +0200
committerJeremy Benoist <jeremy.benoist@gmail.com>2017-07-03 13:45:04 +0200
commita05b61159e147776f63baee731b5026796e5f7ae (patch)
tree80dae1ea169f3fb072a7aa2072f24507e10e91ed /tests
parent71e1cbc8eb5928d393b0772055d6b711e90a09b3 (diff)
downloadwallabag-a05b61159e147776f63baee731b5026796e5f7ae.tar.gz
wallabag-a05b61159e147776f63baee731b5026796e5f7ae.tar.zst
wallabag-a05b61159e147776f63baee731b5026796e5f7ae.zip
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.
Diffstat (limited to 'tests')
-rw-r--r--tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php68
-rw-r--r--tests/Wallabag/CoreBundle/Helper/ContentProxyTest.php7
2 files changed, 60 insertions, 15 deletions
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
519 $this->markTestSkipped('No content found in db.'); 519 $this->markTestSkipped('No content found in db.');
520 } 520 }
521 521
522 // hydrate the tags relations 522 $this->client->request('PATCH', '/api/entries/'.$entry->getId().'.json', [
523 $nbTags = count($entry->getTags());
524
525 $this->client->request('PATCH', '/api/entries/' . $entry->getId() . '.json', [
526 'title' => 'New awesome title', 523 'title' => 'New awesome title',
527 'tags' => 'new tag ' . uniqid(), 524 'tags' => 'new tag ' . uniqid(),
528 'starred' => '1', 525 'starred' => '1',
@@ -532,6 +529,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
532 'authors' => 'bob,sponge', 529 'authors' => 'bob,sponge',
533 'content' => 'awesome', 530 'content' => 'awesome',
534 'public' => 0, 531 'public' => 0,
532 'published_at' => 1488833381,
535 ]); 533 ]);
536 534
537 $this->assertSame(200, $this->client->getResponse()->getStatusCode()); 535 $this->assertSame(200, $this->client->getResponse()->getStatusCode());
@@ -541,7 +539,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
541 $this->assertSame($entry->getId(), $content['id']); 539 $this->assertSame($entry->getId(), $content['id']);
542 $this->assertSame($entry->getUrl(), $content['url']); 540 $this->assertSame($entry->getUrl(), $content['url']);
543 $this->assertSame('New awesome title', $content['title']); 541 $this->assertSame('New awesome title', $content['title']);
544 $this->assertGreaterThan($nbTags, count($content['tags'])); 542 $this->assertGreaterThanOrEqual(1, count($content['tags']), 'We force only one tag');
545 $this->assertSame(1, $content['user_id']); 543 $this->assertSame(1, $content['user_id']);
546 $this->assertSame('de_AT', $content['language']); 544 $this->assertSame('de_AT', $content['language']);
547 $this->assertSame('http://preview.io/picture.jpg', $content['preview_picture']); 545 $this->assertSame('http://preview.io/picture.jpg', $content['preview_picture']);
@@ -549,6 +547,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
549 $this->assertContains('bob', $content['published_by']); 547 $this->assertContains('bob', $content['published_by']);
550 $this->assertSame('awesome', $content['content']); 548 $this->assertSame('awesome', $content['content']);
551 $this->assertFalse($content['is_public'], 'Entry is no more shared'); 549 $this->assertFalse($content['is_public'], 'Entry is no more shared');
550 $this->assertContains('2017-03-06', $content['published_at']);
552 } 551 }
553 552
554 public function testPatchEntryWithoutQuotes() 553 public function testPatchEntryWithoutQuotes()
@@ -562,8 +561,8 @@ class EntryRestControllerTest extends WallabagApiTestCase
562 $this->markTestSkipped('No content found in db.'); 561 $this->markTestSkipped('No content found in db.');
563 } 562 }
564 563
565 // hydrate the tags relations 564 $previousContent = $entry->getContent();
566 $nbTags = count($entry->getTags()); 565 $previousLanguage = $entry->getLanguage();
567 566
568 $this->client->request('PATCH', '/api/entries/' . $entry->getId() . '.json', [ 567 $this->client->request('PATCH', '/api/entries/' . $entry->getId() . '.json', [
569 'title' => 'New awesome title', 568 'title' => 'New awesome title',
@@ -579,9 +578,11 @@ class EntryRestControllerTest extends WallabagApiTestCase
579 578
580 $this->assertSame($entry->getId(), $content['id']); 579 $this->assertSame($entry->getId(), $content['id']);
581 $this->assertSame($entry->getUrl(), $content['url']); 580 $this->assertSame($entry->getUrl(), $content['url']);
582 $this->assertSame('New awesome title', $content['title']); 581 $this->assertGreaterThanOrEqual(1, count($content['tags']), 'We force only one tag');
583 $this->assertGreaterThan($nbTags, count($content['tags'])); 582 $this->assertGreaterThan($nbTags, count($content['tags']));
584 $this->assertEmpty($content['published_by'], 'Authors were not saved because of an array instead of a string'); 583 $this->assertEmpty($content['published_by'], 'Authors were not saved because of an array instead of a string');
584 $this->assertEquals($previousContent, $content['content'], 'Ensure content has not moved');
585 $this->assertEquals($previousLanguage, $content['language'], 'Ensure language has not moved');
585 } 586 }
586 587
587 public function testGetTagsEntry() 588 public function testGetTagsEntry()
@@ -727,8 +728,10 @@ class EntryRestControllerTest extends WallabagApiTestCase
727 $this->markTestSkipped('No content found in db.'); 728 $this->markTestSkipped('No content found in db.');
728 } 729 }
729 730
730 $this->client->request('PATCH', '/api/entries/' . $entry->getId() . '.json', [ 731 $previousTitle = $entry->getTitle();
731 'title' => $entry->getTitle() . '++', 732
733 $this->client->request('PATCH', '/api/entries/'.$entry->getId().'.json', [
734 'title' => $entry->getTitle().'++',
732 ]); 735 ]);
733 736
734 $this->assertSame(200, $this->client->getResponse()->getStatusCode()); 737 $this->assertSame(200, $this->client->getResponse()->getStatusCode());
@@ -736,6 +739,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
736 $content = json_decode($this->client->getResponse()->getContent(), true); 739 $content = json_decode($this->client->getResponse()->getContent(), true);
737 740
738 $this->assertSame(1, $content['is_archived']); 741 $this->assertSame(1, $content['is_archived']);
742 $this->assertEquals($previousTitle.'++', $content['title']);
739 } 743 }
740 744
741 public function testSaveIsStarredAfterPatch() 745 public function testSaveIsStarredAfterPatch()
@@ -907,6 +911,17 @@ class EntryRestControllerTest extends WallabagApiTestCase
907 $this->assertCount(4, $tags); 911 $this->assertCount(4, $tags);
908 } 912 }
909 913
914 public function testPostEntriesTagsListActionNoList()
915 {
916 $this->client->request('POST', '/api/entries/tags/lists?list='.json_encode([]));
917
918 $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
919
920 $content = json_decode($this->client->getResponse()->getContent(), true);
921
922 $this->assertEmpty($content);
923 }
924
910 public function testDeleteEntriesTagsListAction() 925 public function testDeleteEntriesTagsListAction()
911 { 926 {
912 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager'); 927 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
@@ -933,6 +948,17 @@ class EntryRestControllerTest extends WallabagApiTestCase
933 $this->assertCount(0, $entry->getTags()); 948 $this->assertCount(0, $entry->getTags());
934 } 949 }
935 950
951 public function testDeleteEntriesTagsListActionNoList()
952 {
953 $this->client->request('DELETE', '/api/entries/tags/list?list='.json_encode([]));
954
955 $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
956
957 $content = json_decode($this->client->getResponse()->getContent(), true);
958
959 $this->assertEmpty($content);
960 }
961
936 public function testPostEntriesListAction() 962 public function testPostEntriesListAction()
937 { 963 {
938 $list = [ 964 $list = [
@@ -953,6 +979,17 @@ class EntryRestControllerTest extends WallabagApiTestCase
953 $this->assertSame('http://0.0.0.0/entry2', $content[1]['url']); 979 $this->assertSame('http://0.0.0.0/entry2', $content[1]['url']);
954 } 980 }
955 981
982 public function testPostEntriesListActionWithNoUrls()
983 {
984 $this->client->request('POST', '/api/entries/lists?urls='.json_encode([]));
985
986 $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
987
988 $content = json_decode($this->client->getResponse()->getContent(), true);
989
990 $this->assertEmpty($content);
991 }
992
956 public function testDeleteEntriesListAction() 993 public function testDeleteEntriesListAction()
957 { 994 {
958 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager'); 995 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
@@ -978,6 +1015,17 @@ class EntryRestControllerTest extends WallabagApiTestCase
978 $this->assertSame('http://0.0.0.0/test-entry-not-exist', $content[1]['url']); 1015 $this->assertSame('http://0.0.0.0/test-entry-not-exist', $content[1]['url']);
979 } 1016 }
980 1017
1018 public function testDeleteEntriesListActionWithNoUrls()
1019 {
1020 $this->client->request('DELETE', '/api/entries/list?urls='.json_encode([]));
1021
1022 $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
1023
1024 $content = json_decode($this->client->getResponse()->getContent(), true);
1025
1026 $this->assertEmpty($content);
1027 }
1028
981 public function testLimitBulkAction() 1029 public function testLimitBulkAction()
982 { 1030 {
983 $list = [ 1031 $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
221 ->method('tag'); 221 ->method('tag');
222 222
223 $validator = $this->getValidator(); 223 $validator = $this->getValidator();
224 $validator->expects($this->exactly(2)) 224 $validator->expects($this->once())
225 ->method('validate') 225 ->method('validate')
226 ->will($this->onConsecutiveCalls( 226 ->willReturn(new ConstraintViolationList([new ConstraintViolation('oops', 'oops', [], 'oops', 'language', 'dontexist')]));
227 new ConstraintViolationList([new ConstraintViolation('oops', 'oops', [], 'oops', 'language', 'dontexist')]),
228 new ConstraintViolationList()
229 ));
230 227
231 $graby = $this->getMockBuilder('Graby\Graby') 228 $graby = $this->getMockBuilder('Graby\Graby')
232 ->setMethods(['fetchContent']) 229 ->setMethods(['fetchContent'])