]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
Add menu access to site credentials CRUD
authorJeremy Benoist <jeremy.benoist@gmail.com>
Mon, 1 May 2017 20:13:35 +0000 (22:13 +0200)
committerJeremy Benoist <jeremy.benoist@gmail.com>
Tue, 20 Jun 2017 14:03:14 +0000 (16:03 +0200)
22 files changed:
src/Wallabag/CoreBundle/DataFixtures/ORM/LoadSiteCredentialData.php [new file with mode: 0644]
src/Wallabag/CoreBundle/GuzzleSiteAuthenticator/GrabySiteConfigBuilder.php
src/Wallabag/CoreBundle/Resources/config/services.yml
src/Wallabag/CoreBundle/Resources/translations/messages.da.yml
src/Wallabag/CoreBundle/Resources/translations/messages.de.yml
src/Wallabag/CoreBundle/Resources/translations/messages.en.yml
src/Wallabag/CoreBundle/Resources/translations/messages.es.yml
src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml
src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml
src/Wallabag/CoreBundle/Resources/translations/messages.it.yml
src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml
src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml
src/Wallabag/CoreBundle/Resources/translations/messages.pt.yml
src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml
src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml
src/Wallabag/CoreBundle/Resources/views/themes/baggy/SiteCredential/edit.html.twig
src/Wallabag/CoreBundle/Resources/views/themes/baggy/SiteCredential/index.html.twig
src/Wallabag/CoreBundle/Resources/views/themes/baggy/SiteCredential/new.html.twig
src/Wallabag/CoreBundle/Resources/views/themes/baggy/layout.html.twig
src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig
tests/Wallabag/CoreBundle/Controller/SiteCredentialControllerTest.php [new file with mode: 0644]
tests/Wallabag/CoreBundle/GuzzleSiteAuthenticator/GrabySiteConfigBuilderTest.php

diff --git a/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadSiteCredentialData.php b/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadSiteCredentialData.php
new file mode 100644 (file)
index 0000000..866f55a
--- /dev/null
@@ -0,0 +1,34 @@
+<?php
+
+namespace Wallabag\CoreBundle\DataFixtures\ORM;
+
+use Doctrine\Common\DataFixtures\AbstractFixture;
+use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
+use Doctrine\Common\Persistence\ObjectManager;
+use Wallabag\CoreBundle\Entity\SiteCredential;
+
+class LoadSiteCredentialData extends AbstractFixture implements OrderedFixtureInterface
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function load(ObjectManager $manager)
+    {
+        $credential = new SiteCredential($this->getReference('admin-user'));
+        $credential->setHost('example.com');
+        $credential->setUsername('foo');
+        $credential->setPassword('bar');
+
+        $manager->persist($credential);
+
+        $manager->flush();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getOrder()
+    {
+        return 50;
+    }
+}
index 94615687ea45418773c6cbc40da36670be0e8f0d..ae69492d4d9f477d3a50b77e80e899b1ad5f08d8 100644 (file)
@@ -7,7 +7,7 @@ use BD\GuzzleSiteAuthenticator\SiteConfig\SiteConfigBuilder;
 use Graby\SiteConfig\ConfigBuilder;
 use Psr\Log\LoggerInterface;
 use Wallabag\CoreBundle\Repository\SiteCredentialRepository;
-use Wallabag\UserBundle\Entity\User;
+use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
 
 class GrabySiteConfigBuilder implements SiteConfigBuilder
 {
@@ -27,7 +27,7 @@ class GrabySiteConfigBuilder implements SiteConfigBuilder
     private $logger;
 
     /**
-     * @var User
+     * @var Wallabag\UserBundle\Entity\User|null
      */
     private $currentUser;
 
@@ -36,16 +36,19 @@ class GrabySiteConfigBuilder implements SiteConfigBuilder
      * GrabySiteConfigBuilder constructor.
      *
      * @param ConfigBuilder            $grabyConfigBuilder
-     * @param User                     $currentUser
+     * @param TokenStorage                     $token
      * @param SiteCredentialRepository $credentialRepository
      * @param LoggerInterface $logger
      */
-    public function __construct(ConfigBuilder $grabyConfigBuilder, User $currentUser, SiteCredentialRepository $credentialRepository, LoggerInterface $logger)
+    public function __construct(ConfigBuilder $grabyConfigBuilder, TokenStorage $token, SiteCredentialRepository $credentialRepository, LoggerInterface $logger)
     {
         $this->grabyConfigBuilder = $grabyConfigBuilder;
         $this->credentialRepository = $credentialRepository;
-        $this->currentUser = $currentUser;
         $this->logger = $logger;
+
+        if ($token->getToken()) {
+            $this->currentUser = $token->getToken()->getUser();
+        }
     }
 
     /**
@@ -59,7 +62,10 @@ class GrabySiteConfigBuilder implements SiteConfigBuilder
             $host = substr($host, 4);
         }
 
-        $credentials = $this->credentialRepository->findOneByHostAndUser($host, $this->currentUser->getId());
+        $credentials = null;
+        if ($this->currentUser) {
+            $credentials = $this->credentialRepository->findOneByHostAndUser($host, $this->currentUser->getId());
+        }
 
         if (null === $credentials) {
             $this->logger->debug('Auth: no credentials available for host.', ['host' => $host]);
index a59152d354fa4ec25057701cd2f753a70b3fd818..09bc77fe9be2506aa354410f14839b026ae3c04b 100644 (file)
@@ -63,7 +63,7 @@ services:
         class: Wallabag\CoreBundle\GuzzleSiteAuthenticator\GrabySiteConfigBuilder
         arguments:
             - "@wallabag_core.graby.config_builder"
-            - "@=service('security.token_storage').getToken().getUser()"
+            - "@security.token_storage"
             - "@wallabag_core.site_credential_repository"
             - '@logger'
         tags:
index ef58a16b8d5ca14d04e1dc42f70a9109e2499b9a..3a3fb91d8a453f17e1c66e43c6fccd992a7cf595 100644 (file)
@@ -32,6 +32,7 @@ menu:
         # save_link: 'Save a link'
         back_to_unread: 'Tilbage til de ulæste artikler'
         # users_management: 'Users management'
+        # site_credentials: 'Site credentials'
     top:
         add_new_entry: 'Tilføj ny artikel'
         search: 'Søg'
index d026a030b5b80ccc52bb6de3eae28777a6584249..85f0e1a35390432422783a0d09520f87231213c2 100644 (file)
@@ -32,6 +32,7 @@ menu:
         save_link: 'Link speichern'
         back_to_unread: 'Zurück zu ungelesenen Artikeln'
         users_management: 'Benutzerverwaltung'
+        # site_credentials: 'Site credentials'
     top:
         add_new_entry: 'Neuen Artikel hinzufügen'
         search: 'Suche'
index 12feb7dd47213184aa04e339c72a63630752e70c..284fa2fb8cb153d024f07f6285c51b7b755e6fe7 100644 (file)
@@ -32,6 +32,7 @@ menu:
         save_link: 'Save a link'
         back_to_unread: 'Back to unread articles'
         users_management: 'Users management'
+        site_credentials: 'Site credentials'
     top:
         add_new_entry: 'Add a new entry'
         search: 'Search'
index 2351d467fe6e5158532c6352ca730ea0a37ffaed..33bb879c6e964daea4fa8f1668100890b2ad09f1 100644 (file)
@@ -32,6 +32,7 @@ menu:
         save_link: 'Guardar un enlace'
         back_to_unread: 'Volver a los artículos sin leer'
         users_management: 'Configuración de usuarios'
+        # site_credentials: 'Site credentials'
     top:
         add_new_entry: 'Añadir un nuevo artículo'
         search: 'Buscar'
index 32e1ff42a408adef8aa938310dfe788ea852e0ac..90eb119c15f82afc92b9f324b6debb3fd8aca219 100644 (file)
@@ -32,6 +32,7 @@ menu:
         save_link: 'ذخیرهٔ یک پیوند'
         back_to_unread: 'بازگشت به خوانده‌نشده‌ها'
         # users_management: 'Users management'
+        # site_credentials: 'Site credentials'
     top:
         add_new_entry: 'افزودن مقالهٔ تازه'
         search: 'جستجو'
index 17eaf0150b7109da46226a77f8b287cb5c3fd2a7..542ddf486274b04db1a43337808f11f24f384e66 100644 (file)
@@ -32,6 +32,7 @@ menu:
         save_link: "Sauvegarder un nouvel article"
         back_to_unread: "Retour aux articles non lus"
         users_management: "Gestion des utilisateurs"
+        site_credentials: 'Accès aux sites'
     top:
         add_new_entry: "Sauvegarder un nouvel article"
         search: "Rechercher"
index 752085c8005e2a793832714c9d518acc0c50033b..5cb2a68f70dbbc68c0447c92bebec5b695881093 100644 (file)
@@ -32,6 +32,7 @@ menu:
         save_link: 'Salva collegamento'
         back_to_unread: 'Torna ai contenuti non letti'
         # users_management: 'Users management'
+        # site_credentials: 'Site credentials'
     top:
         add_new_entry: 'Aggiungi un nuovo contenuto'
         search: 'Cerca'
index 9e941de0a3f90a33b0168f6e30f10ce09df89266..bc11b2a492e9767f69b032d5c0c6c03da132602e 100644 (file)
@@ -32,6 +32,7 @@ menu:
         save_link: 'Enregistrar un novèl article'
         back_to_unread: 'Tornar als articles pas legits'
         users_management: 'Gestion dels utilizaires'
+        # site_credentials: 'Site credentials'
     top:
         add_new_entry: 'Enregistrar un novèl article'
         search: 'Cercar'
index 38e051f583a73efbb1d731871d215afc0a004ab9..033d6ac5539693e3c993123320cc61401c97e15b 100644 (file)
@@ -32,6 +32,7 @@ menu:
         save_link: 'Zapisz link'
         back_to_unread: 'Powrót do nieprzeczytanych artykułów'
         users_management: 'Zarządzanie użytkownikami'
+        # site_credentials: 'Site credentials'
     top:
         add_new_entry: 'Dodaj nowy wpis'
         search: 'Szukaj'
index d3b245b834224c245ad86d7255bfd13ed6a719da..c70c2496104fd4ca116275dac5e7b6be14580be0 100644 (file)
@@ -32,6 +32,7 @@ menu:
         save_link: 'Salvar um link'
         back_to_unread: 'Voltar para os artigos não lidos'
         users_management: 'Gestão de Usuários'
+        # site_credentials: 'Site credentials'
     top:
         add_new_entry: 'Adicionar uma nova entrada'
         search: 'Pesquisa'
index 66c7242996d21478ac174cf2e698e347c4703349..a5dc44f0247b2c383cde4e7b197ff44b9f80a4de 100644 (file)
@@ -32,6 +32,7 @@ menu:
         # save_link: 'Save a link'
         back_to_unread: 'Înapoi la articolele necitite'
         # users_management: 'Users management'
+        # site_credentials: 'Site credentials'
     top:
         add_new_entry: 'Introdu un nou articol'
         search: 'Căutare'
index 34ae5b8777dbde676e328cc7794745a3dbab6388..4d01e7f75e460cd5c104aed9a92c7a12ea1933ba 100644 (file)
@@ -32,6 +32,7 @@ menu:
         # save_link: 'Save a link'
         back_to_unread: 'Okunmayan makalelere geri dön'
         # users_management: 'Users management'
+        # site_credentials: 'Site credentials'
     top:
         add_new_entry: 'Yeni bir makale ekle'
         search: 'Ara'
index 8448f17ec356b0ad82387de201929609e3adfc4f..882be430f75731241f539348baf0ee89a6214f6e 100644 (file)
@@ -49,7 +49,7 @@
                                     <button onclick="return confirm('{{ 'site_credential.form.delete_confirm'|trans|escape('js') }}')" type="submit" class="btn waves-effect waves-light red">{{ 'site_credential.form.delete'|trans }}</button>
                                 {{ form_end(delete_form) }}
                             </p>
-                            <p><a class="waves-effect waves-light btn blue-grey" href="{{ path('site_credential_index') }}">{{ 'site_credential.form.back_to_list'|trans }}</a></p>
+                            <p><a class="waves-effect waves-light btn blue-grey" href="{{ path('site_credentials_index') }}">{{ 'site_credential.form.back_to_list'|trans }}</a></p>
                         </div>
                     </div>
                 </div>
index fda60b31f85f43a7a5002003d1dfe297a4058e6a..c128bcebd0e13b3f6cf176e245343421c62999f5 100644 (file)
@@ -25,7 +25,7 @@
                                     <td>{{ credential.host }}</td>
                                     <td>{{ credential.username }}</td>
                                     <td>
-                                        <a href="{{ path('site_credential_edit', { 'id': credential.id }) }}">{{ 'site_credential.list.edit_action'|trans }}</a>
+                                        <a href="{{ path('site_credentials_edit', { 'id': credential.id }) }}">{{ 'site_credential.list.edit_action'|trans }}</a>
                                     </td>
                                 </tr>
                             {% endfor %}
@@ -33,7 +33,7 @@
                         </table>
                         <br />
                         <p>
-                            <a href="{{ path('site_credential_new') }}" class="waves-effect waves-light btn">{{ 'site_credential.list.create_new_one'|trans }}</a>
+                            <a href="{{ path('site_credentials_new') }}" class="waves-effect waves-light btn">{{ 'site_credential.list.create_new_one'|trans }}</a>
                         </p>
                     </div>
                 </div>
index bf713902ae834ca4494a0cde1157047c9bad7a4b..3c008cdecf464614b0929949850316434c3d6543 100644 (file)
@@ -42,7 +42,7 @@
                                 {{ form_widget(form.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
                                 {{ form_rest(form) }}
                             </form>
-                            <p><a class="waves-effect waves-light btn blue-grey" href="{{ path('site_credential_index') }}">{{ 'site_credential.form.back_to_list'|trans }}</a></p>
+                            <p><a class="waves-effect waves-light btn blue-grey" href="{{ path('site_credentials_index') }}">{{ 'site_credential.form.back_to_list'|trans }}</a></p>
                         </div>
                     </div>
                 </div>
index 42aeace931f4f01c5128b06015e4a4c689bfb4ea..17fa13bb5f247afd3013812780c8e3e5935f5d7d 100644 (file)
@@ -38,6 +38,9 @@
                 {{ render(controller("WallabagCoreBundle:Entry:searchForm", {'currentRoute': app.request.attributes.get('_route')})) }}
             </div>
         </li>
+        {% if craue_setting('restricted_access') %}
+        <li class="menu site_credentials"><a href="{{ path('site_credentials_index') }}">{{ 'menu.left.site_credentials'|trans }}</a></li>
+        {% endif %}
         <li class="menu config"><a href="{{ path('config') }}">{{ 'menu.left.config'|trans }}</a></li>
         {% if is_granted('ROLE_SUPER_ADMIN') %}
             <li class="menu users"><a href="{{ path('user_index') }}">{{ 'menu.left.users_management'|trans }}</a></li>
index 2dab1c186d60e9fd6f2c9b372b2113f3f898928d..60907e11a253f77520f2aa7c37f82fa6fddc62fd 100644 (file)
             <li class="bold {% if currentRoute == 'config' %}active{% endif %}">
                 <a class="waves-effect" href="{{ path('config') }}">{{ 'menu.left.config'|trans }}</a>
             </li>
+            {% if craue_setting('restricted_access') %}
+            <li class="bold {% if currentRoute starts with 'site_credentials_' %}active{% endif %}">
+                <a class="waves-effect" href="{{ path('site_credentials_index') }}">{{ 'menu.left.site_credentials'|trans }}</a>
+            </li>
+            {% endif %}
             {% if is_granted('ROLE_SUPER_ADMIN') %}
                 <li class="bold {% if currentRoute starts with 'user_' %}active{% endif %}">
                     <a class="waves-effect" href="{{ path('user_index') }}">{{ 'menu.left.users_management'|trans }}</a>
diff --git a/tests/Wallabag/CoreBundle/Controller/SiteCredentialControllerTest.php b/tests/Wallabag/CoreBundle/Controller/SiteCredentialControllerTest.php
new file mode 100644 (file)
index 0000000..47bf090
--- /dev/null
@@ -0,0 +1,140 @@
+<?php
+
+namespace Tests\Wallabag\CoreBundle\Controller;
+
+use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
+
+class SiteCredentialControllerTest extends WallabagCoreTestCase
+{
+    public function testListSiteCredential()
+    {
+        $this->logInAs('admin');
+        $client = $this->getClient();
+
+        $crawler = $client->request('GET', '/site-credentials/');
+
+        $this->assertEquals(200, $client->getResponse()->getStatusCode());
+
+        $body = $crawler->filter('body')->extract(['_text'])[0];
+
+        $this->assertContains('site_credential.description', $body);
+        $this->assertContains('site_credential.list.create_new_one', $body);
+    }
+
+    public function testNewSiteCredential()
+    {
+        $this->logInAs('admin');
+        $client = $this->getClient();
+
+        $crawler = $client->request('GET', '/site-credentials/new');
+
+        $this->assertEquals(200, $client->getResponse()->getStatusCode());
+
+        $body = $crawler->filter('body')->extract(['_text'])[0];
+
+        $this->assertContains('site_credential.new_site_credential', $body);
+        $this->assertContains('site_credential.form.back_to_list', $body);
+
+        $form = $crawler->filter('button[id=site_credential_save]')->form();
+
+        $data = [
+            'site_credential[host]' => 'google.io',
+            'site_credential[username]' => 'sergei',
+            'site_credential[password]' => 'microsoft',
+        ];
+
+        $client->submit($form, $data);
+
+        $this->assertEquals(302, $client->getResponse()->getStatusCode());
+
+        $crawler = $client->followRedirect();
+
+        $this->assertContains('flashes.site_credential.notice.added', $crawler->filter('body')->extract(['_text'])[0]);
+    }
+
+    /**
+     * @depends testNewSiteCredential
+     */
+    public function testEditSiteCredential()
+    {
+        $this->logInAs('admin');
+        $client = $this->getClient();
+
+        $credential = $client->getContainer()
+            ->get('doctrine.orm.entity_manager')
+            ->getRepository('WallabagCoreBundle:SiteCredential')
+            ->findOneByHost('google.io');
+
+        $crawler = $client->request('GET', '/site-credentials/'.$credential->getId().'/edit');
+
+        $this->assertEquals(200, $client->getResponse()->getStatusCode());
+
+        $body = $crawler->filter('body')->extract(['_text'])[0];
+
+        $this->assertContains('site_credential.edit_site_credential', $body);
+        $this->assertContains('site_credential.form.back_to_list', $body);
+
+        $form = $crawler->filter('button[id=site_credential_save]')->form();
+
+        $data = [
+            'site_credential[host]' => 'google.io',
+            'site_credential[username]' => 'larry',
+            'site_credential[password]' => 'microsoft',
+        ];
+
+        $client->submit($form, $data);
+
+        $this->assertEquals(302, $client->getResponse()->getStatusCode());
+
+        $crawler = $client->followRedirect();
+
+        $this->assertContains('flashes.site_credential.notice.updated', $crawler->filter('body')->extract(['_text'])[0]);
+        $this->assertContains('larry', $crawler->filter('input[id=site_credential_username]')->attr('value'));
+    }
+
+    /**
+     * @depends testNewSiteCredential
+     */
+    public function testEditFromADifferentUserSiteCredential()
+    {
+        $this->logInAs('bob');
+        $client = $this->getClient();
+
+        $credential = $client->getContainer()
+            ->get('doctrine.orm.entity_manager')
+            ->getRepository('WallabagCoreBundle:SiteCredential')
+            ->findOneByHost('google.io');
+
+        $client->request('GET', '/site-credentials/'.$credential->getId().'/edit');
+
+        $this->assertEquals(403, $client->getResponse()->getStatusCode());
+    }
+
+    /**
+     * @depends testNewSiteCredential
+     */
+    public function testDeleteSiteCredential()
+    {
+        $this->logInAs('admin');
+        $client = $this->getClient();
+
+        $credential = $client->getContainer()
+            ->get('doctrine.orm.entity_manager')
+            ->getRepository('WallabagCoreBundle:SiteCredential')
+            ->findOneByHost('google.io');
+
+        $crawler = $client->request('GET', '/site-credentials/'.$credential->getId().'/edit');
+
+        $this->assertEquals(200, $client->getResponse()->getStatusCode());
+
+        $deleteForm = $crawler->filter('body')->selectButton('site_credential.form.delete')->form();
+
+        $client->submit($deleteForm, []);
+
+        $this->assertEquals(302, $client->getResponse()->getStatusCode());
+
+        $crawler = $client->followRedirect();
+
+        $this->assertContains('flashes.site_credential.notice.deleted', $crawler->filter('body')->extract(['_text'])[0]);
+    }
+}
index 8b50bce9801f565c75238b32b98fbd2e03b87d5a..980f75793b9cb1efa6d229f459225bfd951f6935 100644 (file)
@@ -8,6 +8,8 @@ use BD\GuzzleSiteAuthenticator\SiteConfig\SiteConfig;
 use Graby\SiteConfig\SiteConfig as GrabySiteConfig;
 use PHPUnit_Framework_TestCase;
 use Wallabag\CoreBundle\GuzzleSiteAuthenticator\GrabySiteConfigBuilder;
+use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
+use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
 
 class GrabySiteConfigBuilderTest extends PHPUnit_Framework_TestCase
 {
@@ -17,7 +19,7 @@ class GrabySiteConfigBuilderTest extends PHPUnit_Framework_TestCase
     public function testBuildConfigExists()
     {
         /* @var \Graby\SiteConfig\ConfigBuilder|\PHPUnit_Framework_MockObject_MockObject */
-        $grabyConfigBuilderMock = $this->getMockBuilder('\Graby\SiteConfig\ConfigBuilder')
+        $grabyConfigBuilderMock = $this->getMockBuilder('Graby\SiteConfig\ConfigBuilder')
             ->disableOriginalConstructor()
             ->getMock();
 
@@ -38,9 +40,30 @@ class GrabySiteConfigBuilderTest extends PHPUnit_Framework_TestCase
         $handler = new TestHandler();
         $logger->pushHandler($handler);
 
+        $siteCrentialRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\SiteCredentialRepository')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $siteCrentialRepo->expects($this->once())
+            ->method('findOneByHostAndUser')
+            ->with('example.com', 1)
+            ->willReturn(['username' => 'foo', 'password' => 'bar']);
+
+        $user = $this->getMockBuilder('Wallabag\UserBundle\Entity\User')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $user->expects($this->once())
+            ->method('getId')
+            ->willReturn(1);
+
+        $token = new UsernamePasswordToken($user, 'pass', 'provider');
+
+        $tokenStorage = new TokenStorage();
+        $tokenStorage->setToken($token);
+
         $this->builder = new GrabySiteConfigBuilder(
             $grabyConfigBuilderMock,
-            ['example.com' => ['username' => 'foo', 'password' => 'bar']],
+            $tokenStorage,
+            $siteCrentialRepo,
             $logger
         );
 
@@ -82,9 +105,30 @@ class GrabySiteConfigBuilderTest extends PHPUnit_Framework_TestCase
         $handler = new TestHandler();
         $logger->pushHandler($handler);
 
+        $siteCrentialRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\SiteCredentialRepository')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $siteCrentialRepo->expects($this->once())
+            ->method('findOneByHostAndUser')
+            ->with('unknown.com', 1)
+            ->willReturn(null);
+
+        $user = $this->getMockBuilder('Wallabag\UserBundle\Entity\User')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $user->expects($this->once())
+            ->method('getId')
+            ->willReturn(1);
+
+        $token = new UsernamePasswordToken($user, 'pass', 'provider');
+
+        $tokenStorage = new TokenStorage();
+        $tokenStorage->setToken($token);
+
         $this->builder = new GrabySiteConfigBuilder(
             $grabyConfigBuilderMock,
-            [],
+            $tokenStorage,
+            $siteCrentialRepo,
             $logger
         );