203 lines
6.5 KiB
C#
203 lines
6.5 KiB
C#
using Omika.App.Navigation;
|
|
|
|
namespace Omika.Tests.Mobile.Local;
|
|
|
|
/// <summary>
|
|
/// Tests de l'abstraction de navigation : page initiale, sélection, changement
|
|
/// de page, page active, fonctions secondaires smartphone.
|
|
/// </summary>
|
|
public class NavigationServiceTests
|
|
{
|
|
private readonly NavigationService _navigation;
|
|
|
|
public NavigationServiceTests()
|
|
{
|
|
_navigation = new NavigationService();
|
|
}
|
|
|
|
[Fact]
|
|
public void PageInitiale_Home()
|
|
{
|
|
// Assert
|
|
Assert.Equal(AppPage.Home, _navigation.CurrentPage);
|
|
}
|
|
|
|
[Fact]
|
|
public void NavigationItems_ContientToutesLesPages()
|
|
{
|
|
// Assert
|
|
Assert.Equal(7, _navigation.Items.Count);
|
|
Assert.Contains(_navigation.Items, i => i.Page == AppPage.Home);
|
|
Assert.Contains(_navigation.Items, i => i.Page == AppPage.Interventions);
|
|
Assert.Contains(_navigation.Items, i => i.Page == AppPage.Dossiers);
|
|
Assert.Contains(_navigation.Items, i => i.Page == AppPage.Collaborateurs);
|
|
Assert.Contains(_navigation.Items, i => i.Page == AppPage.Clients);
|
|
Assert.Contains(_navigation.Items, i => i.Page == AppPage.Sites);
|
|
Assert.Contains(_navigation.Items, i => i.Page == AppPage.Parametres);
|
|
}
|
|
|
|
[Fact]
|
|
public void NavigateTo_ChangePage()
|
|
{
|
|
// Act
|
|
_navigation.NavigateTo(AppPage.Interventions);
|
|
|
|
// Assert
|
|
Assert.Equal(AppPage.Interventions, _navigation.CurrentPage);
|
|
}
|
|
|
|
[Fact]
|
|
public void NavigateTo_MemePage_NeChangePas()
|
|
{
|
|
// Act
|
|
_navigation.NavigateTo(AppPage.Home);
|
|
|
|
// Assert : la page reste Home.
|
|
Assert.Equal(AppPage.Home, _navigation.CurrentPage);
|
|
}
|
|
|
|
[Fact]
|
|
public void NavigateTo_LeveEvenement()
|
|
{
|
|
// Arrange
|
|
AppPage? received = null;
|
|
_navigation.PageChanged += (_, page) => received = page;
|
|
|
|
// Act
|
|
_navigation.NavigateTo(AppPage.Dossiers);
|
|
|
|
// Assert
|
|
Assert.Equal(AppPage.Dossiers, received);
|
|
}
|
|
|
|
[Fact]
|
|
public void FonctionsSecondaires_Accessibles()
|
|
{
|
|
|
|
// Assert : Sites et Paramètres sont secondaires (menu "Plus" smartphone).
|
|
Assert.Contains(_navigation.SecondaryMobileItems, i => i.Page == AppPage.Sites);
|
|
Assert.Contains(_navigation.SecondaryMobileItems, i => i.Page == AppPage.Parametres);
|
|
}
|
|
|
|
[Fact]
|
|
public void FonctionsPrimaires_Maximum5()
|
|
{
|
|
// Assert : au plus 5 accès directs dans la barre basse smartphone.
|
|
Assert.True(_navigation.PrimaryMobileItems.Count <= 5);
|
|
}
|
|
|
|
[Fact]
|
|
public void FonctionsPrimaires_ContientAccesPrincipaux()
|
|
{
|
|
// Assert : Agenda, Interventions, Dossiers, Équipe sont primaires.
|
|
Assert.Contains(_navigation.PrimaryMobileItems, i => i.Page == AppPage.Home);
|
|
Assert.Contains(_navigation.PrimaryMobileItems, i => i.Page == AppPage.Interventions);
|
|
Assert.Contains(_navigation.PrimaryMobileItems, i => i.Page == AppPage.Dossiers);
|
|
Assert.Contains(_navigation.PrimaryMobileItems, i => i.Page == AppPage.Collaborateurs);
|
|
}
|
|
|
|
[Fact]
|
|
public void Navigation_NeDeclencheAucunAppelAPI()
|
|
{
|
|
// Le NavigationService est purement visuel : il ne référence aucun client API.
|
|
// Ce test vérifie simplement que naviguer ne lève pas d'exception et
|
|
// que la page change sans effet de bord réseau.
|
|
_navigation.NavigateTo(AppPage.Sites);
|
|
Assert.Equal(AppPage.Sites, _navigation.CurrentPage);
|
|
}
|
|
|
|
[Fact]
|
|
public void GoBack_SansHistorique_NeFaitRien()
|
|
{
|
|
// La page initiale est Home et l'historique est vide.
|
|
Assert.False(_navigation.CanGoBack);
|
|
|
|
// Act
|
|
_navigation.GoBack();
|
|
|
|
// Assert
|
|
Assert.Equal(AppPage.Home, _navigation.CurrentPage);
|
|
}
|
|
|
|
[Fact]
|
|
public void GoBack_RetournePagePrecedente()
|
|
{
|
|
// Arrange : Home -> RendezVousDetail.
|
|
_navigation.NavigateTo(AppPage.RendezVousDetail, Guid.NewGuid());
|
|
|
|
// Act
|
|
_navigation.GoBack();
|
|
|
|
// Assert
|
|
Assert.Equal(AppPage.Home, _navigation.CurrentPage);
|
|
}
|
|
|
|
[Fact]
|
|
public void GoBack_RestaureParametre()
|
|
{
|
|
// Arrange : Home -> RendezVousDetail -> InterventionDetail.
|
|
Guid rendezVousId = Guid.NewGuid();
|
|
_navigation.NavigateTo(AppPage.RendezVousDetail, rendezVousId);
|
|
_navigation.NavigateTo(AppPage.InterventionDetail, Guid.NewGuid());
|
|
|
|
// Act
|
|
_navigation.GoBack();
|
|
|
|
// Assert : retour au rendez-vous avec son paramètre d'origine.
|
|
Assert.Equal(AppPage.RendezVousDetail, _navigation.CurrentPage);
|
|
Assert.Equal(rendezVousId, _navigation.CurrentParameter);
|
|
}
|
|
|
|
[Fact]
|
|
public void NavigateTo_EmpileHistorique()
|
|
{
|
|
// Arrange : Home -> Interventions -> InterventionDetail.
|
|
_navigation.NavigateTo(AppPage.Interventions);
|
|
_navigation.NavigateTo(AppPage.InterventionDetail, Guid.NewGuid());
|
|
|
|
// Act / Assert : deux retours successifs remontent l'historique.
|
|
_navigation.GoBack();
|
|
Assert.Equal(AppPage.Interventions, _navigation.CurrentPage);
|
|
|
|
_navigation.GoBack();
|
|
Assert.Equal(AppPage.Home, _navigation.CurrentPage);
|
|
|
|
Assert.False(_navigation.CanGoBack);
|
|
}
|
|
|
|
[Fact]
|
|
public void Replace_RemplaceSansEmpiler()
|
|
{
|
|
// Arrange : Home -> RendezVousDetail (historique = [Home]).
|
|
_navigation.NavigateTo(AppPage.RendezVousDetail, Guid.NewGuid());
|
|
|
|
// Act : remplacement (ex. après la sauvegarde d'un formulaire).
|
|
Guid newInterventionId = Guid.NewGuid();
|
|
_navigation.Replace(AppPage.InterventionDetail, newInterventionId);
|
|
|
|
// Assert : la page courante est remplacée.
|
|
Assert.Equal(AppPage.InterventionDetail, _navigation.CurrentPage);
|
|
Assert.Equal(newInterventionId, _navigation.CurrentParameter);
|
|
|
|
// Le retour revient à la page d'avant le rendez-vous (Home), pas au rendez-vous.
|
|
_navigation.GoBack();
|
|
Assert.Equal(AppPage.Home, _navigation.CurrentPage);
|
|
}
|
|
|
|
[Fact]
|
|
public void NavigateTo_MemePage_NeEmpilePas()
|
|
{
|
|
// Arrange : Home -> Interventions (Home est empilé).
|
|
_navigation.NavigateTo(AppPage.Interventions);
|
|
Assert.True(_navigation.CanGoBack);
|
|
|
|
// Act : re-navigation sur la même page (aucune nouvelle entrée).
|
|
_navigation.NavigateTo(AppPage.Interventions);
|
|
|
|
// Assert : le retour revient à Home (une seule entrée empilée).
|
|
_navigation.GoBack();
|
|
Assert.Equal(AppPage.Home, _navigation.CurrentPage);
|
|
Assert.False(_navigation.CanGoBack);
|
|
}
|
|
}
|