Tester avec Authentication
##########################

Une fois le middleware ``authentication`` activé dans votre application, vous
aurez besoin de simuler des identifiants de connexion dans vos tests
d'intégration.
Pour commencer, assurez-vous que vos tests de controller ou de middleware
utilisent ``IntegrationTestTrait``::

    // Dans un test de controller.
    use Cake\TestSuite\IntegrationTestTrait;
    use Cake\TestSuite\TestCase;

    class ArticlesControllerTest extends TestCase
    {
        use IntegrationTestTrait;

        // Méthodes de test et helpers
    }

Selon le type d'authentification que vous utilisez, vous aurez besoin de
simuler les identifiants de connexion d'une certaine façon ou d'une autre.
Examinons quelques types d'authentification parmi les plus répandus.

Authentification par la session
===============================

L'authentification par la session implique de simuler les informations
utilisateur qui devraient normalement se trouver dans la session. Dans vos
scénarios de test vous pouvez définir une méthode helper qui vous 'connecte'::

   protected function login($userId = 1)
   {
       $users = TableRegistry::getTableLocator()->get('Users');
       $user = $users->get($userId);
       $this->session(['Auth' => $user]);
   }

Dans vos tests d'intégration vous pouvez utiliser ``login()`` pour simuler un
utilisateur connecté::

   public function testGet()
   {
       $this->login();
       $this->get('/bookmarks/1');
       $this->assertResponseOk();
   }

Authentification par jeton d'accès
==================================

Avec l'authentification par jeton d'accès, vous aurez besoin de simuler
l'en-tête ``Authorization``. Après avoir obtenu un jeton d'accès valide,
paramétrez la requête::

   public function testGet()
   {
       $token = $this->getToken();
       $this->configRequest([
           'headers' => ['Authorization' => 'Bearer ' . $token]
       ]);
       $this->get('/api/bookmarks');
       $this->assertResponseOk();
   }
