Aller au contenu principal

2-7-1 Test d'une requête d'API POST

Comme premier test de requête d'API POST, on peut vérifier que l'action d'inscription du contrôleur d'inscription fonctionne.

  1. Sous le projet Snowfall.Tests/Web.Api/TestsIntegration -> Add -> Class/Interface
  2. Appeler la classe de tests AuthTests
  3. Faites hériter le tout de WebApiIntegrationtestBase et définissez le constructeur
    Snowfall.Tests/Web.Api/TestsIntegration/AuthTests.cs
    public class AuthTests : WebApiIntegrationTestBase
    {
    public AuthTests(
    SnowfallApiApplicationFactory application,
    TestDatabaseFixture database) : base(application, database)
    { }
    }

Créer le test Connexion_AuthentificationSucces_RetourneJetonJwt()

  1. On crée la coquille du test et on prépare les données.

    Snowfall.Tests/Web.Api/TestsIntegration/AuthTests.cs
    [Fact]
    public async Task Connexion_AuthentificationSucces_RetourneJetonJwt()
    {
    // Arrange
    string url = "api/auth";

    ConnexionDto connexionDto = new ConnexionDto
    {
    Email = "a@dmin.com",
    Password = "!User122432"
    };
    }
    info

    url: On fait une requête vers l'URL d'API /api/auth ConnexionDto connexionDto: on peut créer directement le DTO attendu par l'action d'authentification, on l'enverra avec la requête. Ici, l'utilisateur correspond à l'utilisateur admin créée dans les seeds de BD.

  2. Puis, on fait la requête à l'API via PostAsJsonAsync.

    Snowfall.Tests/Web.Api/TestsIntegration/AuthTests.cs
    [Fact]
    public async Task Connexion_AuthentificationSucces_RetourneJetonJwt()
    {
    // Arrange
    string url = "api/auth";

    ConnexionDto connexionDto = new ConnexionDto
    {
    Email = "a@dmin.com",
    Password = "!User122432"
    };

    // Act
    var reponse = await Client.PostAsJsonAsync(url, connexionDto);
    }
  3. Ensuite, on vérifie si la réponse est un succès et on lit le contenu de la réponse

    Snowfall.Tests/Web.Api/TestsIntegration/AuthTests.cs
    [Fact]
    public async Task Connexion_AuthentificationSucces_RetourneJetonJwt()
    {
    // Arrange
    string url = "api/auth";

    ConnexionDto connexionDto = new ConnexionDto
    {
    Email = "a@dmin.com",
    Password = "!User122432"
    };

    // Act
    var reponse = await Client.PostAsJsonAsync(url, connexionDto);

    // Assert
    Assert.Equal(HttpStatusCode.OK, reponse.StatusCode);

    ResultatConnexionDto resultatConnexionDto = await reponse.Content.ReadFromJsonAsync<ResultatConnexionDto>();
    Assert.NotNull(resultatConnexionDto);
    }
    info
    • Assert.Equal(HttpStatusCode.OK, reponse.StatusCode); permets de valider que le code de retour est OK
    • ResultatConnexionDto resultatConnexionDto = await reponse.Content.ReadFromJsonAsync<ResultatConnexionDto>() permets de lire le contenu de la requête et de convertir le tout en objet de type ResultatConnexionDto.
  4. Finalement, on vérifie que la réponse contient bien un jeton

    Snowfall.Tests/Web.Api/TestsIntegration/AuthTests.cs
    [Fact]
    public async Task Connexion_AuthentificationSucces_RetourneJetonJwt()
    {
    // Arrange
    string url = "api/auth";

    ConnexionDto connexionDto = new ConnexionDto
    {
    Email = "a@dmin.com",
    Password = "!User122432"
    };

    // Act
    var reponse = await Client.PostAsJsonAsync(url, connexionDto);

    // Assert
    Assert.Equal(HttpStatusCode.OK, reponse.StatusCode);

    ResultatConnexionDto resultatConnexionDto = await reponse.Content.ReadFromJsonAsync<ResultatConnexionDto>();
    Assert.NotNull(resultatConnexionDto);

    string jeton = resultatConnexionDto.Token;
    Assert.NotEmpty(jeton);
    }
attention

Si on effectuait une batterie de tests complète pour l'authentification, on vérifierait aussi que de fournir de mauvaises informations de connexion retourne Unauthorized.

On pourrait tester d'autres cas d'utilisation pertinents aussi au besoin.