Files
Omika/tests/Omika.Tests/Mobile/Local/EquipeDetailViewModelTests.cs
T
2026-10-23 18:46:50 +02:00

83 lines
2.6 KiB
C#

using Omika.App.Local.Abstractions;
using Omika.App.Local.Models;
using Omika.App.Navigation;
using Omika.App.ViewModels;
namespace Omika.Tests.Mobile.Local;
/// <summary>
/// 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.
/// </summary>
public class EquipeDetailViewModelTests
{
private sealed class FakePhoneLauncher : IPhoneLauncher
{
public Task<bool> 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<bool> 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);
}
}