2-6-6 Seed de données
Tout comme montré dans le cas du test de l'API montré en introduction, il est possible que vous ayez besoin de données dans vos tests MVC.
Par exemple, dans AccueilTests
nous avons ce test:
Snowfall.Tests/Web.Mvc/TestsIntegration/AccueilTests.cs
public async Task Obtenir_AccueilUtilisateurAnonyme_PageAfficheTexte()
{
// Arrange
string url = "/";
// Act
HttpResponseMessage reponse = await Client.GetAsync(url);
// Assert
reponse.EnsureSuccessStatusCode();
string contenu = await reponse.Content.ReadAsStringAsync();
Assert.Contains("Filtrer par ville", contenu);
}
Il serait intéressant de tester qu'un événement possédant un certain nom est présent dans la page.
Snowfall.Tests/TestsMvc/TestsIntegration/AccueilTests.cs
[Fact]
public async Task Obtenir_AccueilUtilisateurAnonyme_PageAfficheTexte()
{
// Arrange
string url = "/";
var ville = new Ville()
{
Nom = "Paris",
PaysIso = "fr"
};
ville = await VilleRepository.Create(ville);
List<Evenement> evenementsList = new()
{
new Evenement()
{
Nom = "Evenement de test",
Description = "Description de l'événement",
Capacite = 10,
Prix = 100,
Date = DateTime.Now,
ImagePath = "image.jpg",
VilleId = ville.Id,
},
};
foreach (var evenement in evenementsList)
{
await EvenementRepository.Create(evenement);
}
// Act
HttpResponseMessage reponse = await Client.GetAsync(url);
// Assert
reponse.EnsureSuccessStatusCode();
IHtmlDocument pageAccueil = await HtmlHelpers.GetDocumentAsync(reponse);
Assert.Contains("Filtrer par ville", pageAccueil.ToHtml());
Assert.Contains("Détails", pageAccueil.ToHtml());
Assert.Contains(evenementsList.First().Nom, pageAccueil.ToHtml());
}
attention
À noter que j'ai modifié le test pour qu'il utilise AngleSharp
afin de lire le contenu HTML. En effet, la librairie gère entre autres l'encodage du texte, ce qui évite certains problèmes avec les accents par exemple.