From 66e2be23717ad8af3cabe5d0c69effd492af3ece Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Fri, 11 Mar 2016 14:55:33 +0100 Subject: [PATCH 1/3] Use --prefer-dist to improve CI perf https://twitter.com/seldaek/status/708236348281495552 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 5f0abe871..5741b533a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -50,6 +50,6 @@ before_install: - if [[ $TRAVIS_REPO_SLUG = wallabag/wallabag ]]; then cp .composer-auth.json ~/.composer/auth.json; fi; script: - - travis_wait composer update --no-interaction --no-progress + - travis_wait composer install --no-interaction --no-progress --prefer-dist -o - ant prepare-$DB - bin/phpunit -v From 09d8bb6fa26b881da478df4c7b97620cb7aea0d0 Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Fri, 11 Mar 2016 17:56:41 +0100 Subject: [PATCH 2/3] Improve tests - add more tests for coverage - add a test on annotation deletion - fix post annontation with ranges --- .../Repository/AnnotationRepository.php | 17 ++++++ .../Controller/AnnotationControllerTest.php | 57 ++++++++++++++++--- .../Controller/WallabagRestControllerTest.php | 6 +- .../Controller/ConfigController.php | 1 - .../Tests/Import/PocketImportTest.php | 4 -- 5 files changed, 68 insertions(+), 17 deletions(-) diff --git a/src/Wallabag/AnnotationBundle/Repository/AnnotationRepository.php b/src/Wallabag/AnnotationBundle/Repository/AnnotationRepository.php index c1c6e6389..7f35373f5 100644 --- a/src/Wallabag/AnnotationBundle/Repository/AnnotationRepository.php +++ b/src/Wallabag/AnnotationBundle/Repository/AnnotationRepository.php @@ -88,4 +88,21 @@ class AnnotationRepository extends EntityRepository ->getQuery() ->getOneOrNullResult(); } + + /** + * Used only in test case to get the right annotation associated to the right user. + * + * @param string $username + * + * @return Annotation + */ + public function findOneByUsername($username) + { + return $this->createQueryBuilder('a') + ->leftJoin('a.user', 'u') + ->where('u.username = :username')->setParameter('username', $username) + ->setMaxResults(1) + ->getQuery() + ->getSingleResult(); + } } diff --git a/src/Wallabag/AnnotationBundle/Tests/Controller/AnnotationControllerTest.php b/src/Wallabag/AnnotationBundle/Tests/Controller/AnnotationControllerTest.php index c0efe272c..7a877f983 100644 --- a/src/Wallabag/AnnotationBundle/Tests/Controller/AnnotationControllerTest.php +++ b/src/Wallabag/AnnotationBundle/Tests/Controller/AnnotationControllerTest.php @@ -11,11 +11,12 @@ class AnnotationControllerTest extends WallabagAnnotationTestCase $annotation = $this->client->getContainer() ->get('doctrine.orm.entity_manager') ->getRepository('WallabagAnnotationBundle:Annotation') - ->findOneBy(array('user' => 1)); + ->findOneByUsername('admin'); if (!$annotation) { $this->markTestSkipped('No content found in db.'); } + $this->logInAs('admin'); $crawler = $this->client->request('GET', 'annotations/'.$annotation->getEntry()->getId().'.json'); $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); @@ -32,18 +33,25 @@ class AnnotationControllerTest extends WallabagAnnotationTestCase $entry = $this->client->getContainer() ->get('doctrine.orm.entity_manager') ->getRepository('WallabagCoreBundle:Entry') - ->findOneBy(array('user' => 1)); + ->findOneByUsernameAndNotArchived('admin'); $headers = array('CONTENT_TYPE' => 'application/json'); $content = json_encode(array( 'text' => 'my annotation', 'quote' => 'my quote', - 'range' => '[{"start":"","startOffset":24,"end":"","endOffset":31}]', - )); + 'ranges' => array('start' => '', 'startOffset' => 24, 'end' => '', 'endOffset' => 31), + )); $crawler = $this->client->request('POST', 'annotations/'.$entry->getId().'.json', array(), array(), $headers, $content); $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); + $content = json_decode($this->client->getResponse()->getContent(), true); + + $this->assertEquals('Big boss', $content['user']); + $this->assertEquals('v1.0', $content['annotator_schema_version']); + $this->assertEquals('my annotation', $content['text']); + $this->assertEquals('my quote', $content['quote']); + $annotation = $this->client->getContainer() ->get('doctrine.orm.entity_manager') ->getRepository('WallabagAnnotationBundle:Annotation') @@ -57,25 +65,56 @@ class AnnotationControllerTest extends WallabagAnnotationTestCase $annotation = $this->client->getContainer() ->get('doctrine.orm.entity_manager') ->getRepository('WallabagAnnotationBundle:Annotation') - ->findOneBy(array('user' => 1)); + ->findOneByUsername('admin'); $this->logInAs('admin'); $headers = array('CONTENT_TYPE' => 'application/json'); $content = json_encode(array( 'text' => 'a modified annotation', - )); + )); $crawler = $this->client->request('PUT', 'annotations/'.$annotation->getId().'.json', array(), array(), $headers, $content); $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); $content = json_decode($this->client->getResponse()->getContent(), true); + $this->assertEquals('Big boss', $content['user']); + $this->assertEquals('v1.0', $content['annotator_schema_version']); + $this->assertEquals('a modified annotation', $content['text']); + $this->assertEquals('content', $content['quote']); + + $annotationUpdated = $this->client->getContainer() + ->get('doctrine.orm.entity_manager') + ->getRepository('WallabagAnnotationBundle:Annotation') + ->findOneById($annotation->getId()); + $this->assertEquals('a modified annotation', $annotationUpdated->getText()); + } + + public function testDeleteAnnotation() + { + $annotation = $this->client->getContainer() + ->get('doctrine.orm.entity_manager') + ->getRepository('WallabagAnnotationBundle:Annotation') + ->findOneByUsername('admin'); + + $this->logInAs('admin'); + + $headers = array('CONTENT_TYPE' => 'application/json'); + $content = json_encode(array( + 'text' => 'a modified annotation', + )); + $crawler = $this->client->request('DELETE', 'annotations/'.$annotation->getId().'.json', array(), array(), $headers, $content); + $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); + + $content = json_decode($this->client->getResponse()->getContent(), true); + $this->assertEquals('a modified annotation', $content['text']); - $annotationUpdated = $this->client->getContainer() + $annotationDeleted = $this->client->getContainer() ->get('doctrine.orm.entity_manager') ->getRepository('WallabagAnnotationBundle:Annotation') - ->findAnnotationById($annotation->getId()); - $this->assertEquals('a modified annotation', $annotationUpdated->getText()); + ->findOneById($annotation->getId()); + + $this->assertNull($annotationDeleted); } } diff --git a/src/Wallabag/ApiBundle/Tests/Controller/WallabagRestControllerTest.php b/src/Wallabag/ApiBundle/Tests/Controller/WallabagRestControllerTest.php index a705f9dea..cce39d0b3 100644 --- a/src/Wallabag/ApiBundle/Tests/Controller/WallabagRestControllerTest.php +++ b/src/Wallabag/ApiBundle/Tests/Controller/WallabagRestControllerTest.php @@ -162,12 +162,12 @@ class WallabagRestControllerTest extends WallabagApiTestCase $this->assertCount(1, $content['tags']); } - public function testPostArchivedEntry() + public function testPostArchivedAndStarredEntry() { $this->client->request('POST', '/api/entries.json', array( 'url' => 'http://www.lemonde.fr/idees/article/2016/02/08/preserver-la-liberte-d-expression-sur-les-reseaux-sociaux_4861503_3232.html', 'archive' => true, - 'starred' => false, + 'starred' => true, )); $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); @@ -177,7 +177,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase $this->assertGreaterThan(0, $content['id']); $this->assertEquals('http://www.lemonde.fr/idees/article/2016/02/08/preserver-la-liberte-d-expression-sur-les-reseaux-sociaux_4861503_3232.html', $content['url']); $this->assertEquals(true, $content['is_archived']); - $this->assertEquals(false, $content['is_starred']); + $this->assertEquals(true, $content['is_starred']); } public function testPatchEntry() diff --git a/src/Wallabag/CoreBundle/Controller/ConfigController.php b/src/Wallabag/CoreBundle/Controller/ConfigController.php index 1791eac23..1930a2ae4 100644 --- a/src/Wallabag/CoreBundle/Controller/ConfigController.php +++ b/src/Wallabag/CoreBundle/Controller/ConfigController.php @@ -16,7 +16,6 @@ use Wallabag\CoreBundle\Form\Type\RssType; use Wallabag\CoreBundle\Form\Type\TaggingRuleType; use Wallabag\CoreBundle\Form\Type\UserInformationType; use Wallabag\CoreBundle\Tools\Utils; -use Wallabag\UserBundle\Entity\User; class ConfigController extends Controller { diff --git a/src/Wallabag/ImportBundle/Tests/Import/PocketImportTest.php b/src/Wallabag/ImportBundle/Tests/Import/PocketImportTest.php index 92712b9d3..450cdc953 100644 --- a/src/Wallabag/ImportBundle/Tests/Import/PocketImportTest.php +++ b/src/Wallabag/ImportBundle/Tests/Import/PocketImportTest.php @@ -302,8 +302,6 @@ class PocketImportTest extends \PHPUnit_Framework_TestCase "given_title": "The Massive Ryder Cup Preview - The Triangle Blog - Grantland", "favorite": "1", "status": "1", - "resolved_title": "The Massive Ryder Cup Preview", - "resolved_url": "http://www.grantland.com/blog/the-triangle/post/_/id/38347/ryder-cup-preview", "excerpt": "The list of things I love about the Ryder Cup is so long that it could fill a (tedious) novel, and golf fans can probably guess most of them.", "is_article": "1", "has_video": "1", @@ -317,8 +315,6 @@ class PocketImportTest extends \PHPUnit_Framework_TestCase "given_title": "The Massive Ryder Cup Preview - The Triangle Blog - Grantland", "favorite": "1", "status": "0", - "resolved_title": "The Massive Ryder Cup Preview", - "resolved_url": "http://www.grantland.com/blog/the-triangle/post/_/id/38347/ryder-cup-preview", "excerpt": "The list of things I love about the Ryder Cup is so long that it could fill a (tedious) novel, and golf fans can probably guess most of them.", "is_article": "1", "has_video": "0", From b95ffda2a105af4c6f4f86aca025a0bf967bc86a Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Sat, 12 Mar 2016 10:45:14 +0100 Subject: [PATCH 3/3] Fix hazardous bug with Postgres Instead of retrieving a random annotation, sort them to be sure they are all the same no matter the database used --- .../AnnotationBundle/Repository/AnnotationRepository.php | 1 + .../Tests/Controller/AnnotationControllerTest.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Wallabag/AnnotationBundle/Repository/AnnotationRepository.php b/src/Wallabag/AnnotationBundle/Repository/AnnotationRepository.php index 7f35373f5..5f7da70ec 100644 --- a/src/Wallabag/AnnotationBundle/Repository/AnnotationRepository.php +++ b/src/Wallabag/AnnotationBundle/Repository/AnnotationRepository.php @@ -101,6 +101,7 @@ class AnnotationRepository extends EntityRepository return $this->createQueryBuilder('a') ->leftJoin('a.user', 'u') ->where('u.username = :username')->setParameter('username', $username) + ->orderBy('a.id', 'DESC') ->setMaxResults(1) ->getQuery() ->getSingleResult(); diff --git a/src/Wallabag/AnnotationBundle/Tests/Controller/AnnotationControllerTest.php b/src/Wallabag/AnnotationBundle/Tests/Controller/AnnotationControllerTest.php index 7a877f983..e972c2deb 100644 --- a/src/Wallabag/AnnotationBundle/Tests/Controller/AnnotationControllerTest.php +++ b/src/Wallabag/AnnotationBundle/Tests/Controller/AnnotationControllerTest.php @@ -81,7 +81,7 @@ class AnnotationControllerTest extends WallabagAnnotationTestCase $this->assertEquals('Big boss', $content['user']); $this->assertEquals('v1.0', $content['annotator_schema_version']); $this->assertEquals('a modified annotation', $content['text']); - $this->assertEquals('content', $content['quote']); + $this->assertEquals('my quote', $content['quote']); $annotationUpdated = $this->client->getContainer() ->get('doctrine.orm.entity_manager')