using System; using System.Linq; using System.Threading; using Avalonia.Controls; using Avalonia.Headless; using Avalonia.VisualTree; using Xunit; namespace Omika.Tests.Mobile; /// /// Régression : l'agenda personnel n'affiche plus les trois blocs statistiques /// (« Rendez-vous », « Liés à une intervention », « Autonomes »). Ces compteurs /// faisaient doublon avec le bandeau de la journée et alourdissaient l'écran. /// /// /// Le test ouvre la vue RÉELLE et parcourt l'arbre visuel : il ne dépend ni des /// données ni des services (aucun ViewModel n'est nécessaire, les libellés /// vérifiés sont écrits en dur dans le XAML). Il rejoint la collection /// « ApplicationRuntimeContext » car le localisateur d'Avalonia est global au /// processus. /// [Collection("ApplicationRuntimeContext")] public sealed class AgendaSansCartesStatistiquesTests : IDisposable { private readonly HeadlessUnitTestSession _session = HeadlessUnitTestSession.StartNew(typeof(LayoutTestAppBuilder)); public void Dispose() => _session.Dispose(); [Fact] public void AgendaPersonnel_N_AffichePlusLesTroisBlocsStatistiques() { _session.Dispatch( () => { Window fenetre = MesureGeometrique.Ouvrir(new Omika.App.Views.AgendaView(), 360); Control[] descendants = fenetre.GetVisualDescendants().OfType().ToArray(); // 1. Aucune carte statistique (classe de style dédiée). string[] cartes = descendants .OfType() .Where(b => b.Classes.Contains("statCard")) .Select(_ => "statCard") .ToArray(); Assert.Empty(cartes); // 2. Aucun des libellés des trois blocs supprimés. string[] textes = descendants .OfType() .Where(t => !string.IsNullOrWhiteSpace(t.Text)) .Select(t => t.Text!) .ToArray(); Assert.DoesNotContain("Rendez-vous", textes); Assert.DoesNotContain("Liés à une intervention", textes); Assert.DoesNotContain("Autonomes", textes); // 3. Le reste de la page est intact : bandeau de la journée et // sélecteur de mode. Assert.Contains("Votre journée", textes); Assert.Contains("Jour", textes); Assert.Contains("Semaine", textes); Assert.Contains("Calendrier", textes); fenetre.Close(); return true; }, CancellationToken.None).GetAwaiter().GetResult(); } }