using System.ComponentModel; using Omika.App.Local.Models; namespace Omika.Tests.Mobile.Local; /// /// L'état d'épinglage des éléments de liste (dossiers, clients, sites, /// interventions) est OBSERVABLE : c'est ce qui permet de basculer l'étoile /// immédiatement, sans reconstruire la liste affichée ni relire la base locale. /// Ces tests verrouillent cette propriété, dont dépend la réactivité du bouton /// « Épingler ». /// public class ListItemsEpinglageObservableTests { [Fact] public void DossierListItem_IsPinned_NotifieUneSeuleFois() { var item = new DossierListItem { DossierGuid = Guid.NewGuid() }; var notifications = Collecter(item); item.IsPinned = true; item.IsPinned = true; Assert.True(item.IsPinned); Assert.Single(notifications); Assert.Equal(nameof(DossierListItem.IsPinned), notifications[0]); } [Fact] public void ClientListItem_IsPinned_NotifieUneSeuleFois() { var item = new ClientListItem { ClientGuid = Guid.NewGuid() }; var notifications = Collecter(item); item.IsPinned = true; item.IsPinned = false; Assert.False(item.IsPinned); Assert.Equal(2, notifications.Count); Assert.All(notifications, n => Assert.Equal(nameof(ClientListItem.IsPinned), n)); } [Fact] public void SiteListItem_IsPinned_NotifieUneSeuleFois() { var item = new SiteListItem { SiteGuid = Guid.NewGuid() }; var notifications = Collecter(item); item.IsPinned = true; item.IsPinned = true; Assert.True(item.IsPinned); Assert.Single(notifications); Assert.Equal(nameof(SiteListItem.IsPinned), notifications[0]); } [Fact] public void InterventionCardItem_IsPinned_NotifieUneSeuleFois() { var item = new InterventionCardItem { InterventionGuid = Guid.NewGuid() }; var notifications = Collecter(item); item.IsPinned = true; item.IsPinned = true; Assert.True(item.IsPinned); Assert.Single(notifications); Assert.Equal(nameof(InterventionCardItem.IsPinned), notifications[0]); } /// /// Abonne un collecteur de notifications et retourne la liste des noms de /// propriétés notifiées (une valeur identique ne doit rien notifier). /// private static List Collecter(INotifyPropertyChanged source) { var notifications = new List(); source.PropertyChanged += (_, e) => notifications.Add(e.PropertyName); return notifications; } }