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
WebApiIntegrationtestBase
et 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/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'utilisateuradmin
créé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 estOK
ResultatConnexionDto 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.