]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
Merge pull request #2172 from wallabag/more-tests
authorNicolas LÅ“uillet <nicolas@loeuillet.org>
Fri, 24 Jun 2016 12:22:47 +0000 (14:22 +0200)
committerGitHub <noreply@github.com>
Fri, 24 Jun 2016 12:22:47 +0000 (14:22 +0200)
Change the way to login user in tests

app/config/config.yml
app/config/config_dev.yml
app/config/config_prod.yml
app/config/routing.yml
app/config/routing_dev.yml
app/config/security.yml
tests/Wallabag/CoreBundle/Controller/SecurityControllerTest.php
tests/Wallabag/CoreBundle/Controller/TagControllerTest.php
tests/Wallabag/CoreBundle/WallabagCoreTestCase.php
tests/Wallabag/ImportBundle/Controller/PocketControllerTest.php
tests/Wallabag/ImportBundle/fixtures/unnamed.png [new file with mode: 0644]

index 9e2e08a67fae9365c67b177761dc157e6743a5f1..6a8078ccdf1c8195d63f8f96254c64da3f19f0fc 100644 (file)
@@ -5,25 +5,27 @@ imports:
 
 framework:
     #esi:             ~
-    translator:      { fallback: "%locale%" }
-    secret:          "%secret%"
+    translator:
+        enabled: true
+        fallback: "%locale%"
+    secret: "%secret%"
     router:
         resource: "%kernel.root_dir%/config/routing.yml"
         strict_requirements: ~
-    form:            ~
+    form: ~
     csrf_protection: ~
-    validation:      { enable_annotations: true }
+    validation:
+        enable_annotations: true
     templating:
         engines: ['twig']
-        #assets_version: SomeVersionScheme
-    default_locale:  "%locale%"
-    trusted_hosts:   ~
+    default_locale: "%locale%"
+    trusted_hosts: ~
     trusted_proxies: ~
     session:
         # handler_id set to null will use default session handler from php.ini
-        handler_id:  session.handler.native_file
-        save_path:   "%kernel.root_dir%/../var/sessions/%kernel.environment%"
-    fragments:       ~
+        handler_id: session.handler.native_file
+        save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%"
+    fragments: ~
     http_method_override: true
     assets: ~
 
@@ -54,14 +56,14 @@ wallabag_import:
 
 # Twig Configuration
 twig:
-    debug:            "%kernel.debug%"
+    debug: "%kernel.debug%"
     strict_variables: "%kernel.debug%"
     form_themes:
         - "LexikFormFilterBundle:Form:form_div_layout.html.twig"
 
 # Assetic Configuration
 assetic:
-    debug:          "%kernel.debug%"
+    debug: "%kernel.debug%"
     use_controller: false
     bundles:        [ ]
     #java: /usr/bin/java
@@ -75,14 +77,14 @@ assetic:
 # Doctrine Configuration
 doctrine:
     dbal:
-        driver:   "%database_driver%"
+        driver: "%database_driver%"
         host: "%database_host%"
         port: "%database_port%"
         dbname: "%database_name%"
         user: "%database_user%"
         password: "%database_password%"
-        charset:  UTF8
-        path:     "%database_path%"
+        charset: UTF8
+        path: "%database_path%"
         server_version: 5.6
 
     orm:
@@ -108,10 +110,11 @@ doctrine_migrations:
 # Swiftmailer Configuration
 swiftmailer:
     transport: "%mailer_transport%"
-    host:      "%mailer_host%"
-    username:  "%mailer_user%"
-    password:  "%mailer_password%"
-    spool:     { type: memory }
+    host: "%mailer_host%"
+    username: "%mailer_user%"
+    password: "%mailer_password%"
+    spool:
+        type: memory
 
 fos_rest:
     param_fetcher_listener: true
@@ -173,7 +176,7 @@ liip_theme:
 
 fos_user:
     db_driver: orm
-    firewall_name: main
+    firewall_name: secured_area
     user_class: Wallabag\UserBundle\Entity\User
     registration:
         confirmation:
index ec23babb8f6b4c7fc36a18e3a27122f98042cf55..0fa23dbfa449ce8e10c14cbbf3cc1f96f028f7ce 100644 (file)
@@ -5,7 +5,8 @@ framework:
     router:
         resource: "%kernel.root_dir%/config/routing_dev.yml"
         strict_requirements: true
-    profiler: { only_exceptions: false }
+    profiler:
+        only_exceptions: false
 
 web_profiler:
     toolbar: true
@@ -14,19 +15,19 @@ web_profiler:
 monolog:
     handlers:
         main:
-            type:   stream
-            path:   "%kernel.logs_dir%/%kernel.environment%.log"
-            level:  debug
+            type: stream
+            path: "%kernel.logs_dir%/%kernel.environment%.log"
+            level: debug
             channels: ['!event']
         console:
-            type:   console
+            type: console
             bubble: false
             verbosity_levels:
                 VERBOSITY_VERBOSE: INFO
                 VERBOSITY_VERY_VERBOSE: DEBUG
             channels: ['!event', '!doctrine']
         console_very_verbose:
-            type:   console
+            type: console
             bubble: false
             verbosity_levels:
                 VERBOSITY_VERBOSE: NOTICE
index 65b040ccef91420386eee74d097791774f1644f8..5a4dd69e265887d0b03878ffee6528962c25be7f 100644 (file)
@@ -14,12 +14,12 @@ imports:
 monolog:
     handlers:
         main:
-            type:         fingers_crossed
+            type: fingers_crossed
             action_level: error
-            handler:      nested
+            handler: nested
         nested:
-            type:  stream
-            path:  "%kernel.logs_dir%/%kernel.environment%.log"
+            type: stream
+            path: "%kernel.logs_dir%/%kernel.environment%.log"
             level: debug
         console:
-            type:  console
+            type: console
index 6a6aa6aca65ff3763cbde25a0bda56305a934ea4..40cc7165bb4e410f175a330fa591e2f79ea70e59 100644 (file)
@@ -4,8 +4,8 @@ wallabag_annotation:
 
 wallabag_import:
     resource: "@WallabagImportBundle/Controller/"
-    type:     annotation
-    prefix:   /import
+    type: annotation
+    prefix: /import
 
 wallabag_api:
     resource: "@WallabagApiBundle/Resources/config/routing.yml"
index 404f6a3bce570a6acda8720e6d53b6845afd0a01..95c1b0263cc08396d6905e2acf6d38b48dd2c454 100644 (file)
@@ -1,14 +1,14 @@
 _wdt:
     resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml"
-    prefix:   /_wdt
+    prefix: /_wdt
 
 _profiler:
     resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml"
-    prefix:   /_profiler
+    prefix: /_profiler
 
 _errors:
     resource: "@TwigBundle/Resources/config/routing/errors.xml"
-    prefix:   /_error
+    prefix: /_error
 
 _main:
     resource: routing.yml
index 0748c06ce03d316c67e5237541718569d95caa9a..e24e03df2e921d98eff8325b86a1ae2733a8ea6d 100644 (file)
@@ -3,12 +3,14 @@ security:
         FOS\UserBundle\Model\UserInterface: sha512
 
     role_hierarchy:
-        ROLE_ADMIN:       ROLE_USER
+        ROLE_ADMIN: ROLE_USER
         ROLE_SUPER_ADMIN: [ ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ]
 
     providers:
         administrators:
-            entity: { class: WallabagUserBundle:User, property: username }
+            entity:
+                class: WallabagUserBundle:User
+                property: username
         fos_userbundle:
             id: fos_user.user_provider.username
 
@@ -31,7 +33,7 @@ security:
             anonymous: true
 
         login_firewall:
-            pattern:    ^/login$
+            pattern: ^/login$
             anonymous:  ~
 
         secured_area:
@@ -40,12 +42,12 @@ security:
                 provider: fos_userbundle
                 csrf_token_generator: security.csrf.token_manager
 
-            anonymous:    true
+            anonymous: true
             remember_me:
-                secret:   "%secret%"
+                secret: "%secret%"
                 lifetime: 31536000
-                path:     /
-                domain:   ~
+                path: /
+                domain: ~
 
             logout:
                 path:   /logout
index f503ff4bd8daff2bd2d64209d643d2d0e231d410..03355f5abde2d02820ea5ce842c8938dccbe8dda 100644 (file)
@@ -36,7 +36,7 @@ class SecurityControllerTest extends WallabagCoreTestCase
         $em->persist($user);
         $em->flush();
 
-        $this->logInAs('admin');
+        $this->logInAsUsingHttp('admin');
         $crawler = $client->request('GET', '/config');
         $this->assertContains('scheb_two_factor.trusted', $crawler->filter('body')->extract(['_text'])[0]);
 
index a019d36c98c24cfb20882cd4d0e0f7e8f010fe81..58450e5fb0933632480e8a7c60e6c30a20efc7a3 100644 (file)
@@ -39,6 +39,12 @@ class TagControllerTest extends WallabagCoreTestCase
         $client->submit($form, $data);
         $this->assertEquals(302, $client->getResponse()->getStatusCode());
 
+        // be sure to reload the entry
+        $entry = $client->getContainer()
+            ->get('doctrine.orm.entity_manager')
+            ->getRepository('WallabagCoreBundle:Entry')
+            ->findOneByUsernameAndNotArchived('admin');
+
         $this->assertEquals(1, count($entry->getTags()));
 
         # tag already exists and already assigned
index c69e83301203ec577c9eb23577afaa8e09a8adbc..c0055888a255eaa44aa88d52f5630ff50e5c6147 100644 (file)
@@ -3,6 +3,7 @@
 namespace Tests\Wallabag\CoreBundle;
 
 use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
+use Symfony\Component\BrowserKit\Cookie;
 
 abstract class WallabagCoreTestCase extends WebTestCase
 {
@@ -20,7 +21,38 @@ abstract class WallabagCoreTestCase extends WebTestCase
         $this->client = static::createClient();
     }
 
+    /**
+     * Login a user without making a HTTP request.
+     * If we make a HTTP request we lose ability to mock service in the container.
+     *
+     * @param string $username User to log in
+     */
     public function logInAs($username)
+    {
+        $container = $this->client->getContainer();
+        $session = $container->get('session');
+
+        $userManager = $container->get('fos_user.user_manager');
+        $loginManager = $container->get('fos_user.security.login_manager');
+        $firewallName = $container->getParameter('fos_user.firewall_name');
+
+        $user = $userManager->findUserBy(array('username' => $username));
+        $loginManager->loginUser($firewallName, $user);
+
+        $session->set('_security_'.$firewallName, serialize($container->get('security.token_storage')->getToken()));
+        $session->save();
+
+        $cookie = new Cookie($session->getName(), $session->getId());
+        $this->client->getCookieJar()->set($cookie);
+    }
+
+    /**
+     * Instead of `logInAs` this method use a HTTP request to log in the user.
+     * Could be better for some tests.
+     *
+     * @param string $username User to log in
+     */
+    public function logInAsUsingHttp($username)
     {
         $crawler = $this->client->request('GET', '/login');
         $form = $crawler->filter('button[type=submit]')->form();
index 6aaf1b57be7a1d00ef2ea0600b2ebbb82a217c51..e0e61df88c43d5d5161128a261738bf9385c0e69 100644 (file)
@@ -22,15 +22,13 @@ class PocketControllerTest extends WallabagCoreTestCase
         $this->logInAs('admin');
         $client = $this->getClient();
 
-        $crawler = $client->request('GET', '/import/pocket/auth');
+        $client->request('GET', '/import/pocket/auth');
 
         $this->assertEquals(302, $client->getResponse()->getStatusCode());
     }
 
     public function testImportPocketAuth()
     {
-        $this->markTestSkipped('PocketImport: Find a way to properly mock a service.');
-
         $this->logInAs('admin');
         $client = $this->getClient();
 
@@ -43,9 +41,9 @@ class PocketControllerTest extends WallabagCoreTestCase
             ->method('getRequestToken')
             ->willReturn('token');
 
-        $client->getContainer()->set('wallabag_import.pocket.import', $pocketImport);
+        static::$kernel->getContainer()->set('wallabag_import.pocket.import', $pocketImport);
 
-        $crawler = $client->request('GET', '/import/pocket/auth');
+        $client->request('GET', '/import/pocket/auth');
 
         $this->assertEquals(301, $client->getResponse()->getStatusCode());
         $this->assertContains('getpocket.com/auth/authorize', $client->getResponse()->headers->get('location'));
@@ -56,10 +54,55 @@ class PocketControllerTest extends WallabagCoreTestCase
         $this->logInAs('admin');
         $client = $this->getClient();
 
-        $crawler = $client->request('GET', '/import/pocket/callback');
+        $pocketImport = $this->getMockBuilder('Wallabag\ImportBundle\Import\PocketImport')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $pocketImport
+            ->expects($this->once())
+            ->method('authorize')
+            ->willReturn(false);
+
+        static::$kernel->getContainer()->set('wallabag_import.pocket.import', $pocketImport);
+
+        $client->request('GET', '/import/pocket/callback');
 
         $this->assertEquals(302, $client->getResponse()->getStatusCode());
-        $this->assertContains('import/pocket', $client->getResponse()->headers->get('location'));
+        $this->assertContains('/', $client->getResponse()->headers->get('location'), 'Import is ok, redirect to homepage');
         $this->assertEquals('flashes.import.notice.failed', $client->getContainer()->get('session')->getFlashBag()->peek('notice')[0]);
     }
+
+    public function testImportPocketCallback()
+    {
+        $this->logInAs('admin');
+        $client = $this->getClient();
+
+        $pocketImport = $this->getMockBuilder('Wallabag\ImportBundle\Import\PocketImport')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $pocketImport
+            ->expects($this->once())
+            ->method('authorize')
+            ->willReturn(true);
+
+        $pocketImport
+            ->expects($this->once())
+            ->method('setMarkAsRead')
+            ->with(false)
+            ->willReturn($pocketImport);
+
+        $pocketImport
+            ->expects($this->once())
+            ->method('import')
+            ->willReturn(true);
+
+        static::$kernel->getContainer()->set('wallabag_import.pocket.import', $pocketImport);
+
+        $client->request('GET', '/import/pocket/callback');
+
+        $this->assertEquals(302, $client->getResponse()->getStatusCode());
+        $this->assertContains('/', $client->getResponse()->headers->get('location'), 'Import is ok, redirect to homepage');
+        $this->assertEquals('flashes.import.notice.summary', $client->getContainer()->get('session')->getFlashBag()->peek('notice')[0]);
+    }
 }
diff --git a/tests/Wallabag/ImportBundle/fixtures/unnamed.png b/tests/Wallabag/ImportBundle/fixtures/unnamed.png
new file mode 100644 (file)
index 0000000..e6dd9ca
Binary files /dev/null and b/tests/Wallabag/ImportBundle/fixtures/unnamed.png differ