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.
- Sous le projet
Snowfall.Tests/Web.Api/TestsIntegration->Add->Class/Interface - Appeler la classe de tests
AuthTests - Faites hériter le tout de
WebApiIntegrationtestBaseet définissez le constructeurSnowfall.Tests/Web.Api/TestsIntegration/AuthTests.cspublic class AuthTests : WebApiIntegrationTestBase
{
public AuthTests(
SnowfallApiApplicationFactory application,
TestDatabaseFixture database) : base(application, database)
{ }
}
Créer le test Connexion_AuthentificationSucces_RetourneJetonJwt()
-
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"
};
}infourl: On fait une requête vers l'URL d'API/api/authConnexionDto 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'utilisateuradmincréée dans les seeds de BD. -
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);
} -
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);
}infoAssert.Equal(HttpStatusCode.OK, reponse.StatusCode);permets de valider que le code de retour estOKResultatConnexionDto resultatConnexionDto = await reponse.Content.ReadFromJsonAsync<ResultatConnexionDto>()permets de lire le contenu de la requête et de convertir le tout en objet de typeResultatConnexionDto.
-
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);
}
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.