<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jules ADONSI</title>
    <description>The latest articles on DEV Community by Jules ADONSI (@julesadonsi).</description>
    <link>https://dev.to/julesadonsi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F483566%2F0a5f56a1-c72c-458e-81b7-2392532ec462.jpg</url>
      <title>DEV Community: Jules ADONSI</title>
      <link>https://dev.to/julesadonsi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/julesadonsi"/>
    <language>en</language>
    <item>
      <title>Upload image with loader using Angular and Template driven form.</title>
      <dc:creator>Jules ADONSI</dc:creator>
      <pubDate>Fri, 24 Mar 2023 17:38:30 +0000</pubDate>
      <link>https://dev.to/julesadonsi/upload-image-with-loader-using-angular-and-template-driven-form-4c19</link>
      <guid>https://dev.to/julesadonsi/upload-image-with-loader-using-angular-and-template-driven-form-4c19</guid>
      <description>&lt;p&gt;In web applications, it is common to upload files by the user, like profile photos, cover photos ....&lt;/p&gt;

&lt;p&gt;In this tutorial we will discover how to upload a file with a loader using Angular framwork and template driven form.&lt;/p&gt;

&lt;p&gt;To begin you must create a blank angular project using this command. You obtain a ready angular project for this tutoriel. Next, open your project in your favorite code editor.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--adp9D9rp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5u21nmzde43pbxfptcme.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--adp9D9rp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5u21nmzde43pbxfptcme.png" alt="Image description" width="800" height="192"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In app.module.ts file, we need to import the form module and httpClient module of angular to enable using forms and possibility to make request on API.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ziUpTznz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qocdo775pjiqht9vp5ar.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ziUpTznz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qocdo775pjiqht9vp5ar.png" alt="Image description" width="800" height="572"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, create an service and  name this &lt;strong&gt;upload&lt;/strong&gt; using the following command provide by angular CLI.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--E1P2KY-5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mnmuki7ihhl3uvlrksle.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--E1P2KY-5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mnmuki7ihhl3uvlrksle.png" alt="Image description" width="800" height="159"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In upload.service.ts file, we will add some functions that allowed to make  request API. In the end your upload.service.ts file should be like this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JFK46GAW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l6b0y4p75bwop0d7tgi0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JFK46GAW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l6b0y4p75bwop0d7tgi0.png" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, create an component with name "upload-file", for that use the following command.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iMX-fzNh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4klteh29bcgdog1jgdax.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iMX-fzNh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4klteh29bcgdog1jgdax.png" alt="Image description" width="800" height="159"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Install bootstrap css with npm install bootstrapp and import it in style.scss in your src directory.&lt;/p&gt;

&lt;p&gt;We can now work in our component, in "upload-file.component.html" file paste this code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bbHwTtD6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/48xpa5kblsh6kb896bqn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bbHwTtD6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/48xpa5kblsh6kb896bqn.png" alt="Image description" width="800" height="572"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In upload-file.component.ts we paste the following code to end this feature correctly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UkL63_WB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/29ofqbc7696r40idfyt7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UkL63_WB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/29ofqbc7696r40idfyt7.png" alt="Image description" width="800" height="752"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your app.component.html should be like this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uPN_njQQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0xurma5f2qubobqo72y3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uPN_njQQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0xurma5f2qubobqo72y3.png" alt="Image description" width="800" height="132"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/JulesAD96/uploadImage"&gt;https://github.com/JulesAD96/uploadImage&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How set default value to select in angular template driven form</title>
      <dc:creator>Jules ADONSI</dc:creator>
      <pubDate>Tue, 21 Mar 2023 17:36:34 +0000</pubDate>
      <link>https://dev.to/julesadonsi/how-set-default-value-to-select-in-angular-template-driven-form-d33</link>
      <guid>https://dev.to/julesadonsi/how-set-default-value-to-select-in-angular-template-driven-form-d33</guid>
      <description>&lt;p&gt;Set a select html option by default with angular using the template driven form. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4RHnfHh_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kqxji0udsvkhet0hk423.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4RHnfHh_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kqxji0udsvkhet0hk423.png" alt="Image description" width="880" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>angular</category>
      <category>templatedrivenform</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Laravel tip! How to pass an array of data in parameters to an API rest endpoint</title>
      <dc:creator>Jules ADONSI</dc:creator>
      <pubDate>Mon, 08 Aug 2022 10:41:00 +0000</pubDate>
      <link>https://dev.to/julesadonsi/laravel-tip-how-to-pass-an-array-of-data-in-parameters-to-an-api-rest-endpoint-4ni2</link>
      <guid>https://dev.to/julesadonsi/laravel-tip-how-to-pass-an-array-of-data-in-parameters-to-an-api-rest-endpoint-4ni2</guid>
      <description>&lt;p&gt;Little trick to pass a data table to your method with laravel.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/*
* Url schema
* http://127.0.0.1:8000/api/messages/?message[]=450&amp;amp;message[]=451&amp;amp;message[]=452
*/ 

//Endpoint
Route::delete('messages/{message?}', [MessageController::class, 'delete']);

// Methode delete of MessageController
public function delete(Request $request){
  $messageIds = $request-&amp;gt;message;

  Message::delete($messageIds);
}
// The variable $messageIds will be an array containing the ids of the messages 
// to be deleted by the function, when you use dd($messageIds) you can see! 

array:3 [
  0 =&amp;gt; "450",
  1 =&amp;gt; "451",
  2 =&amp;gt; "452"
]

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>laravel</category>
      <category>endpoint</category>
      <category>api</category>
    </item>
    <item>
      <title>Comment faire des tests unitaires sur une API rest avec Laravel 9 et PEST</title>
      <dc:creator>Jules ADONSI</dc:creator>
      <pubDate>Mon, 01 Aug 2022 15:39:00 +0000</pubDate>
      <link>https://dev.to/julesadonsi/comment-faire-des-tests-unitaires-sur-une-api-rest-avec-laravel-9-et-pest-2lka</link>
      <guid>https://dev.to/julesadonsi/comment-faire-des-tests-unitaires-sur-une-api-rest-avec-laravel-9-et-pest-2lka</guid>
      <description>&lt;p&gt;Laravel est un framework réputé pour  l’élégance au niveau de sa syntaxe et sa facilité d’apprentissage, il est utilisé par les artisans du web pour le développement d’applications simples mais aussi complexes. Dans le développement d’applications web une des bonnes pratiques est de tester son code en écrivant du code pour vérifier si l’application fonctionne comme prévu.&lt;/p&gt;

&lt;p&gt;Dans ce tutoriel nous allons concevoir une API REST pour l’authentification des utilisateurs(Register, login, logout) et mettre en place une série de tests afin de vérifier si notre code fonctionne comme nous le souhaitons. Il faut noté qu’il est possible de tester une telle application en utilisation un outil comme POSTMAN pour observer les réponses d’api, ce n’est pas de ça qu’il s’agit ici.&lt;/p&gt;

&lt;p&gt;Pour mettre en place nos tests nous utiliserons un framework de test nommé PEST qui lui aussi à l’instar de Laravel propose une syntaxe élégante et facile à comprendre il a été  conçu pour apporter la joie des tests à PHP.&lt;/p&gt;

&lt;p&gt;Note: Prérequis pour suivre ce tutoriel&lt;/p&gt;

&lt;p&gt;Connaitre le framework Laravel (Créaction de model, Eloquent, Routage)&lt;br&gt;
Connaitre les bases du fonctionnement des API REST et avoir déjà implémentée une API REST avec laravel&lt;br&gt;
Savoir installer des packages externes dans une application laravel via le gestionnaire COMPOSER&lt;br&gt;
Okay trêve de bavardage on rentre dans le vif du sujet, commence d’abord par créer et mettre en place un projet laravel.&lt;/p&gt;

&lt;p&gt;1-Installation de Laravel et Laravel Passport&lt;/p&gt;

&lt;p&gt;Créer un nouveau projet laravel utilisait la commande suivante et installer le package PASSPORT de larve en suivant les étapes ci-dessous.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;composer create-project laravel/laravel lara-test-api&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Une fois l’installation terminée crée une base de donné et ajouté l’eau projet grâce au fichier .env de configuration. Notre objectif est la création d’un système d’authentification basé sur les tokens  JWT(json web tokens) pour cela nous allons utiliser une librairie Laravel  nommé PASSPORT qui va grandement faciliter notre travail pour la créaction des tokens.&lt;/p&gt;

&lt;p&gt;Taper cette commande à la racine de votre application laravel créée précédemment cela permettra de télécharger le package Passport sur notre projet&lt;/p&gt;

&lt;p&gt;&lt;code&gt;composer require laravel/passport&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Ensuite vous devez exécuter les migrations avec la commande suivante pour mettre à jour votre base de donner.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;php artisan migrate&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Ensuite, vous devez exécuter la commande  php artisan passport:install. Cette commande créera les clés de cryptage nécessaires pour générer des jetons d’accès sécurisés.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;php artisan passport:install&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Dans le modèle utilisateur vous devez supprimer le trait Laravel\Sanctum\HasApiTokens  venu par défaut lors de l’installation et le remplacer par Laravel\Passport\HasApiTokens qui lui viens comme vous pouvez le constater avec Passport. Nous aurons donc ceci dans le fichier User.php.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Passport\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;

/**
* The attributes that are mass assignable.
*
* @var array&amp;lt;int, string&amp;gt;
*/
protected $fillable = ['name','email','password',];

/**
* The attributes that should be hidden for serialization.
*
* @var array&amp;lt;int, string&amp;gt;
*/
protected $hidden = ['password','remember_token',];

/**
* The attributes that should be cast.
*
* @var array&amp;lt;string, string&amp;gt;
*/
protected $casts = ['email_verified_at' =&amp;gt; 'datetime',];
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nous avons désormais un projet laravel avec laravel qui peut créer des tokens jwt pour l’authentification des requêtes d’API.&lt;/p&gt;

&lt;p&gt;2- Création de l’API rest d’authentification.&lt;br&gt;
Notre application a désormais tous ce qu’il faut pour créer et envoyer des tokens JWT, dans cette partie nous allons créer les différentes API pour la création de compte(register), la connexion au compte(login), la déconnexion d’un compte(logout).&lt;/p&gt;

&lt;p&gt;Créer donc un contrôleur nommé AuthenticationController avec la commande artisan ci-dessous.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;php artisan make:controller Api/v1/Auth/AuthenticationController&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Dans se contôleur nous allons écrire la logique de nos fonctions (Register, login, logout), à cet effet nous allons commencer par le fonction register qui va nous permettre de créer un compte pour un utilisateur avec les informations suviantes&lt;/p&gt;

&lt;p&gt;Email&lt;br&gt;
Nom&lt;br&gt;
Mot de passe&lt;br&gt;
Donc notre fonction register se présente comme suite:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public function register(Request $request) {
// Validation des donnés envoyés par l'utilisateur
  $request-&amp;gt;validate([
     'name' =&amp;gt; 'required|string|max:50',
     'email' =&amp;gt; 'required|email|max:50',
     'password'=&amp;gt;'required|string|min:6',
  ]);

$user = User::create([
   "email" =&amp;gt; $request-&amp;gt;email,
   'name' =&amp;gt; $request-&amp;gt;name,
   'password' =&amp;gt; bcrypt('password')
]);

// Créaction et recupération du token jwt
$data['token'] = $user-&amp;gt;createToken($user-&amp;gt;email)-&amp;gt;accessToken;
$data['message'] = 'Utilisateur crée';

return response()-&amp;gt;json($data, 200);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La fonction login comme vous le savez sans doute déjà aura pour rôle de connecter un utilisateur déjà inscript à notre site en utilisant l’email et le mot de passe, ajouter le code ci-dessous à votre contrôleur&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public function login(Request $request) {
   $request-&amp;gt;validate([
      'email' =&amp;gt; 'required|string|max:20',
      'password'=&amp;gt;'required|string|min:6',
   ]);

   $credentials = $request-&amp;gt;only(['email', 'password']);
   if(Auth::attempt($credentials)){
      $data['token'] = Auth::user()
            -&amp;gt;createToken($request-&amp;gt;email)-&amp;gt;accessToken;
      $data['message'] = 'Connexion réussie';

      return response()-&amp;gt;json($data,200);
    }
    $data['message'] = "Vos identifiants sont 
     incorrects.";

    return response()-&amp;gt;json($data, 401);
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notre fonction logout va nous permettre de déconnecter un utilisateur en supprimant le token authentification créer lors de la connexion, ajouter donc ce code à votre contrôleur.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public function logout(Request $request) {
     Auth::user()-&amp;gt;token()-&amp;gt;revoke();
     $data['message'] = 'Déconnexion réussie.';

     return response()-&amp;gt;json($data, 200);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Créons maintenant les routes dans le fichier api.php afin de disposer d’urls à pour faire nos appels api. Ajouter le code ci-dessous à votre fichier api.php dans le dossier routes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;use App\Http\Controllers\Api\v1\Auth\AuthenticationController;
use Illuminate\Support\Facades\Route;
Route::group(['prefix' =&amp;gt; 'v1'], function() {
Route::post('register', [AuthenticationController::class, 'register']);
Route::post('login', [AuthenticationController::class, 'login']);
Route::post('logout', [AuthenticationController::class, 'logout']);
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Commençons par installé le package laravel de pest qui va nous permettre d’écrire les tests pour notre code, De base pest est framework de tests pour PHP, un pluggin a été développer pour prendre en charge le framework laravel pour l’installer dans votre application laravel il suffit de taper le commande suivante;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;composer require pestphp/pest-plugin-laravel --dev&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Après le téléchargement exécuté la commande d’installation ci-dessous, cette commande installe le package et crée un fichier nommé Pest.php dans le dossier tests de votre application&lt;br&gt;
&lt;code&gt;&lt;br&gt;
php artisan pest:install&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Modifier la ligne 14 du fichier Pest.php comme ceci&lt;br&gt;
uses(Tests\TestCase::class)-&amp;gt;in('Unit');&lt;/p&gt;

&lt;p&gt;Nos tests seront contenus dans un fichier, utilisons la commande artisan pest:test  pour créer un fichier dans le dossier tests/Unit,&lt;/p&gt;

&lt;p&gt;php artisan pest:test AuthenticationTest --unit&lt;/p&gt;

&lt;p&gt;le drapeau –unit  précise qu’il s’agit d’un test unitaire à la différence des tests  de features, sans ce drapeau la commande artisan ci-dessus génère le fichier  AuthenticationTest.php  dans le dossier tests/Feature.&lt;/p&gt;

&lt;p&gt;La fonction register créer un utilisateur et renvoie une réponse au format json en utilisation le verbe HTTP post, ajoute le code ci-dessous dans le fichier tests/Unit/AuthenticationTest.php&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;use App\Models\User;
use function Pest\Laravel\postJson;

test('User can register', function () {
    $user = User::factory()-&amp;gt;raw();
    $response = postJson('api/v1/register', $user);
    $response-&amp;gt;assertStatus(200)
        -&amp;gt;assertJsonStructure(['message', 'token']);
});

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explications:&lt;/p&gt;

&lt;p&gt;Nous importons d’abord le modèle utilisateur et la fonction postJson qui va nous permettre de soumettre une requête post avec les donnés requits pour la création de compte.&lt;br&gt;
La fonction test prend deux arguments représentant respectivement le nom de notre test (User can register) et une function qui contient les attentes du test.&lt;br&gt;
La fonction postJson prend deux paramètres (l’url et les données à envoyer dans notre cas la variable $user qui utilise les factory pour avoir un utilisateur. postJson renvoi un objet sur lequel nous pouvons appeler des méthodes telques assertStatus et assertJsonStructure, d’autres méthodes d’assertion sont disponibles sur l’objet $response instance de la class  Illuminate\Testing\TestResponse. &lt;br&gt;
assertStatus vérifie le status de la requête effectuée par le méthode postJson dans notre cas ici il va vérifier si le status de la réponse est égale à 200.&lt;br&gt;
assertJsonStructure vérifie la structure des donnés json renvoyé, plus précisement si il y à une clé ‘data’.&lt;br&gt;
Pour exécuter notre  tests taper la commande suivante&lt;/p&gt;

&lt;p&gt;&lt;code&gt;php artisan test --testsuite=Unit --filter=AuthenticationTest&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;la commande ci-dessus précise le résultat du test en terminale comme ceci:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rEBXa2ll--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/60wcvauetvutut7qh9ws.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rEBXa2ll--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/60wcvauetvutut7qh9ws.png" alt="Image description" width="360" height="112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Testons les autres fonctions, ajouter le code ci-dessous dans votre fichier AuthenticationTest.php&lt;/p&gt;

&lt;p&gt;Fonction login&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
test('User can login', function (){
     $userCredential = [
       'email' =&amp;gt; User::first()-&amp;gt;email, 
       'password'=&amp;gt;'password'
      ];
      $response = postJson('api/v1/login', $userCredential);
     $response-&amp;gt;assertStatus(200)
       -&amp;gt;assertJsonStructure(['message', 'token']);
});

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fonction login avec échec de connexion&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
test('User can not login', function() {
     $userCredential = [
        'email' =&amp;gt; User::first()-&amp;gt;email, 
        'password'=&amp;gt;'pasdsdssd'
     ];
     $response = postJson('api/v1/login', $userCredential);
    $response-&amp;gt;assertStatus(401)
         -&amp;gt;assertJsonStructure(['message']);
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fonction logout&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;test('User logout', function(){
    $userLoged = postJson('api/v1/login', [
        'email' =&amp;gt; User::first()-&amp;gt;email,
        'password' =&amp;gt; 'password',
    ]);
    // Get user token in requette response
    $userToken = $userLoged['token'];
    $response = withHeader('Authorization', 'Bearer '.$userToken)-&amp;gt;json('post','api/v1/logout');
    $response-&amp;gt;assertStatus(200)-&amp;gt;assertJsonStructure(['message']);
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vérifions si tous nos tests passent en exécutant de nouveau la commande :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;php artisan test --testsuite=Unit --filter=AuthenticationTest&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Voici le résultat si tous ce passe bien&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PZ0ORz4n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p0xc0tihmnecdchnu3i4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PZ0ORz4n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p0xc0tihmnecdchnu3i4.png" alt="Image description" width="349" height="152"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On remarque dans la console que tous nos tests passent, Nous voici avec une application simple testée.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
