aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--app/AppKernel.php4
-rw-r--r--app/config/config_test.yml3
-rw-r--r--app/config/parameters_test.yml3
-rw-r--r--app/config/tests/parameters_test.mysql.yml1
-rw-r--r--app/config/tests/parameters_test.pgsql.yml1
-rw-r--r--app/config/tests/parameters_test.sqlite.yml5
-rw-r--r--composer.json5
-rw-r--r--phpunit.xml.dist4
-rw-r--r--src/Wallabag/CoreBundle/Command/InstallCommand.php16
-rw-r--r--src/Wallabag/CoreBundle/Controller/ConfigController.php4
-rw-r--r--src/Wallabag/CoreBundle/Controller/EntryController.php3
-rw-r--r--src/Wallabag/CoreBundle/Controller/TagController.php3
-rw-r--r--src/Wallabag/CoreBundle/Event/Subscriber/SQLiteCascadeDeleteSubscriber.php5
-rw-r--r--src/Wallabag/CoreBundle/Helper/PreparePagerForEntries.php5
-rw-r--r--src/Wallabag/UserBundle/Entity/User.php8
-rw-r--r--src/Wallabag/UserBundle/EventListener/CreateConfigListener.php3
-rw-r--r--tests/Wallabag/ApiBundle/Controller/DeveloperControllerTest.php40
-rw-r--r--tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php37
-rw-r--r--tests/Wallabag/ApiBundle/Controller/TagRestControllerTest.php33
-rw-r--r--tests/Wallabag/ApiBundle/WallabagApiTestCase.php4
-rw-r--r--tests/Wallabag/CoreBundle/Command/ExportCommandTest.php2
-rw-r--r--tests/Wallabag/CoreBundle/Command/InstallCommandTest.php67
-rw-r--r--tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php11
-rw-r--r--tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php359
-rw-r--r--tests/Wallabag/CoreBundle/Controller/ExportControllerTest.php2
-rw-r--r--tests/Wallabag/CoreBundle/Controller/TagControllerTest.php59
-rw-r--r--tests/Wallabag/CoreBundle/WallabagCoreTestCase.php76
-rw-r--r--tests/Wallabag/ImportBundle/Command/ImportCommandTest.php1
28 files changed, 470 insertions, 294 deletions
diff --git a/app/AppKernel.php b/app/AppKernel.php
index b9293498..c50783a6 100644
--- a/app/AppKernel.php
+++ b/app/AppKernel.php
@@ -48,6 +48,10 @@ class AppKernel extends Kernel
48 $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle(); 48 $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
49 $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle(); 49 $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
50 $bundles[] = new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle(); 50 $bundles[] = new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle();
51
52 if ('test' === $this->getEnvironment()) {
53 $bundles[] = new DAMA\DoctrineTestBundle\DAMADoctrineTestBundle();
54 }
51 } 55 }
52 56
53 return $bundles; 57 return $bundles;
diff --git a/app/config/config_test.yml b/app/config/config_test.yml
index f5e2c25e..c620c359 100644
--- a/app/config/config_test.yml
+++ b/app/config/config_test.yml
@@ -29,7 +29,8 @@ doctrine:
29 user: "%test_database_user%" 29 user: "%test_database_user%"
30 password: "%test_database_password%" 30 password: "%test_database_password%"
31 charset: "%test_database_charset%" 31 charset: "%test_database_charset%"
32 path: "%test_database_path%" 32 path: "%env(TEST_DATABASE_PATH)%"
33
33 orm: 34 orm:
34 metadata_cache_driver: 35 metadata_cache_driver:
35 type: service 36 type: service
diff --git a/app/config/parameters_test.yml b/app/config/parameters_test.yml
index 5f2e25bb..010785e6 100644
--- a/app/config/parameters_test.yml
+++ b/app/config/parameters_test.yml
@@ -5,5 +5,6 @@ parameters:
5 test_database_name: null 5 test_database_name: null
6 test_database_user: null 6 test_database_user: null
7 test_database_password: null 7 test_database_password: null
8 test_database_path: '%kernel.root_dir%/../data/db/wallabag_test.sqlite' 8 test_database_path: "%env(TEST_DATABASE_PATH)%"
9 env(TEST_DATABASE_PATH): "%kernel.root_dir%/../data/db/wallabag_test.sqlite"
9 test_database_charset: utf8 10 test_database_charset: utf8
diff --git a/app/config/tests/parameters_test.mysql.yml b/app/config/tests/parameters_test.mysql.yml
index bca2d466..36b227fb 100644
--- a/app/config/tests/parameters_test.mysql.yml
+++ b/app/config/tests/parameters_test.mysql.yml
@@ -6,4 +6,5 @@ parameters:
6 test_database_user: root 6 test_database_user: root
7 test_database_password: ~ 7 test_database_password: ~
8 test_database_path: ~ 8 test_database_path: ~
9 env(TEST_DATABASE_PATH): ~
9 test_database_charset: utf8mb4 10 test_database_charset: utf8mb4
diff --git a/app/config/tests/parameters_test.pgsql.yml b/app/config/tests/parameters_test.pgsql.yml
index 3e18d4a0..60f51df6 100644
--- a/app/config/tests/parameters_test.pgsql.yml
+++ b/app/config/tests/parameters_test.pgsql.yml
@@ -6,4 +6,5 @@ parameters:
6 test_database_user: travis 6 test_database_user: travis
7 test_database_password: ~ 7 test_database_password: ~
8 test_database_path: ~ 8 test_database_path: ~
9 env(TEST_DATABASE_PATH): ~
9 test_database_charset: utf8 10 test_database_charset: utf8
diff --git a/app/config/tests/parameters_test.sqlite.yml b/app/config/tests/parameters_test.sqlite.yml
index b8a5f41a..5c731bf5 100644
--- a/app/config/tests/parameters_test.sqlite.yml
+++ b/app/config/tests/parameters_test.sqlite.yml
@@ -5,5 +5,8 @@ parameters:
5 test_database_name: ~ 5 test_database_name: ~
6 test_database_user: ~ 6 test_database_user: ~
7 test_database_password: ~ 7 test_database_password: ~
8 test_database_path: "%kernel.root_dir%/../data/db/wallabag_test.sqlite" 8 # Using an environnement variable in order to avoid the error "attempt to write a readonly database"
9 # when the schema is dropped then recreate
10 test_database_path: "%env(TEST_DATABASE_PATH)%"
11 env(TEST_DATABASE_PATH): "%kernel.root_dir%/../data/db/wallabag_test.sqlite"
9 test_database_charset: utf8 12 test_database_charset: utf8
diff --git a/composer.json b/composer.json
index 36b00ba0..0a170c16 100644
--- a/composer.json
+++ b/composer.json
@@ -89,9 +89,10 @@
89 "doctrine/doctrine-fixtures-bundle": "~2.2", 89 "doctrine/doctrine-fixtures-bundle": "~2.2",
90 "doctrine/data-fixtures": "~1.1.1", 90 "doctrine/data-fixtures": "~1.1.1",
91 "sensio/generator-bundle": "^3.0", 91 "sensio/generator-bundle": "^3.0",
92 "symfony/phpunit-bridge": "^3.0", 92 "symfony/phpunit-bridge": "^3.3",
93 "friendsofphp/php-cs-fixer": "~1.9", 93 "friendsofphp/php-cs-fixer": "~1.9",
94 "m6web/redis-mock": "^2.0" 94 "m6web/redis-mock": "^2.0",
95 "dama/doctrine-test-bundle": "^1.0"
95 }, 96 },
96 "scripts": { 97 "scripts": {
97 "post-cmd": [ 98 "post-cmd": [
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index 3216b6ff..8f5285e6 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -30,4 +30,8 @@
30 </exclude> 30 </exclude>
31 </whitelist> 31 </whitelist>
32 </filter> 32 </filter>
33
34 <listeners>
35 <listener class="\DAMA\DoctrineTestBundle\PHPUnit\PHPUnitStaticDbConnectionListener" />
36 </listeners>
33</phpunit> 37</phpunit>
diff --git a/src/Wallabag/CoreBundle/Command/InstallCommand.php b/src/Wallabag/CoreBundle/Command/InstallCommand.php
index 0d9364f6..d9608246 100644
--- a/src/Wallabag/CoreBundle/Command/InstallCommand.php
+++ b/src/Wallabag/CoreBundle/Command/InstallCommand.php
@@ -499,20 +499,18 @@ class InstallCommand extends ContainerAwareCommand
499 $output = new BufferedOutput(); 499 $output = new BufferedOutput();
500 $exitCode = $this->getApplication()->run(new ArrayInput($parameters), $output); 500 $exitCode = $this->getApplication()->run(new ArrayInput($parameters), $output);
501 501
502 // PDO does not always close the connection after Doctrine commands.
503 // See https://github.com/symfony/symfony/issues/11750.
504 $this->getContainer()->get('doctrine')->getManager()->getConnection()->close();
505
502 if (0 !== $exitCode) { 506 if (0 !== $exitCode) {
503 $this->getApplication()->setAutoExit(true); 507 $this->getApplication()->setAutoExit(true);
504 508
505 $this->defaultOutput->writeln(''); 509 throw new \RuntimeException(
506 $this->defaultOutput->writeln('<error>The command "'.$command.'" generates some errors: </error>'); 510 'The command "'.$command."\" generates some errors: \n\n"
507 $this->defaultOutput->writeln($output->fetch()); 511 .$output->fetch());
508
509 die();
510 } 512 }
511 513
512 // PDO does not always close the connection after Doctrine commands.
513 // See https://github.com/symfony/symfony/issues/11750.
514 $this->getContainer()->get('doctrine')->getManager()->getConnection()->close();
515
516 return $this; 514 return $this;
517 } 515 }
518 516
diff --git a/src/Wallabag/CoreBundle/Controller/ConfigController.php b/src/Wallabag/CoreBundle/Controller/ConfigController.php
index 1a80cc1a..0e61c642 100644
--- a/src/Wallabag/CoreBundle/Controller/ConfigController.php
+++ b/src/Wallabag/CoreBundle/Controller/ConfigController.php
@@ -250,7 +250,7 @@ class ConfigController extends Controller
250 case 'entries': 250 case 'entries':
251 // SQLite doesn't care about cascading remove, so we need to manually remove associated stuff 251 // SQLite doesn't care about cascading remove, so we need to manually remove associated stuff
252 // otherwise they won't be removed ... 252 // otherwise they won't be removed ...
253 if ($this->get('doctrine')->getConnection()->getDriver() instanceof \Doctrine\DBAL\Driver\PDOSqlite\Driver) { 253 if ($this->get('doctrine')->getConnection()->getDatabasePlatform() instanceof \Doctrine\DBAL\Platforms\SqlitePlatform) {
254 $this->getDoctrine()->getRepository('WallabagAnnotationBundle:Annotation')->removeAllByUserId($this->getUser()->getId()); 254 $this->getDoctrine()->getRepository('WallabagAnnotationBundle:Annotation')->removeAllByUserId($this->getUser()->getId());
255 } 255 }
256 256
@@ -262,7 +262,7 @@ class ConfigController extends Controller
262 ->removeAllByUserId($this->getUser()->getId()); 262 ->removeAllByUserId($this->getUser()->getId());
263 break; 263 break;
264 case 'archived': 264 case 'archived':
265 if ($this->get('doctrine')->getConnection()->getDriver() instanceof \Doctrine\DBAL\Driver\PDOSqlite\Driver) { 265 if ($this->get('doctrine')->getConnection()->getDatabasePlatform() instanceof \Doctrine\DBAL\Platforms\SqlitePlatform) {
266 $this->removeAnnotationsForArchivedByUserId($this->getUser()->getId()); 266 $this->removeAnnotationsForArchivedByUserId($this->getUser()->getId());
267 } 267 }
268 268
diff --git a/src/Wallabag/CoreBundle/Controller/EntryController.php b/src/Wallabag/CoreBundle/Controller/EntryController.php
index 8d2ac6d4..9fe3e693 100644
--- a/src/Wallabag/CoreBundle/Controller/EntryController.php
+++ b/src/Wallabag/CoreBundle/Controller/EntryController.php
@@ -321,8 +321,7 @@ class EntryController extends Controller
321 321
322 $pagerAdapter = new DoctrineORMAdapter($qb->getQuery(), true, false); 322 $pagerAdapter = new DoctrineORMAdapter($qb->getQuery(), true, false);
323 323
324 $entries = $this->get('wallabag_core.helper.prepare_pager_for_entries') 324 $entries = $this->get('wallabag_core.helper.prepare_pager_for_entries')->prepare($pagerAdapter);
325 ->prepare($pagerAdapter, $page);
326 325
327 try { 326 try {
328 $entries->setCurrentPage($page); 327 $entries->setCurrentPage($page);
diff --git a/src/Wallabag/CoreBundle/Controller/TagController.php b/src/Wallabag/CoreBundle/Controller/TagController.php
index 736eb1dc..9422bae4 100644
--- a/src/Wallabag/CoreBundle/Controller/TagController.php
+++ b/src/Wallabag/CoreBundle/Controller/TagController.php
@@ -125,8 +125,7 @@ class TagController extends Controller
125 125
126 $pagerAdapter = new ArrayAdapter($entriesByTag); 126 $pagerAdapter = new ArrayAdapter($entriesByTag);
127 127
128 $entries = $this->get('wallabag_core.helper.prepare_pager_for_entries') 128 $entries = $this->get('wallabag_core.helper.prepare_pager_for_entries')->prepare($pagerAdapter);
129 ->prepare($pagerAdapter, $page);
130 129
131 try { 130 try {
132 $entries->setCurrentPage($page); 131 $entries->setCurrentPage($page);
diff --git a/src/Wallabag/CoreBundle/Event/Subscriber/SQLiteCascadeDeleteSubscriber.php b/src/Wallabag/CoreBundle/Event/Subscriber/SQLiteCascadeDeleteSubscriber.php
index 3b4c4cf9..5e6af8cc 100644
--- a/src/Wallabag/CoreBundle/Event/Subscriber/SQLiteCascadeDeleteSubscriber.php
+++ b/src/Wallabag/CoreBundle/Event/Subscriber/SQLiteCascadeDeleteSubscriber.php
@@ -45,9 +45,8 @@ class SQLiteCascadeDeleteSubscriber implements EventSubscriber
45 public function preRemove(LifecycleEventArgs $args) 45 public function preRemove(LifecycleEventArgs $args)
46 { 46 {
47 $entity = $args->getEntity(); 47 $entity = $args->getEntity();
48 48 if (!$this->doctrine->getConnection()->getDatabasePlatform() instanceof \Doctrine\DBAL\Platforms\SqlitePlatform
49 if (!$this->doctrine->getConnection()->getDriver() instanceof \Doctrine\DBAL\Driver\PDOSqlite\Driver || 49 || !$entity instanceof Entry) {
50 !$entity instanceof Entry) {
51 return; 50 return;
52 } 51 }
53 52
diff --git a/src/Wallabag/CoreBundle/Helper/PreparePagerForEntries.php b/src/Wallabag/CoreBundle/Helper/PreparePagerForEntries.php
index 7d3798b9..df579ebd 100644
--- a/src/Wallabag/CoreBundle/Helper/PreparePagerForEntries.php
+++ b/src/Wallabag/CoreBundle/Helper/PreparePagerForEntries.php
@@ -20,16 +20,15 @@ class PreparePagerForEntries
20 20
21 /** 21 /**
22 * @param AdapterInterface $adapter 22 * @param AdapterInterface $adapter
23 * @param int $page
24 * 23 *
25 * @return null|Pagerfanta 24 * @return null|Pagerfanta
26 */ 25 */
27 public function prepare(AdapterInterface $adapter, $page = 1) 26 public function prepare(AdapterInterface $adapter)
28 { 27 {
29 $user = $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null; 28 $user = $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null;
30 29
31 if (null === $user || !is_object($user)) { 30 if (null === $user || !is_object($user)) {
32 return null; 31 return;
33 } 32 }
34 33
35 $entries = new Pagerfanta($adapter); 34 $entries = new Pagerfanta($adapter);
diff --git a/src/Wallabag/UserBundle/Entity/User.php b/src/Wallabag/UserBundle/Entity/User.php
index 1ff3046a..ed6ce331 100644
--- a/src/Wallabag/UserBundle/Entity/User.php
+++ b/src/Wallabag/UserBundle/Entity/User.php
@@ -64,7 +64,7 @@ class User extends BaseUser implements TwoFactorInterface, TrustedComputerInterf
64 protected $email; 64 protected $email;
65 65
66 /** 66 /**
67 * @var date 67 * @var \DateTime
68 * 68 *
69 * @ORM\Column(name="created_at", type="datetime") 69 * @ORM\Column(name="created_at", type="datetime")
70 * 70 *
@@ -73,7 +73,7 @@ class User extends BaseUser implements TwoFactorInterface, TrustedComputerInterf
73 protected $createdAt; 73 protected $createdAt;
74 74
75 /** 75 /**
76 * @var date 76 * @var \DateTime
77 * 77 *
78 * @ORM\Column(name="updated_at", type="datetime") 78 * @ORM\Column(name="updated_at", type="datetime")
79 * 79 *
@@ -157,7 +157,7 @@ class User extends BaseUser implements TwoFactorInterface, TrustedComputerInterf
157 } 157 }
158 158
159 /** 159 /**
160 * @return string 160 * @return \DateTime
161 */ 161 */
162 public function getCreatedAt() 162 public function getCreatedAt()
163 { 163 {
@@ -165,7 +165,7 @@ class User extends BaseUser implements TwoFactorInterface, TrustedComputerInterf
165 } 165 }
166 166
167 /** 167 /**
168 * @return string 168 * @return \DateTime
169 */ 169 */
170 public function getUpdatedAt() 170 public function getUpdatedAt()
171 { 171 {
diff --git a/src/Wallabag/UserBundle/EventListener/CreateConfigListener.php b/src/Wallabag/UserBundle/EventListener/CreateConfigListener.php
index 0bdd1cae..e4d55c19 100644
--- a/src/Wallabag/UserBundle/EventListener/CreateConfigListener.php
+++ b/src/Wallabag/UserBundle/EventListener/CreateConfigListener.php
@@ -5,7 +5,6 @@ namespace Wallabag\UserBundle\EventListener;
5use Doctrine\ORM\EntityManager; 5use Doctrine\ORM\EntityManager;
6use FOS\UserBundle\Event\UserEvent; 6use FOS\UserBundle\Event\UserEvent;
7use FOS\UserBundle\FOSUserEvents; 7use FOS\UserBundle\FOSUserEvents;
8use Symfony\Component\EventDispatcher\EventDispatcherInterface;
9use Symfony\Component\EventDispatcher\EventSubscriberInterface; 8use Symfony\Component\EventDispatcher\EventSubscriberInterface;
10use Wallabag\CoreBundle\Entity\Config; 9use Wallabag\CoreBundle\Entity\Config;
11 10
@@ -47,7 +46,7 @@ class CreateConfigListener implements EventSubscriberInterface
47 ]; 46 ];
48 } 47 }
49 48
50 public function createConfig(UserEvent $event, $eventName = null, EventDispatcherInterface $eventDispatcher = null) 49 public function createConfig(UserEvent $event)
51 { 50 {
52 $config = new Config($event->getUser()); 51 $config = new Config($event->getUser());
53 $config->setTheme($this->theme); 52 $config->setTheme($this->theme);
diff --git a/tests/Wallabag/ApiBundle/Controller/DeveloperControllerTest.php b/tests/Wallabag/ApiBundle/Controller/DeveloperControllerTest.php
index 6659443b..d37cbbf9 100644
--- a/tests/Wallabag/ApiBundle/Controller/DeveloperControllerTest.php
+++ b/tests/Wallabag/ApiBundle/Controller/DeveloperControllerTest.php
@@ -3,6 +3,7 @@
3namespace Tests\Wallabag\ApiBundle\Controller; 3namespace Tests\Wallabag\ApiBundle\Controller;
4 4
5use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; 5use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
6use Wallabag\ApiBundle\Entity\Client;
6 7
7class DeveloperControllerTest extends WallabagCoreTestCase 8class DeveloperControllerTest extends WallabagCoreTestCase
8{ 9{
@@ -33,14 +34,10 @@ class DeveloperControllerTest extends WallabagCoreTestCase
33 $this->assertContains('My app', $alert[0]); 34 $this->assertContains('My app', $alert[0]);
34 } 35 }
35 36
36 /**
37 * @depends testCreateClient
38 */
39 public function testCreateToken() 37 public function testCreateToken()
40 { 38 {
41 $client = $this->getClient(); 39 $client = $this->getClient();
42 $em = $client->getContainer()->get('doctrine.orm.entity_manager'); 40 $apiClient = $this->createApiClientForUser('admin');
43 $apiClient = $em->getRepository('WallabagApiBundle:Client')->findOneByName('My app');
44 41
45 $client->request('POST', '/oauth/v2/token', [ 42 $client->request('POST', '/oauth/v2/token', [
46 'grant_type' => 'password', 43 'grant_type' => 'password',
@@ -83,6 +80,7 @@ class DeveloperControllerTest extends WallabagCoreTestCase
83 public function testRemoveClient() 80 public function testRemoveClient()
84 { 81 {
85 $client = $this->getClient(); 82 $client = $this->getClient();
83 $adminApiClient = $this->createApiClientForUser('admin');
86 $em = $client->getContainer()->get('doctrine.orm.entity_manager'); 84 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
87 85
88 // Try to remove an admin's client with a wrong user 86 // Try to remove an admin's client with a wrong user
@@ -90,12 +88,8 @@ class DeveloperControllerTest extends WallabagCoreTestCase
90 $client->request('GET', '/developer'); 88 $client->request('GET', '/developer');
91 $this->assertContains('no_client', $client->getResponse()->getContent()); 89 $this->assertContains('no_client', $client->getResponse()->getContent());
92 90
93 // get an ID of a admin's client
94 $this->logInAs('admin');
95 $nbClients = $em->getRepository('WallabagApiBundle:Client')->findByUser($this->getLoggedInUserId());
96
97 $this->logInAs('bob'); 91 $this->logInAs('bob');
98 $client->request('GET', '/developer/client/delete/'.$nbClients[0]->getId()); 92 $client->request('GET', '/developer/client/delete/'.$adminApiClient->getId());
99 $this->assertEquals(403, $client->getResponse()->getStatusCode()); 93 $this->assertEquals(403, $client->getResponse()->getStatusCode());
100 94
101 // Try to remove the admin's client with the good user 95 // Try to remove the admin's client with the good user
@@ -111,7 +105,29 @@ class DeveloperControllerTest extends WallabagCoreTestCase
111 $client->click($link); 105 $client->click($link);
112 $this->assertEquals(302, $client->getResponse()->getStatusCode()); 106 $this->assertEquals(302, $client->getResponse()->getStatusCode());
113 107
114 $newNbClients = $em->getRepository('WallabagApiBundle:Client')->findByUser($this->getLoggedInUserId()); 108 $this->assertNull(
115 $this->assertGreaterThan(count($newNbClients), count($nbClients)); 109 $em->getRepository('WallabagApiBundle:Client')->find($adminApiClient->getId()),
110 'The client should have been removed'
111 );
112 }
113
114 /**
115 * @param string $username
116 *
117 * @return Client
118 */
119 private function createApiClientForUser($username)
120 {
121 $client = $this->getClient();
122 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
123 $userManager = $client->getContainer()->get('fos_user.user_manager');
124 $user = $userManager->findUserBy(array('username' => $username));
125 $apiClient = new Client($user);
126 $apiClient->setName('My app');
127 $apiClient->setAllowedGrantTypes(['password']);
128 $em->persist($apiClient);
129 $em->flush();
130
131 return $apiClient;
116 } 132 }
117} 133}
diff --git a/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php b/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php
index e9ba4634..0968cfaf 100644
--- a/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php
+++ b/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php
@@ -3,8 +3,10 @@
3namespace Tests\Wallabag\ApiBundle\Controller; 3namespace Tests\Wallabag\ApiBundle\Controller;
4 4
5use Tests\Wallabag\ApiBundle\WallabagApiTestCase; 5use Tests\Wallabag\ApiBundle\WallabagApiTestCase;
6use Wallabag\CoreBundle\Entity\Entry;
6use Wallabag\CoreBundle\Entity\Tag; 7use Wallabag\CoreBundle\Entity\Tag;
7use Wallabag\CoreBundle\Helper\ContentProxy; 8use Wallabag\CoreBundle\Helper\ContentProxy;
9use Wallabag\UserBundle\Entity\User;
8 10
9class EntryRestControllerTest extends WallabagApiTestCase 11class EntryRestControllerTest extends WallabagApiTestCase
10{ 12{
@@ -811,22 +813,28 @@ class EntryRestControllerTest extends WallabagApiTestCase
811 813
812 public function testDeleteEntriesTagsListAction() 814 public function testDeleteEntriesTagsListAction()
813 { 815 {
814 $entry = $this->client->getContainer()->get('doctrine.orm.entity_manager') 816 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
815 ->getRepository('WallabagCoreBundle:Entry') 817 $entry = new Entry($em->getReference(User::class, 1));
816 ->findByUrlAndUserId('http://0.0.0.0/entry4', 1); 818 $entry->setUrl('http://0.0.0.0/test-entry');
819 $entry->addTag((new Tag())->setLabel('foo-tag'));
820 $entry->addTag((new Tag())->setLabel('bar-tag'));
821 $em->persist($entry);
822 $em->flush();
817 823
818 $tags = $entry->getTags(); 824 $em->clear();
819
820 $this->assertCount(4, $tags);
821 825
822 $list = [ 826 $list = [
823 [ 827 [
824 'url' => 'http://0.0.0.0/entry4', 828 'url' => 'http://0.0.0.0/test-entry',
825 'tags' => 'new tag 1, new tag 2', 829 'tags' => 'foo-tag, bar-tag',
826 ], 830 ],
827 ]; 831 ];
828 832
829 $this->client->request('DELETE', '/api/entries/tags/list?list='.json_encode($list)); 833 $this->client->request('DELETE', '/api/entries/tags/list?list='.json_encode($list));
834 $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
835
836 $entry = $em->getRepository('WallabagCoreBundle:Entry')->find($entry->getId());
837 $this->assertCount(0, $entry->getTags());
830 } 838 }
831 839
832 public function testPostEntriesListAction() 840 public function testPostEntriesListAction()
@@ -851,9 +859,14 @@ class EntryRestControllerTest extends WallabagApiTestCase
851 859
852 public function testDeleteEntriesListAction() 860 public function testDeleteEntriesListAction()
853 { 861 {
862 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
863 $em->persist((new Entry($em->getReference(User::class, 1)))->setUrl('http://0.0.0.0/test-entry1'));
864
865 $em->flush();
866 $em->clear();
854 $list = [ 867 $list = [
855 'http://www.lemonde.fr/musiques/article/2017/04/23/loin-de-la-politique-le-printemps-de-bourges-retombe-en-enfance_5115862_1654986.html', 868 'http://0.0.0.0/test-entry1',
856 'http://0.0.0.0/entry3', 869 'http://0.0.0.0/test-entry-not-exist',
857 ]; 870 ];
858 871
859 $this->client->request('DELETE', '/api/entries/list?urls='.json_encode($list)); 872 $this->client->request('DELETE', '/api/entries/list?urls='.json_encode($list));
@@ -863,10 +876,10 @@ class EntryRestControllerTest extends WallabagApiTestCase
863 $content = json_decode($this->client->getResponse()->getContent(), true); 876 $content = json_decode($this->client->getResponse()->getContent(), true);
864 877
865 $this->assertTrue($content[0]['entry']); 878 $this->assertTrue($content[0]['entry']);
866 $this->assertEquals('http://www.lemonde.fr/musiques/article/2017/04/23/loin-de-la-politique-le-printemps-de-bourges-retombe-en-enfance_5115862_1654986.html', $content[0]['url']); 879 $this->assertEquals('http://0.0.0.0/test-entry1', $content[0]['url']);
867 880
868 $this->assertFalse($content[1]['entry']); 881 $this->assertFalse($content[1]['entry']);
869 $this->assertEquals('http://0.0.0.0/entry3', $content[1]['url']); 882 $this->assertEquals('http://0.0.0.0/test-entry-not-exist', $content[1]['url']);
870 } 883 }
871 884
872 public function testLimitBulkAction() 885 public function testLimitBulkAction()
diff --git a/tests/Wallabag/ApiBundle/Controller/TagRestControllerTest.php b/tests/Wallabag/ApiBundle/Controller/TagRestControllerTest.php
index 90b132eb..7f69bd67 100644
--- a/tests/Wallabag/ApiBundle/Controller/TagRestControllerTest.php
+++ b/tests/Wallabag/ApiBundle/Controller/TagRestControllerTest.php
@@ -22,36 +22,35 @@ class TagRestControllerTest extends WallabagApiTestCase
22 return end($content); 22 return end($content);
23 } 23 }
24 24
25 /** 25 public function testDeleteUserTag()
26 * @depends testGetUserTags
27 */
28 public function testDeleteUserTag($tag)
29 { 26 {
30 $tagName = $tag['label']; 27 $tagLabel = 'tagtest';
28 $tag = new Tag();
29 $tag->setLabel($tagLabel);
30
31 $em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
32 $em->persist($tag);
33 $em->flush();
34 $em->clear();
31 35
32 $this->client->request('DELETE', '/api/tags/'.$tag['id'].'.json'); 36 $this->client->request('DELETE', '/api/tags/'.$tag->getId().'.json');
33 37
34 $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); 38 $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
35 39
36 $content = json_decode($this->client->getResponse()->getContent(), true); 40 $content = json_decode($this->client->getResponse()->getContent(), true);
37 41
38 $this->assertArrayHasKey('label', $content); 42 $this->assertArrayHasKey('label', $content);
39 $this->assertEquals($tag['label'], $content['label']); 43 $this->assertEquals($tag->getLabel(), $content['label']);
40 $this->assertEquals($tag['slug'], $content['slug']); 44 $this->assertEquals($tag->getSlug(), $content['slug']);
41 45
42 $entries = $this->client->getContainer() 46 $entries = $em->getRepository('WallabagCoreBundle:Entry')
43 ->get('doctrine.orm.entity_manager') 47 ->findAllByTagId($this->user->getId(), $tag->getId());
44 ->getRepository('WallabagCoreBundle:Entry')
45 ->findAllByTagId($this->user->getId(), $tag['id']);
46 48
47 $this->assertCount(0, $entries); 49 $this->assertCount(0, $entries);
48 50
49 $tag = $this->client->getContainer() 51 $tag = $em->getRepository('WallabagCoreBundle:Tag')->findOneByLabel($tagLabel);
50 ->get('doctrine.orm.entity_manager')
51 ->getRepository('WallabagCoreBundle:Tag')
52 ->findOneByLabel($tagName);
53 52
54 $this->assertNull($tag, $tagName.' was removed because it begun an orphan tag'); 53 $this->assertNull($tag, $tagLabel.' was removed because it begun an orphan tag');
55 } 54 }
56 55
57 public function dataForDeletingTagByLabel() 56 public function dataForDeletingTagByLabel()
diff --git a/tests/Wallabag/ApiBundle/WallabagApiTestCase.php b/tests/Wallabag/ApiBundle/WallabagApiTestCase.php
index a67655c8..8709da70 100644
--- a/tests/Wallabag/ApiBundle/WallabagApiTestCase.php
+++ b/tests/Wallabag/ApiBundle/WallabagApiTestCase.php
@@ -8,7 +8,7 @@ use Symfony\Component\BrowserKit\Cookie;
8abstract class WallabagApiTestCase extends WebTestCase 8abstract class WallabagApiTestCase extends WebTestCase
9{ 9{
10 /** 10 /**
11 * @var Client 11 * @var \Symfony\Bundle\FrameworkBundle\Client
12 */ 12 */
13 protected $client = null; 13 protected $client = null;
14 14
@@ -23,7 +23,7 @@ abstract class WallabagApiTestCase extends WebTestCase
23 } 23 }
24 24
25 /** 25 /**
26 * @return Client 26 * @return \Symfony\Bundle\FrameworkBundle\Client
27 */ 27 */
28 protected function createAuthorizedClient() 28 protected function createAuthorizedClient()
29 { 29 {
diff --git a/tests/Wallabag/CoreBundle/Command/ExportCommandTest.php b/tests/Wallabag/CoreBundle/Command/ExportCommandTest.php
index 284efac4..2eebf39b 100644
--- a/tests/Wallabag/CoreBundle/Command/ExportCommandTest.php
+++ b/tests/Wallabag/CoreBundle/Command/ExportCommandTest.php
@@ -55,7 +55,7 @@ class ExportCommandTest extends WallabagCoreTestCase
55 'username' => 'admin', 55 'username' => 'admin',
56 ]); 56 ]);
57 57
58 $this->assertContains('Exporting 6 entrie(s) for user « admin »... Done', $tester->getDisplay()); 58 $this->assertContains('Exporting 5 entrie(s) for user « admin »... Done', $tester->getDisplay());
59 $this->assertFileExists('admin-export.json'); 59 $this->assertFileExists('admin-export.json');
60 } 60 }
61 61
diff --git a/tests/Wallabag/CoreBundle/Command/InstallCommandTest.php b/tests/Wallabag/CoreBundle/Command/InstallCommandTest.php
index 71c2ffc6..94fc0b94 100644
--- a/tests/Wallabag/CoreBundle/Command/InstallCommandTest.php
+++ b/tests/Wallabag/CoreBundle/Command/InstallCommandTest.php
@@ -2,8 +2,11 @@
2 2
3namespace Tests\Wallabag\CoreBundle\Command; 3namespace Tests\Wallabag\CoreBundle\Command;
4 4
5use DAMA\DoctrineTestBundle\Doctrine\DBAL\StaticDriver;
5use Doctrine\Bundle\DoctrineBundle\Command\CreateDatabaseDoctrineCommand; 6use Doctrine\Bundle\DoctrineBundle\Command\CreateDatabaseDoctrineCommand;
6use Doctrine\Bundle\DoctrineBundle\Command\DropDatabaseDoctrineCommand; 7use Doctrine\Bundle\DoctrineBundle\Command\DropDatabaseDoctrineCommand;
8use Doctrine\DBAL\Platforms\PostgreSqlPlatform;
9use Doctrine\DBAL\Platforms\SqlitePlatform;
7use Symfony\Bundle\FrameworkBundle\Console\Application; 10use Symfony\Bundle\FrameworkBundle\Console\Application;
8use Symfony\Component\Console\Input\ArrayInput; 11use Symfony\Component\Console\Input\ArrayInput;
9use Symfony\Component\Console\Output\NullOutput; 12use Symfony\Component\Console\Output\NullOutput;
@@ -18,7 +21,9 @@ class InstallCommandTest extends WallabagCoreTestCase
18 { 21 {
19 parent::setUp(); 22 parent::setUp();
20 23
21 if ($this->getClient()->getContainer()->get('doctrine')->getConnection()->getDriver() instanceof \Doctrine\DBAL\Driver\PDOPgSql\Driver) { 24 /** @var \Doctrine\DBAL\Connection $connection */
25 $connection = $this->getClient()->getContainer()->get('doctrine')->getConnection();
26 if ($connection->getDatabasePlatform() instanceof PostgreSqlPlatform) {
22 /* 27 /*
23 * LOG: statement: CREATE DATABASE "wallabag" 28 * LOG: statement: CREATE DATABASE "wallabag"
24 * ERROR: source database "template1" is being accessed by other users 29 * ERROR: source database "template1" is being accessed by other users
@@ -30,34 +35,44 @@ class InstallCommandTest extends WallabagCoreTestCase
30 */ 35 */
31 $this->markTestSkipped('PostgreSQL spotted: can\'t find a good way to drop current database, skipping.'); 36 $this->markTestSkipped('PostgreSQL spotted: can\'t find a good way to drop current database, skipping.');
32 } 37 }
33 }
34 38
35 /** 39 if ($connection->getDatabasePlatform() instanceof SqlitePlatform) {
36 * Ensure next tests will have a clean database. 40 // Environnement variable useful only for sqlite to avoid the error "attempt to write a readonly database"
37 */ 41 // We can't define always this environnement variable because pdo_mysql seems to use it
38 public static function tearDownAfterClass() 42 // and we have the error:
39 { 43 // SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax;
40 $application = new Application(static::$kernel); 44 // check the manual that corresponds to your MariaDB server version for the right syntax to use
41 $application->setAutoExit(false); 45 // near '/tmp/wallabag_testTYj1kp' at line 1
46 $databasePath = tempnam(sys_get_temp_dir(), 'wallabag_test');
47 putenv("TEST_DATABASE_PATH=$databasePath");
48
49 // The environnement has been changed, recreate the client in order to update connection
50 parent::setUp();
51 }
42 52
43 $application->run(new ArrayInput([ 53 // disable doctrine-test-bundle
44 'command' => 'doctrine:schema:drop', 54 StaticDriver::setKeepStaticConnections(false);
45 '--no-interaction' => true,
46 '--force' => true,
47 '--env' => 'test',
48 ]), new NullOutput());
49 55
50 $application->run(new ArrayInput([ 56 $this->resetDatabase($this->getClient());
51 'command' => 'doctrine:schema:create', 57 }
52 '--no-interaction' => true,
53 '--env' => 'test',
54 ]), new NullOutput());
55 58
56 $application->run(new ArrayInput([ 59 public function tearDown()
57 'command' => 'doctrine:fixtures:load', 60 {
58 '--no-interaction' => true, 61 $databasePath = getenv('TEST_DATABASE_PATH');
59 '--env' => 'test', 62 // Remove variable environnement
60 ]), new NullOutput()); 63 putenv('TEST_DATABASE_PATH');
64 if ($databasePath && file_exists($databasePath)) {
65 unlink($databasePath);
66 } else {
67 // Create a new client to avoid the error:
68 // Transaction commit failed because the transaction has been marked for rollback only.
69 $client = static::createClient();
70 $this->resetDatabase($client);
71 }
72
73 // enable doctrine-test-bundle
74 StaticDriver::setKeepStaticConnections(true);
75 parent::tearDown();
61 } 76 }
62 77
63 public function testRunInstallCommand() 78 public function testRunInstallCommand()
@@ -120,7 +135,7 @@ class InstallCommandTest extends WallabagCoreTestCase
120 { 135 {
121 // skipped SQLite check when database is removed because while testing for the connection, 136 // skipped SQLite check when database is removed because while testing for the connection,
122 // the driver will create the file (so the database) before testing if database exist 137 // the driver will create the file (so the database) before testing if database exist
123 if ($this->getClient()->getContainer()->get('doctrine')->getConnection()->getDriver() instanceof \Doctrine\DBAL\Driver\PDOSqlite\Driver) { 138 if ($this->getClient()->getContainer()->get('doctrine')->getConnection()->getDatabasePlatform() instanceof \Doctrine\DBAL\Platforms\SqlitePlatform) {
124 $this->markTestSkipped('SQLite spotted: can\'t test with database removed.'); 139 $this->markTestSkipped('SQLite spotted: can\'t test with database removed.');
125 } 140 }
126 141
diff --git a/tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php b/tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php
index 35888f16..5bc815ee 100644
--- a/tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php
+++ b/tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php
@@ -67,8 +67,17 @@ class ConfigControllerTest extends WallabagCoreTestCase
67 public function testChangeReadingSpeed() 67 public function testChangeReadingSpeed()
68 { 68 {
69 $this->logInAs('admin'); 69 $this->logInAs('admin');
70 $this->useTheme('baggy');
70 $client = $this->getClient(); 71 $client = $this->getClient();
71 72
73 $entry = new Entry($this->getLoggedInUser());
74 $entry->setUrl('http://0.0.0.0/test-entry1')
75 ->setReadingTime(22);
76 $this->getEntityManager()->persist($entry);
77
78 $this->getEntityManager()->flush();
79 $this->getEntityManager()->clear();
80
72 $crawler = $client->request('GET', '/unread/list'); 81 $crawler = $client->request('GET', '/unread/list');
73 $form = $crawler->filter('button[id=submit-filter]')->form(); 82 $form = $crawler->filter('button[id=submit-filter]')->form();
74 $dataFilters = [ 83 $dataFilters = [
@@ -409,6 +418,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
409 public function testTaggingRuleCreation() 418 public function testTaggingRuleCreation()
410 { 419 {
411 $this->logInAs('admin'); 420 $this->logInAs('admin');
421 $this->useTheme('baggy');
412 $client = $this->getClient(); 422 $client = $this->getClient();
413 423
414 $crawler = $client->request('GET', '/config'); 424 $crawler = $client->request('GET', '/config');
@@ -939,6 +949,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
939 public function testSwitchViewMode() 949 public function testSwitchViewMode()
940 { 950 {
941 $this->logInAs('admin'); 951 $this->logInAs('admin');
952 $this->useTheme('baggy');
942 $client = $this->getClient(); 953 $client = $this->getClient();
943 954
944 $client->request('GET', '/unread/list'); 955 $client->request('GET', '/unread/list');
diff --git a/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php b/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php
index 116e5f32..cc7b3672 100644
--- a/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php
+++ b/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php
@@ -71,6 +71,7 @@ class EntryControllerTest extends WallabagCoreTestCase
71 public function testGetNew() 71 public function testGetNew()
72 { 72 {
73 $this->logInAs('admin'); 73 $this->logInAs('admin');
74 $this->useTheme('baggy');
74 $client = $this->getClient(); 75 $client = $this->getClient();
75 76
76 $crawler = $client->request('GET', '/new'); 77 $crawler = $client->request('GET', '/new');
@@ -84,6 +85,7 @@ class EntryControllerTest extends WallabagCoreTestCase
84 public function testPostNewViaBookmarklet() 85 public function testPostNewViaBookmarklet()
85 { 86 {
86 $this->logInAs('admin'); 87 $this->logInAs('admin');
88 $this->useTheme('baggy');
87 $client = $this->getClient(); 89 $client = $this->getClient();
88 90
89 $crawler = $client->request('GET', '/'); 91 $crawler = $client->request('GET', '/');
@@ -195,6 +197,12 @@ class EntryControllerTest extends WallabagCoreTestCase
195 public function testPostNewOkUrlExist() 197 public function testPostNewOkUrlExist()
196 { 198 {
197 $this->logInAs('admin'); 199 $this->logInAs('admin');
200
201 $entry = new Entry($this->getLoggedInUser());
202 $entry->setUrl($this->url);
203 $this->getEntityManager()->persist($entry);
204 $this->getEntityManager()->flush();
205
198 $client = $this->getClient(); 206 $client = $this->getClient();
199 207
200 $crawler = $client->request('GET', '/new'); 208 $crawler = $client->request('GET', '/new');
@@ -288,7 +296,7 @@ class EntryControllerTest extends WallabagCoreTestCase
288 $tags = $entry->getTags(); 296 $tags = $entry->getTags();
289 297
290 $this->assertCount(2, $tags); 298 $this->assertCount(2, $tags);
291 $this->assertEquals('wallabag', $tags[0]->getLabel()); 299 $this->assertContains('wallabag', $tags);
292 300
293 $em->remove($entry); 301 $em->remove($entry);
294 $em->flush(); 302 $em->flush();
@@ -317,7 +325,7 @@ class EntryControllerTest extends WallabagCoreTestCase
317 $tags = $entry->getTags(); 325 $tags = $entry->getTags();
318 326
319 $this->assertCount(2, $tags); 327 $this->assertCount(2, $tags);
320 $this->assertEquals('wallabag', $tags[1]->getLabel()); 328 $this->assertContains('wallabag', $tags);
321 329
322 $em->remove($entry); 330 $em->remove($entry);
323 $em->flush(); 331 $em->flush();
@@ -364,24 +372,23 @@ class EntryControllerTest extends WallabagCoreTestCase
364 $this->assertEquals('/all/list', $client->getResponse()->getTargetUrl()); 372 $this->assertEquals('/all/list', $client->getResponse()->getTargetUrl());
365 } 373 }
366 374
367 /**
368 * @depends testPostNewOk
369 */
370 public function testView() 375 public function testView()
371 { 376 {
372 $this->logInAs('admin'); 377 $this->logInAs('admin');
373 $client = $this->getClient(); 378 $client = $this->getClient();
374 379
375 $content = $client->getContainer() 380 $entry = new Entry($this->getLoggedInUser());
376 ->get('doctrine.orm.entity_manager') 381 $entry->setUrl('http://example.com/foo');
377 ->getRepository('WallabagCoreBundle:Entry') 382 $entry->setTitle('title foo');
378 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId()); 383 $entry->setContent('foo bar baz');
384 $this->getEntityManager()->persist($entry);
385 $this->getEntityManager()->flush();
379 386
380 $crawler = $client->request('GET', '/view/'.$content->getId()); 387 $crawler = $client->request('GET', '/view/'.$entry->getId());
381 388
382 $this->assertEquals(200, $client->getResponse()->getStatusCode()); 389 $this->assertEquals(200, $client->getResponse()->getStatusCode());
383 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); 390 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
384 $this->assertContains($content->getTitle(), $body[0]); 391 $this->assertContains($entry->getTitle(), $body[0]);
385 } 392 }
386 393
387 /** 394 /**
@@ -394,27 +401,23 @@ class EntryControllerTest extends WallabagCoreTestCase
394 $this->logInAs('admin'); 401 $this->logInAs('admin');
395 $client = $this->getClient(); 402 $client = $this->getClient();
396 403
397 $em = $client->getContainer() 404 $entry = new Entry($this->getLoggedInUser());
398 ->get('doctrine.orm.entity_manager'); 405 $entry->setUrl($this->url);
406 $entry->setTitle('title foo');
407 $entry->setContent('');
408 $this->getEntityManager()->persist($entry);
409 $this->getEntityManager()->flush();
410 $this->getEntityManager()->clear();
399 411
400 $content = $em 412 $client->request('GET', '/reload/'.$entry->getId());
401 ->getRepository('WallabagCoreBundle:Entry')
402 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
403
404 // empty content
405 $content->setContent('');
406 $em->persist($content);
407 $em->flush();
408
409 $client->request('GET', '/reload/'.$content->getId());
410 413
411 $this->assertEquals(302, $client->getResponse()->getStatusCode()); 414 $this->assertEquals(302, $client->getResponse()->getStatusCode());
412 415
413 $content = $em 416 $entry = $this->getEntityManager()
414 ->getRepository('WallabagCoreBundle:Entry') 417 ->getRepository('WallabagCoreBundle:Entry')
415 ->find($content->getId()); 418 ->find($entry->getId());
416 419
417 $this->assertNotEmpty($content->getContent()); 420 $this->assertNotEmpty($entry->getContent());
418 } 421 }
419 422
420 /** 423 /**
@@ -425,32 +428,21 @@ class EntryControllerTest extends WallabagCoreTestCase
425 $this->logInAs('admin'); 428 $this->logInAs('admin');
426 $client = $this->getClient(); 429 $client = $this->getClient();
427 430
428 $em = $client->getContainer() 431 $entry = new Entry($this->getLoggedInUser());
429 ->get('doctrine.orm.entity_manager'); 432 $entry->setUrl('http://0.0.0.0/failed.html');
430 433 $this->getEntityManager()->persist($entry);
431 $content = $em 434 $this->getEntityManager()->flush();
432 ->getRepository('WallabagCoreBundle:Entry')
433 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
434
435 // put a known failed url
436 $content->setUrl('http://0.0.0.0/failed.html');
437 $em->persist($content);
438 $em->flush();
439 435
440 $client->request('GET', '/reload/'.$content->getId()); 436 $client->request('GET', '/reload/'.$entry->getId());
441 437
442 $this->assertEquals(302, $client->getResponse()->getStatusCode()); 438 $this->assertEquals(302, $client->getResponse()->getStatusCode());
443 439
444 // force EntityManager to clear previous entity 440 // force EntityManager to clear previous entity
445 // otherwise, retrieve the same entity will retrieve change from the previous request :0 441 // otherwise, retrieve the same entity will retrieve change from the previous request :0
446 $em->clear(); 442 $this->getEntityManager()->clear();
447 $newContent = $em 443 $newContent = $this->getEntityManager()
448 ->getRepository('WallabagCoreBundle:Entry') 444 ->getRepository('WallabagCoreBundle:Entry')
449 ->find($content->getId()); 445 ->find($entry->getId());
450
451 $newContent->setUrl($this->url);
452 $em->persist($newContent);
453 $em->flush();
454 446
455 $this->assertNotEquals($client->getContainer()->getParameter('wallabag_core.fetching_error_message'), $newContent->getContent()); 447 $this->assertNotEquals($client->getContainer()->getParameter('wallabag_core.fetching_error_message'), $newContent->getContent());
456 } 448 }
@@ -460,12 +452,12 @@ class EntryControllerTest extends WallabagCoreTestCase
460 $this->logInAs('admin'); 452 $this->logInAs('admin');
461 $client = $this->getClient(); 453 $client = $this->getClient();
462 454
463 $content = $client->getContainer() 455 $entry = new Entry($this->getLoggedInUser());
464 ->get('doctrine.orm.entity_manager') 456 $entry->setUrl($this->url);
465 ->getRepository('WallabagCoreBundle:Entry') 457 $this->getEntityManager()->persist($entry);
466 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId()); 458 $this->getEntityManager()->flush();
467 459
468 $crawler = $client->request('GET', '/edit/'.$content->getId()); 460 $crawler = $client->request('GET', '/edit/'.$entry->getId());
469 461
470 $this->assertEquals(200, $client->getResponse()->getStatusCode()); 462 $this->assertEquals(200, $client->getResponse()->getStatusCode());
471 463
@@ -478,12 +470,12 @@ class EntryControllerTest extends WallabagCoreTestCase
478 $this->logInAs('admin'); 470 $this->logInAs('admin');
479 $client = $this->getClient(); 471 $client = $this->getClient();
480 472
481 $content = $client->getContainer() 473 $entry = new Entry($this->getLoggedInUser());
482 ->get('doctrine.orm.entity_manager') 474 $entry->setUrl($this->url);
483 ->getRepository('WallabagCoreBundle:Entry') 475 $this->getEntityManager()->persist($entry);
484 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId()); 476 $this->getEntityManager()->flush();
485 477
486 $crawler = $client->request('GET', '/edit/'.$content->getId()); 478 $crawler = $client->request('GET', '/edit/'.$entry->getId());
487 479
488 $this->assertEquals(200, $client->getResponse()->getStatusCode()); 480 $this->assertEquals(200, $client->getResponse()->getStatusCode());
489 481
@@ -508,19 +500,20 @@ class EntryControllerTest extends WallabagCoreTestCase
508 $this->logInAs('admin'); 500 $this->logInAs('admin');
509 $client = $this->getClient(); 501 $client = $this->getClient();
510 502
511 $content = $client->getContainer() 503 $entry = new Entry($this->getLoggedInUser());
512 ->get('doctrine.orm.entity_manager') 504 $entry->setUrl($this->url);
513 ->getRepository('WallabagCoreBundle:Entry') 505 $this->getEntityManager()->persist($entry);
514 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId()); 506 $this->getEntityManager()->flush();
507 $this->getEntityManager()->clear();
515 508
516 $client->request('GET', '/archive/'.$content->getId()); 509 $client->request('GET', '/archive/'.$entry->getId());
517 510
518 $this->assertEquals(302, $client->getResponse()->getStatusCode()); 511 $this->assertEquals(302, $client->getResponse()->getStatusCode());
519 512
520 $res = $client->getContainer() 513 $res = $client->getContainer()
521 ->get('doctrine.orm.entity_manager') 514 ->get('doctrine.orm.entity_manager')
522 ->getRepository('WallabagCoreBundle:Entry') 515 ->getRepository('WallabagCoreBundle:Entry')
523 ->find($content->getId()); 516 ->find($entry->getId());
524 517
525 $this->assertEquals($res->isArchived(), true); 518 $this->assertEquals($res->isArchived(), true);
526 } 519 }
@@ -530,19 +523,20 @@ class EntryControllerTest extends WallabagCoreTestCase
530 $this->logInAs('admin'); 523 $this->logInAs('admin');
531 $client = $this->getClient(); 524 $client = $this->getClient();
532 525
533 $content = $client->getContainer() 526 $entry = new Entry($this->getLoggedInUser());
534 ->get('doctrine.orm.entity_manager') 527 $entry->setUrl($this->url);
535 ->getRepository('WallabagCoreBundle:Entry') 528 $this->getEntityManager()->persist($entry);
536 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId()); 529 $this->getEntityManager()->flush();
530 $this->getEntityManager()->clear();
537 531
538 $client->request('GET', '/star/'.$content->getId()); 532 $client->request('GET', '/star/'.$entry->getId());
539 533
540 $this->assertEquals(302, $client->getResponse()->getStatusCode()); 534 $this->assertEquals(302, $client->getResponse()->getStatusCode());
541 535
542 $res = $client->getContainer() 536 $res = $client->getContainer()
543 ->get('doctrine.orm.entity_manager') 537 ->get('doctrine.orm.entity_manager')
544 ->getRepository('WallabagCoreBundle:Entry') 538 ->getRepository('WallabagCoreBundle:Entry')
545 ->findOneById($content->getId()); 539 ->findOneById($entry->getId());
546 540
547 $this->assertEquals($res->isStarred(), true); 541 $this->assertEquals($res->isStarred(), true);
548 } 542 }
@@ -552,16 +546,16 @@ class EntryControllerTest extends WallabagCoreTestCase
552 $this->logInAs('admin'); 546 $this->logInAs('admin');
553 $client = $this->getClient(); 547 $client = $this->getClient();
554 548
555 $content = $client->getContainer() 549 $entry = new Entry($this->getLoggedInUser());
556 ->get('doctrine.orm.entity_manager') 550 $entry->setUrl($this->url);
557 ->getRepository('WallabagCoreBundle:Entry') 551 $this->getEntityManager()->persist($entry);
558 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId()); 552 $this->getEntityManager()->flush();
559 553
560 $client->request('GET', '/delete/'.$content->getId()); 554 $client->request('GET', '/delete/'.$entry->getId());
561 555
562 $this->assertEquals(302, $client->getResponse()->getStatusCode()); 556 $this->assertEquals(302, $client->getResponse()->getStatusCode());
563 557
564 $client->request('GET', '/delete/'.$content->getId()); 558 $client->request('GET', '/delete/'.$entry->getId());
565 559
566 $this->assertEquals(404, $client->getResponse()->getStatusCode()); 560 $this->assertEquals(404, $client->getResponse()->getStatusCode());
567 } 561 }
@@ -627,7 +621,13 @@ class EntryControllerTest extends WallabagCoreTestCase
627 public function testFilterOnReadingTime() 621 public function testFilterOnReadingTime()
628 { 622 {
629 $this->logInAs('admin'); 623 $this->logInAs('admin');
624 $this->useTheme('baggy');
630 $client = $this->getClient(); 625 $client = $this->getClient();
626 $entry = new Entry($this->getLoggedInUser());
627 $entry->setUrl($this->url);
628 $entry->setReadingTime(22);
629 $this->getEntityManager()->persist($entry);
630 $this->getEntityManager()->flush();
631 631
632 $crawler = $client->request('GET', '/unread/list'); 632 $crawler = $client->request('GET', '/unread/list');
633 633
@@ -666,9 +666,20 @@ class EntryControllerTest extends WallabagCoreTestCase
666 public function testFilterOnReadingTimeOnlyUpper() 666 public function testFilterOnReadingTimeOnlyUpper()
667 { 667 {
668 $this->logInAs('admin'); 668 $this->logInAs('admin');
669 $this->useTheme('baggy');
669 $client = $this->getClient(); 670 $client = $this->getClient();
670 671
671 $crawler = $client->request('GET', '/unread/list'); 672 $crawler = $client->request('GET', '/all/list');
673 $this->assertCount(5, $crawler->filter('div[class=entry]'));
674
675 $entry = new Entry($this->getLoggedInUser());
676 $entry->setUrl($this->url);
677 $entry->setReadingTime(23);
678 $this->getEntityManager()->persist($entry);
679 $this->getEntityManager()->flush();
680
681 $crawler = $client->request('GET', '/all/list');
682 $this->assertCount(6, $crawler->filter('div[class=entry]'));
672 683
673 $form = $crawler->filter('button[id=submit-filter]')->form(); 684 $form = $crawler->filter('button[id=submit-filter]')->form();
674 685
@@ -678,12 +689,13 @@ class EntryControllerTest extends WallabagCoreTestCase
678 689
679 $crawler = $client->submit($form, $data); 690 $crawler = $client->submit($form, $data);
680 691
681 $this->assertCount(3, $crawler->filter('div[class=entry]')); 692 $this->assertCount(5, $crawler->filter('div[class=entry]'));
682 } 693 }
683 694
684 public function testFilterOnReadingTimeOnlyLower() 695 public function testFilterOnReadingTimeOnlyLower()
685 { 696 {
686 $this->logInAs('admin'); 697 $this->logInAs('admin');
698 $this->useTheme('baggy');
687 $client = $this->getClient(); 699 $client = $this->getClient();
688 700
689 $crawler = $client->request('GET', '/unread/list'); 701 $crawler = $client->request('GET', '/unread/list');
@@ -696,12 +708,22 @@ class EntryControllerTest extends WallabagCoreTestCase
696 708
697 $crawler = $client->submit($form, $data); 709 $crawler = $client->submit($form, $data);
698 710
699 $this->assertCount(4, $crawler->filter('div[class=entry]')); 711 $this->assertCount(0, $crawler->filter('div[class=entry]'));
712
713 $entry = new Entry($this->getLoggedInUser());
714 $entry->setUrl($this->url);
715 $entry->setReadingTime(23);
716 $this->getEntityManager()->persist($entry);
717 $this->getEntityManager()->flush();
718
719 $crawler = $client->submit($form, $data);
720 $this->assertCount(1, $crawler->filter('div[class=entry]'));
700 } 721 }
701 722
702 public function testFilterOnUnreadStatus() 723 public function testFilterOnUnreadStatus()
703 { 724 {
704 $this->logInAs('admin'); 725 $this->logInAs('admin');
726 $this->useTheme('baggy');
705 $client = $this->getClient(); 727 $client = $this->getClient();
706 728
707 $crawler = $client->request('GET', '/all/list'); 729 $crawler = $client->request('GET', '/all/list');
@@ -714,12 +736,23 @@ class EntryControllerTest extends WallabagCoreTestCase
714 736
715 $crawler = $client->submit($form, $data); 737 $crawler = $client->submit($form, $data);
716 738
739 $this->assertCount(4, $crawler->filter('div[class=entry]'));
740
741 $entry = new Entry($this->getLoggedInUser());
742 $entry->setUrl($this->url);
743 $entry->setArchived(false);
744 $this->getEntityManager()->persist($entry);
745 $this->getEntityManager()->flush();
746
747 $crawler = $client->submit($form, $data);
748
717 $this->assertCount(5, $crawler->filter('div[class=entry]')); 749 $this->assertCount(5, $crawler->filter('div[class=entry]'));
718 } 750 }
719 751
720 public function testFilterOnCreationDate() 752 public function testFilterOnCreationDate()
721 { 753 {
722 $this->logInAs('admin'); 754 $this->logInAs('admin');
755 $this->useTheme('baggy');
723 $client = $this->getClient(); 756 $client = $this->getClient();
724 757
725 $crawler = $client->request('GET', '/unread/list'); 758 $crawler = $client->request('GET', '/unread/list');
@@ -733,7 +766,7 @@ class EntryControllerTest extends WallabagCoreTestCase
733 766
734 $crawler = $client->submit($form, $data); 767 $crawler = $client->submit($form, $data);
735 768
736 $this->assertCount(6, $crawler->filter('div[class=entry]')); 769 $this->assertCount(5, $crawler->filter('div[class=entry]'));
737 770
738 $data = [ 771 $data = [
739 'entry_filter[createdAt][left_date]' => date('d/m/Y'), 772 'entry_filter[createdAt][left_date]' => date('d/m/Y'),
@@ -742,7 +775,7 @@ class EntryControllerTest extends WallabagCoreTestCase
742 775
743 $crawler = $client->submit($form, $data); 776 $crawler = $client->submit($form, $data);
744 777
745 $this->assertCount(6, $crawler->filter('div[class=entry]')); 778 $this->assertCount(5, $crawler->filter('div[class=entry]'));
746 779
747 $data = [ 780 $data = [
748 'entry_filter[createdAt][left_date]' => '01/01/1970', 781 'entry_filter[createdAt][left_date]' => '01/01/1970',
@@ -786,6 +819,7 @@ class EntryControllerTest extends WallabagCoreTestCase
786 public function testFilterOnDomainName() 819 public function testFilterOnDomainName()
787 { 820 {
788 $this->logInAs('admin'); 821 $this->logInAs('admin');
822 $this->useTheme('baggy');
789 $client = $this->getClient(); 823 $client = $this->getClient();
790 824
791 $crawler = $client->request('GET', '/unread/list'); 825 $crawler = $client->request('GET', '/unread/list');
@@ -818,6 +852,7 @@ class EntryControllerTest extends WallabagCoreTestCase
818 public function testFilterOnStatus() 852 public function testFilterOnStatus()
819 { 853 {
820 $this->logInAs('admin'); 854 $this->logInAs('admin');
855 $this->useTheme('baggy');
821 $client = $this->getClient(); 856 $client = $this->getClient();
822 857
823 $crawler = $client->request('GET', '/unread/list'); 858 $crawler = $client->request('GET', '/unread/list');
@@ -839,6 +874,7 @@ class EntryControllerTest extends WallabagCoreTestCase
839 public function testPreviewPictureFilter() 874 public function testPreviewPictureFilter()
840 { 875 {
841 $this->logInAs('admin'); 876 $this->logInAs('admin');
877 $this->useTheme('baggy');
842 $client = $this->getClient(); 878 $client = $this->getClient();
843 879
844 $crawler = $client->request('GET', '/unread/list'); 880 $crawler = $client->request('GET', '/unread/list');
@@ -846,14 +882,21 @@ class EntryControllerTest extends WallabagCoreTestCase
846 $form['entry_filter[previewPicture]']->tick(); 882 $form['entry_filter[previewPicture]']->tick();
847 883
848 $crawler = $client->submit($form); 884 $crawler = $client->submit($form);
849 $this->assertCount(2, $crawler->filter('div[class=entry]')); 885 $this->assertCount(1, $crawler->filter('div[class=entry]'));
850 } 886 }
851 887
852 public function testFilterOnLanguage() 888 public function testFilterOnLanguage()
853 { 889 {
854 $this->logInAs('admin'); 890 $this->logInAs('admin');
891 $this->useTheme('baggy');
855 $client = $this->getClient(); 892 $client = $this->getClient();
856 893
894 $entry = new Entry($this->getLoggedInUser());
895 $entry->setUrl($this->url);
896 $entry->setLanguage('fr');
897 $this->getEntityManager()->persist($entry);
898 $this->getEntityManager()->flush();
899
857 $crawler = $client->request('GET', '/unread/list'); 900 $crawler = $client->request('GET', '/unread/list');
858 $form = $crawler->filter('button[id=submit-filter]')->form(); 901 $form = $crawler->filter('button[id=submit-filter]')->form();
859 $data = [ 902 $data = [
@@ -877,10 +920,14 @@ class EntryControllerTest extends WallabagCoreTestCase
877 $this->logInAs('admin'); 920 $this->logInAs('admin');
878 $client = $this->getClient(); 921 $client = $this->getClient();
879 922
880 $content = $client->getContainer() 923 // sharing is enabled
881 ->get('doctrine.orm.entity_manager') 924 $client->getContainer()->get('craue_config')->set('share_public', 1);
882 ->getRepository('WallabagCoreBundle:Entry') 925
883 ->findOneByUser($this->getLoggedInUserId()); 926 $content = new Entry($this->getLoggedInUser());
927 $content->setUrl($this->url);
928 $this->getEntityManager()->persist($content);
929 $this->getEntityManager()->flush();
930 $this->getEntityManager()->clear();
884 931
885 // no uid 932 // no uid
886 $client->request('GET', '/share/'.$content->getUid()); 933 $client->request('GET', '/share/'.$content->getUid());
@@ -970,6 +1017,20 @@ class EntryControllerTest extends WallabagCoreTestCase
970 $url = 'http://www.20minutes.fr/montpellier/1952003-20161030-video-car-tombe-panne-rugbymen-perpignan-improvisent-melee-route'; 1017 $url = 'http://www.20minutes.fr/montpellier/1952003-20161030-video-car-tombe-panne-rugbymen-perpignan-improvisent-melee-route';
971 $client->getContainer()->get('craue_config')->set('download_images_enabled', 1); 1018 $client->getContainer()->get('craue_config')->set('download_images_enabled', 1);
972 1019
1020 $crawler = $client->request('GET', '/new');
1021
1022 $this->assertEquals(200, $client->getResponse()->getStatusCode());
1023
1024 $form = $crawler->filter('form[name=entry]')->form();
1025
1026 $data = [
1027 'entry[url]' => $url,
1028 ];
1029
1030 $client->submit($form, $data);
1031
1032 $this->assertEquals(302, $client->getResponse()->getStatusCode());
1033
973 $content = $client->getContainer() 1034 $content = $client->getContainer()
974 ->get('doctrine.orm.entity_manager') 1035 ->get('doctrine.orm.entity_manager')
975 ->getRepository('WallabagCoreBundle:Entry') 1036 ->getRepository('WallabagCoreBundle:Entry')
@@ -987,28 +1048,19 @@ class EntryControllerTest extends WallabagCoreTestCase
987 $this->logInAs('empty'); 1048 $this->logInAs('empty');
988 $client = $this->getClient(); 1049 $client = $this->getClient();
989 1050
990 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
991 $user = $em
992 ->getRepository('WallabagUserBundle:User')
993 ->find($this->getLoggedInUserId());
994
995 if (!$user) {
996 $this->markTestSkipped('No user found in db.');
997 }
998
999 // Redirect to homepage 1051 // Redirect to homepage
1000 $config = $user->getConfig(); 1052 $config = $this->getLoggedInUser()->getConfig();
1001 $config->setActionMarkAsRead(Config::REDIRECT_TO_HOMEPAGE); 1053 $config->setActionMarkAsRead(Config::REDIRECT_TO_HOMEPAGE);
1002 $em->persist($config); 1054 $this->getEntityManager()->persist($config);
1003 $em->flush();
1004 1055
1005 $content = $client->getContainer() 1056 $entry = new Entry($this->getLoggedInUser());
1006 ->get('doctrine.orm.entity_manager') 1057 $entry->setUrl($this->url);
1007 ->getRepository('WallabagCoreBundle:Entry') 1058 $this->getEntityManager()->persist($entry);
1008 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
1009 1059
1010 $client->request('GET', '/view/'.$content->getId()); 1060 $this->getEntityManager()->flush();
1011 $client->request('GET', '/archive/'.$content->getId()); 1061
1062 $client->request('GET', '/view/'.$entry->getId());
1063 $client->request('GET', '/archive/'.$entry->getId());
1012 1064
1013 $this->assertEquals(302, $client->getResponse()->getStatusCode()); 1065 $this->assertEquals(302, $client->getResponse()->getStatusCode());
1014 $this->assertEquals('/', $client->getResponse()->headers->get('location')); 1066 $this->assertEquals('/', $client->getResponse()->headers->get('location'));
@@ -1019,46 +1071,36 @@ class EntryControllerTest extends WallabagCoreTestCase
1019 $this->logInAs('empty'); 1071 $this->logInAs('empty');
1020 $client = $this->getClient(); 1072 $client = $this->getClient();
1021 1073
1022 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
1023 $user = $em
1024 ->getRepository('WallabagUserBundle:User')
1025 ->find($this->getLoggedInUserId());
1026
1027 if (!$user) {
1028 $this->markTestSkipped('No user found in db.');
1029 }
1030
1031 // Redirect to current page 1074 // Redirect to current page
1032 $config = $user->getConfig(); 1075 $config = $this->getLoggedInUser()->getConfig();
1033 $config->setActionMarkAsRead(Config::REDIRECT_TO_CURRENT_PAGE); 1076 $config->setActionMarkAsRead(Config::REDIRECT_TO_CURRENT_PAGE);
1034 $em->persist($config); 1077 $this->getEntityManager()->persist($config);
1035 $em->flush();
1036 1078
1037 $content = $client->getContainer() 1079 $entry = new Entry($this->getLoggedInUser());
1038 ->get('doctrine.orm.entity_manager') 1080 $entry->setUrl($this->url);
1039 ->getRepository('WallabagCoreBundle:Entry') 1081 $this->getEntityManager()->persist($entry);
1040 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
1041 1082
1042 $client->request('GET', '/view/'.$content->getId()); 1083 $this->getEntityManager()->flush();
1043 $client->request('GET', '/archive/'.$content->getId()); 1084
1085 $client->request('GET', '/view/'.$entry->getId());
1086 $client->request('GET', '/archive/'.$entry->getId());
1044 1087
1045 $this->assertEquals(302, $client->getResponse()->getStatusCode()); 1088 $this->assertEquals(302, $client->getResponse()->getStatusCode());
1046 $this->assertContains('/view/'.$content->getId(), $client->getResponse()->headers->get('location')); 1089 $this->assertContains('/view/'.$entry->getId(), $client->getResponse()->headers->get('location'));
1047 } 1090 }
1048 1091
1049 public function testFilterOnHttpStatus() 1092 public function testFilterOnHttpStatus()
1050 { 1093 {
1051 $this->logInAs('admin'); 1094 $this->logInAs('admin');
1095 $this->useTheme('baggy');
1052 $client = $this->getClient(); 1096 $client = $this->getClient();
1053 1097
1054 $crawler = $client->request('GET', '/new'); 1098 $entry = new Entry($this->getLoggedInUser());
1055 $form = $crawler->filter('form[name=entry]')->form(); 1099 $entry->setUrl('http://www.lemonde.fr/incorrect-url/');
1100 $entry->setHttpStatus(404);
1101 $this->getEntityManager()->persist($entry);
1056 1102
1057 $data = [ 1103 $this->getEntityManager()->flush();
1058 'entry[url]' => 'http://www.lemonde.fr/incorrect-url/',
1059 ];
1060
1061 $client->submit($form, $data);
1062 1104
1063 $crawler = $client->request('GET', '/all/list'); 1105 $crawler = $client->request('GET', '/all/list');
1064 $form = $crawler->filter('button[id=submit-filter]')->form(); 1106 $form = $crawler->filter('button[id=submit-filter]')->form();
@@ -1071,14 +1113,17 @@ class EntryControllerTest extends WallabagCoreTestCase
1071 1113
1072 $this->assertCount(1, $crawler->filter('div[class=entry]')); 1114 $this->assertCount(1, $crawler->filter('div[class=entry]'));
1073 1115
1074 $crawler = $client->request('GET', '/new'); 1116 $entry = new Entry($this->getLoggedInUser());
1075 $form = $crawler->filter('form[name=entry]')->form(); 1117 $entry->setUrl($this->url);
1118 $entry->setHttpStatus(200);
1119 $this->getEntityManager()->persist($entry);
1076 1120
1077 $data = [ 1121 $entry = new Entry($this->getLoggedInUser());
1078 'entry[url]' => 'http://www.nextinpact.com/news/101235-wallabag-alternative-libre-a-pocket-creuse-petit-a-petit-son-nid.htm', 1122 $entry->setUrl('http://www.nextinpact.com/news/101235-wallabag-alternative-libre-a-pocket-creuse-petit-a-petit-son-nid.htm');
1079 ]; 1123 $entry->setHttpStatus(200);
1124 $this->getEntityManager()->persist($entry);
1080 1125
1081 $client->submit($form, $data); 1126 $this->getEntityManager()->flush();
1082 1127
1083 $crawler = $client->request('GET', '/all/list'); 1128 $crawler = $client->request('GET', '/all/list');
1084 $form = $crawler->filter('button[id=submit-filter]')->form(); 1129 $form = $crawler->filter('button[id=submit-filter]')->form();
@@ -1106,8 +1151,15 @@ class EntryControllerTest extends WallabagCoreTestCase
1106 public function testSearch() 1151 public function testSearch()
1107 { 1152 {
1108 $this->logInAs('admin'); 1153 $this->logInAs('admin');
1154 $this->useTheme('baggy');
1109 $client = $this->getClient(); 1155 $client = $this->getClient();
1110 1156
1157 $entry = new Entry($this->getLoggedInUser());
1158 $entry->setUrl($this->url);
1159 $entry->setTitle('test');
1160 $this->getEntityManager()->persist($entry);
1161 $this->getEntityManager()->flush();
1162
1111 // Search on unread list 1163 // Search on unread list
1112 $crawler = $client->request('GET', '/unread/list'); 1164 $crawler = $client->request('GET', '/unread/list');
1113 1165
@@ -1118,35 +1170,37 @@ class EntryControllerTest extends WallabagCoreTestCase
1118 1170
1119 $crawler = $client->submit($form, $data); 1171 $crawler = $client->submit($form, $data);
1120 1172
1121 $this->assertCount(5, $crawler->filter('div[class=entry]')); 1173 $this->assertCount(4, $crawler->filter('div[class=entry]'));
1122 1174
1123 // Search on starred list 1175 // Search on starred list
1124 $crawler = $client->request('GET', '/starred/list'); 1176 $crawler = $client->request('GET', '/starred/list');
1125 1177
1178 $entry = new Entry($this->getLoggedInUser());
1179 $entry->setUrl('http://localhost/foo/bar');
1180 $entry->setTitle('testeur');
1181 $entry->setStarred(true);
1182 $this->getEntityManager()->persist($entry);
1183 $this->getEntityManager()->flush();
1184
1126 $form = $crawler->filter('form[name=search]')->form(); 1185 $form = $crawler->filter('form[name=search]')->form();
1127 $data = [ 1186 $data = [
1128 'search_entry[term]' => 'title', 1187 'search_entry[term]' => 'testeur',
1129 ]; 1188 ];
1130 1189
1131 $crawler = $client->submit($form, $data); 1190 $crawler = $client->submit($form, $data);
1132 1191
1133 $this->assertCount(1, $crawler->filter('div[class=entry]')); 1192 $this->assertCount(1, $crawler->filter('div[class=entry]'));
1134 1193
1135 // Added new article to test on archive list
1136 $crawler = $client->request('GET', '/new');
1137 $form = $crawler->filter('form[name=entry]')->form();
1138 $data = [
1139 'entry[url]' => $this->url,
1140 ];
1141 $client->submit($form, $data);
1142 $content = $client->getContainer()
1143 ->get('doctrine.orm.entity_manager')
1144 ->getRepository('WallabagCoreBundle:Entry')
1145 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
1146 $client->request('GET', '/archive/'.$content->getId());
1147
1148 $crawler = $client->request('GET', '/archive/list'); 1194 $crawler = $client->request('GET', '/archive/list');
1149 1195
1196 // Added new article to test on archive list
1197 $entry = new Entry($this->getLoggedInUser());
1198 $entry->setUrl('http://0.0.0.0/foo/baz/qux');
1199 $entry->setTitle('Le manège');
1200 $entry->setArchived(true);
1201 $this->getEntityManager()->persist($entry);
1202 $this->getEntityManager()->flush();
1203
1150 $form = $crawler->filter('form[name=search]')->form(); 1204 $form = $crawler->filter('form[name=search]')->form();
1151 $data = [ 1205 $data = [
1152 'search_entry[term]' => 'manège', 1206 'search_entry[term]' => 'manège',
@@ -1155,7 +1209,7 @@ class EntryControllerTest extends WallabagCoreTestCase
1155 $crawler = $client->submit($form, $data); 1209 $crawler = $client->submit($form, $data);
1156 1210
1157 $this->assertCount(1, $crawler->filter('div[class=entry]')); 1211 $this->assertCount(1, $crawler->filter('div[class=entry]'));
1158 $client->request('GET', '/delete/'.$content->getId()); 1212 $client->request('GET', '/delete/'.$entry->getId());
1159 1213
1160 // test on list of all articles 1214 // test on list of all articles
1161 $crawler = $client->request('GET', '/all/list'); 1215 $crawler = $client->request('GET', '/all/list');
@@ -1170,6 +1224,13 @@ class EntryControllerTest extends WallabagCoreTestCase
1170 $this->assertCount(0, $crawler->filter('div[class=entry]')); 1224 $this->assertCount(0, $crawler->filter('div[class=entry]'));
1171 1225
1172 // test url search on list of all articles 1226 // test url search on list of all articles
1227 $entry = new Entry($this->getLoggedInUser());
1228 $entry->setUrl('http://domain/qux');
1229 $entry->setTitle('Le manège');
1230 $entry->setArchived(true);
1231 $this->getEntityManager()->persist($entry);
1232 $this->getEntityManager()->flush();
1233
1173 $crawler = $client->request('GET', '/all/list'); 1234 $crawler = $client->request('GET', '/all/list');
1174 1235
1175 $form = $crawler->filter('form[name=search]')->form(); 1236 $form = $crawler->filter('form[name=search]')->form();
diff --git a/tests/Wallabag/CoreBundle/Controller/ExportControllerTest.php b/tests/Wallabag/CoreBundle/Controller/ExportControllerTest.php
index 63f2c829..b38961d3 100644
--- a/tests/Wallabag/CoreBundle/Controller/ExportControllerTest.php
+++ b/tests/Wallabag/CoreBundle/Controller/ExportControllerTest.php
@@ -239,7 +239,7 @@ class ExportControllerTest extends WallabagCoreTestCase
239 $this->assertEquals($contentInDB->getLanguage(), $content[0]['language']); 239 $this->assertEquals($contentInDB->getLanguage(), $content[0]['language']);
240 $this->assertEquals($contentInDB->getReadingtime(), $content[0]['reading_time']); 240 $this->assertEquals($contentInDB->getReadingtime(), $content[0]['reading_time']);
241 $this->assertEquals($contentInDB->getDomainname(), $content[0]['domain_name']); 241 $this->assertEquals($contentInDB->getDomainname(), $content[0]['domain_name']);
242 $this->assertEquals(['foo bar', 'baz', 'foot'], $content[0]['tags']); 242 $this->assertEquals(['foo bar', 'baz'], $content[0]['tags']);
243 } 243 }
244 244
245 public function testXmlExport() 245 public function testXmlExport()
diff --git a/tests/Wallabag/CoreBundle/Controller/TagControllerTest.php b/tests/Wallabag/CoreBundle/Controller/TagControllerTest.php
index 80611a87..f9bf7b87 100644
--- a/tests/Wallabag/CoreBundle/Controller/TagControllerTest.php
+++ b/tests/Wallabag/CoreBundle/Controller/TagControllerTest.php
@@ -3,6 +3,7 @@
3namespace Tests\Wallabag\CoreBundle\Controller; 3namespace Tests\Wallabag\CoreBundle\Controller;
4 4
5use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; 5use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
6use Wallabag\CoreBundle\Entity\Entry;
6use Wallabag\CoreBundle\Entity\Tag; 7use Wallabag\CoreBundle\Entity\Tag;
7 8
8class TagControllerTest extends WallabagCoreTestCase 9class TagControllerTest extends WallabagCoreTestCase
@@ -24,10 +25,11 @@ class TagControllerTest extends WallabagCoreTestCase
24 $this->logInAs('admin'); 25 $this->logInAs('admin');
25 $client = $this->getClient(); 26 $client = $this->getClient();
26 27
27 $entry = $client->getContainer() 28 $entry = new Entry($this->getLoggedInUser());
28 ->get('doctrine.orm.entity_manager') 29 $entry->setUrl('http://0.0.0.0/foo');
29 ->getRepository('WallabagCoreBundle:Entry') 30 $this->getEntityManager()->persist($entry);
30 ->findByUrlAndUserId('http://0.0.0.0/entry1', $this->getLoggedInUserId()); 31 $this->getEntityManager()->flush();
32 $this->getEntityManager()->clear();
31 33
32 $crawler = $client->request('GET', '/view/'.$entry->getId()); 34 $crawler = $client->request('GET', '/view/'.$entry->getId());
33 35
@@ -41,23 +43,15 @@ class TagControllerTest extends WallabagCoreTestCase
41 $this->assertEquals(302, $client->getResponse()->getStatusCode()); 43 $this->assertEquals(302, $client->getResponse()->getStatusCode());
42 44
43 // be sure to reload the entry 45 // be sure to reload the entry
44 $entry = $client->getContainer() 46 $entry = $this->getEntityManager()->getRepository(Entry::class)->find($entry->getId());
45 ->get('doctrine.orm.entity_manager') 47 $this->assertCount(1, $entry->getTags());
46 ->getRepository('WallabagCoreBundle:Entry')
47 ->findByUrlAndUserId('http://0.0.0.0/entry1', $this->getLoggedInUserId());
48
49 $this->assertEquals(4, count($entry->getTags()));
50 48
51 // tag already exists and already assigned 49 // tag already exists and already assigned
52 $client->submit($form, $data); 50 $client->submit($form, $data);
53 $this->assertEquals(302, $client->getResponse()->getStatusCode()); 51 $this->assertEquals(302, $client->getResponse()->getStatusCode());
54 52
55 $newEntry = $client->getContainer() 53 $entry = $this->getEntityManager()->getRepository(Entry::class)->find($entry->getId());
56 ->get('doctrine.orm.entity_manager') 54 $this->assertCount(1, $entry->getTags());
57 ->getRepository('WallabagCoreBundle:Entry')
58 ->find($entry->getId());
59
60 $this->assertEquals(4, count($newEntry->getTags()));
61 55
62 // tag already exists but still not assigned to this entry 56 // tag already exists but still not assigned to this entry
63 $data = [ 57 $data = [
@@ -67,12 +61,8 @@ class TagControllerTest extends WallabagCoreTestCase
67 $client->submit($form, $data); 61 $client->submit($form, $data);
68 $this->assertEquals(302, $client->getResponse()->getStatusCode()); 62 $this->assertEquals(302, $client->getResponse()->getStatusCode());
69 63
70 $newEntry = $client->getContainer() 64 $entry = $this->getEntityManager()->getRepository(Entry::class)->find($entry->getId());
71 ->get('doctrine.orm.entity_manager') 65 $this->assertCount(2, $entry->getTags());
72 ->getRepository('WallabagCoreBundle:Entry')
73 ->find($entry->getId());
74
75 $this->assertEquals(4, count($newEntry->getTags()));
76 } 66 }
77 67
78 public function testAddMultipleTagToEntry() 68 public function testAddMultipleTagToEntry()
@@ -116,15 +106,14 @@ class TagControllerTest extends WallabagCoreTestCase
116 $this->logInAs('admin'); 106 $this->logInAs('admin');
117 $client = $this->getClient(); 107 $client = $this->getClient();
118 108
119 $entry = $client->getContainer() 109 $tag = new Tag();
120 ->get('doctrine.orm.entity_manager') 110 $tag->setLabel($this->tagName);
121 ->getRepository('WallabagCoreBundle:Entry') 111 $entry = new Entry($this->getLoggedInUser());
122 ->findByUrlAndUserId('http://0.0.0.0/entry1', $this->getLoggedInUserId()); 112 $entry->setUrl('http://0.0.0.0/foo');
123 113 $entry->addTag($tag);
124 $tag = $client->getContainer() 114 $this->getEntityManager()->persist($entry);
125 ->get('doctrine.orm.entity_manager') 115 $this->getEntityManager()->flush();
126 ->getRepository('WallabagCoreBundle:Tag') 116 $this->getEntityManager()->clear();
127 ->findOneByEntryAndTagLabel($entry, $this->tagName);
128 117
129 // We make a first request to set an history and test redirection after tag deletion 118 // We make a first request to set an history and test redirection after tag deletion
130 $client->request('GET', '/view/'.$entry->getId()); 119 $client->request('GET', '/view/'.$entry->getId());
@@ -134,12 +123,8 @@ class TagControllerTest extends WallabagCoreTestCase
134 $this->assertEquals(302, $client->getResponse()->getStatusCode()); 123 $this->assertEquals(302, $client->getResponse()->getStatusCode());
135 $this->assertEquals($entryUri, $client->getResponse()->getTargetUrl()); 124 $this->assertEquals($entryUri, $client->getResponse()->getTargetUrl());
136 125
137 // re-retrieve the entry to be sure to get fresh data from database (mostly for tags) 126 // re-retrieve the entry to be sure to get fresh data from database (mostly for tags)
138 $entry = $client->getContainer() 127 $entry = $this->getEntityManager()->getRepository(Entry::class)->find($entry->getId());
139 ->get('doctrine.orm.entity_manager')
140 ->getRepository('WallabagCoreBundle:Entry')
141 ->findByUrlAndUserId('http://0.0.0.0/entry1', $this->getLoggedInUserId());
142
143 $this->assertNotContains($this->tagName, $entry->getTags()); 128 $this->assertNotContains($this->tagName, $entry->getTags());
144 129
145 $client->request('GET', '/remove-tag/'.$entry->getId().'/'.$tag->getId()); 130 $client->request('GET', '/remove-tag/'.$entry->getId().'/'.$tag->getId());
diff --git a/tests/Wallabag/CoreBundle/WallabagCoreTestCase.php b/tests/Wallabag/CoreBundle/WallabagCoreTestCase.php
index 7bf4b43c..eec6939d 100644
--- a/tests/Wallabag/CoreBundle/WallabagCoreTestCase.php
+++ b/tests/Wallabag/CoreBundle/WallabagCoreTestCase.php
@@ -2,11 +2,20 @@
2 2
3namespace Tests\Wallabag\CoreBundle; 3namespace Tests\Wallabag\CoreBundle;
4 4
5use Symfony\Bundle\FrameworkBundle\Client;
6use Symfony\Bundle\FrameworkBundle\Console\Application;
5use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; 7use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
6use Symfony\Component\BrowserKit\Cookie; 8use Symfony\Component\BrowserKit\Cookie;
9use Symfony\Component\Console\Input\ArrayInput;
10use Symfony\Component\Console\Output\NullOutput;
11use Wallabag\CoreBundle\Entity\Config;
12use Wallabag\UserBundle\Entity\User;
7 13
8abstract class WallabagCoreTestCase extends WebTestCase 14abstract class WallabagCoreTestCase extends WebTestCase
9{ 15{
16 /**
17 * @var Client|null
18 */
10 private $client = null; 19 private $client = null;
11 20
12 public function getClient() 21 public function getClient()
@@ -21,6 +30,44 @@ abstract class WallabagCoreTestCase extends WebTestCase
21 $this->client = static::createClient(); 30 $this->client = static::createClient();
22 } 31 }
23 32
33 public function resetDatabase(Client $client)
34 {
35 $application = new Application($client->getKernel());
36 $application->setAutoExit(false);
37
38 $application->run(new ArrayInput([
39 'command' => 'doctrine:schema:drop',
40 '--no-interaction' => true,
41 '--force' => true,
42 '--env' => 'test',
43 ]), new NullOutput());
44
45 $application->run(new ArrayInput([
46 'command' => 'doctrine:schema:create',
47 '--no-interaction' => true,
48 '--env' => 'test',
49 ]), new NullOutput());
50
51 $application->run(new ArrayInput([
52 'command' => 'doctrine:fixtures:load',
53 '--no-interaction' => true,
54 '--env' => 'test',
55 ]), new NullOutput());
56
57 /*
58 * Recreate client to avoid error:
59 *
60 * [Doctrine\DBAL\ConnectionException]
61 * Transaction commit failed because the transaction has been marked for rollback only.
62 */
63 $this->client = static::createClient();
64 }
65
66 public function getEntityManager()
67 {
68 return $this->client->getContainer()->get('doctrine.orm.entity_manager');
69 }
70
24 /** 71 /**
25 * Login a user without making a HTTP request. 72 * Login a user without making a HTTP request.
26 * If we make a HTTP request we lose ability to mock service in the container. 73 * If we make a HTTP request we lose ability to mock service in the container.
@@ -37,7 +84,7 @@ abstract class WallabagCoreTestCase extends WebTestCase
37 $firewallName = $container->getParameter('fos_user.firewall_name'); 84 $firewallName = $container->getParameter('fos_user.firewall_name');
38 85
39 $user = $userManager->findUserBy(array('username' => $username)); 86 $user = $userManager->findUserBy(array('username' => $username));
40 $loginManager->loginUser($firewallName, $user); 87 $loginManager->logInUser($firewallName, $user);
41 88
42 $session->set('_security_'.$firewallName, serialize($container->get('security.token_storage')->getToken())); 89 $session->set('_security_'.$firewallName, serialize($container->get('security.token_storage')->getToken()));
43 $session->save(); 90 $session->save();
@@ -65,23 +112,42 @@ abstract class WallabagCoreTestCase extends WebTestCase
65 } 112 }
66 113
67 /** 114 /**
68 * Return the user id of the logged in user. 115 * Return the user of the logged in user.
69 * You should be sure that you called `logInAs` before. 116 * You should be sure that you called `logInAs` before.
70 * 117 *
71 * @return int 118 * @return User
72 */ 119 */
73 public function getLoggedInUserId() 120 public function getLoggedInUser()
74 { 121 {
75 $token = static::$kernel->getContainer()->get('security.token_storage')->getToken(); 122 $token = static::$kernel->getContainer()->get('security.token_storage')->getToken();
76 123
77 if (null !== $token) { 124 if (null !== $token) {
78 return $token->getUser()->getId(); 125 return $token->getUser();
79 } 126 }
80 127
81 throw new \RuntimeException('No logged in User.'); 128 throw new \RuntimeException('No logged in User.');
82 } 129 }
83 130
84 /** 131 /**
132 * Return the user id of the logged in user.
133 * You should be sure that you called `logInAs` before.
134 *
135 * @return int
136 */
137 public function getLoggedInUserId()
138 {
139 return $this->getLoggedInUser()->getId();
140 }
141
142 public function useTheme($theme)
143 {
144 $config = $this->getEntityManager()->getRepository(Config::class)->findOneByUser($this->getLoggedInUser());
145 $config->setTheme($theme);
146 $this->getEntityManager()->persist($config);
147 $this->getEntityManager()->flush();
148 }
149
150 /**
85 * Check if Redis is installed. 151 * Check if Redis is installed.
86 * If not, mark test as skip. 152 * If not, mark test as skip.
87 */ 153 */
diff --git a/tests/Wallabag/ImportBundle/Command/ImportCommandTest.php b/tests/Wallabag/ImportBundle/Command/ImportCommandTest.php
index 7043c345..f507563c 100644
--- a/tests/Wallabag/ImportBundle/Command/ImportCommandTest.php
+++ b/tests/Wallabag/ImportBundle/Command/ImportCommandTest.php
@@ -95,6 +95,7 @@ class ImportCommandTest extends WallabagCoreTestCase
95 'username' => 1, 95 'username' => 1,
96 'filepath' => $application->getKernel()->getContainer()->getParameter('kernel.root_dir').'/../tests/Wallabag/ImportBundle/fixtures/wallabag-v2-read.json', 96 'filepath' => $application->getKernel()->getContainer()->getParameter('kernel.root_dir').'/../tests/Wallabag/ImportBundle/fixtures/wallabag-v2-read.json',
97 '--useUserId' => true, 97 '--useUserId' => true,
98 '--importer' => 'v2',
98 ]); 99 ]);
99 } 100 }
100} 101}