using Omika.App.Local.Abstractions; using Omika.App.Local.Models; using Omika.App.Navigation; using Omika.App.ViewModels; namespace Omika.Tests.Mobile.Local; /// /// Tests du ViewModel Détail Équipe : liste des membres, actions rapides /// téléphone / email via des fakes plateforme et remontée du résultat false /// (aucune application de messagerie disponible) à l'utilisateur. /// public class EquipeDetailViewModelTests { private sealed class FakePhoneLauncher : IPhoneLauncher { public Task DialAsync(string phoneNumber) => Task.FromResult(true); } private sealed class FakeEmailLauncher : IEmailLauncher { public int ComposeCalls { get; private set; } public string? LastEmail { get; private set; } public bool ComposeResult { get; set; } = true; public Task ComposeAsync(string email) { ComposeCalls++; LastEmail = email; return Task.FromResult(ComposeResult); } } private readonly FakePhoneLauncher _phoneLauncher = new(); private readonly FakeEmailLauncher _emailLauncher = new(); private readonly EquipeDetailViewModel _viewModel; public EquipeDetailViewModelTests() { _viewModel = new EquipeDetailViewModel(new NavigationService(), _phoneLauncher, _emailLauncher); } private static CollaborateurListItem Collaborateur(string? email = null) => new() { CollaborateurGuid = Guid.NewGuid(), DisplayName = "Jean Dupont", Email = email }; [Fact] public async Task EmailCollaborateur_LauncherRetourneTrue_AucunMessage() { _emailLauncher.ComposeResult = true; await _viewModel.EmailCollaborateurCommand.ExecuteAsync(Collaborateur("jean@omika.fr")); Assert.Equal(1, _emailLauncher.ComposeCalls); Assert.Equal("jean@omika.fr", _emailLauncher.LastEmail); Assert.Null(_viewModel.ErrorMessage); } [Fact] public async Task EmailCollaborateur_LauncherRetourneFalse_MessageErreur() { _emailLauncher.ComposeResult = false; await _viewModel.EmailCollaborateurCommand.ExecuteAsync(Collaborateur("jean@omika.fr")); Assert.Equal(1, _emailLauncher.ComposeCalls); Assert.Equal("Aucune application de messagerie disponible.", _viewModel.ErrorMessage); } [Fact] public async Task EmailCollaborateur_SansEmail_NeLancePas() { await _viewModel.EmailCollaborateurCommand.ExecuteAsync(Collaborateur(null)); Assert.Equal(0, _emailLauncher.ComposeCalls); Assert.Null(_viewModel.ErrorMessage); } }