using System.Collections.Generic; using Omika.App.Services; using Omika.Core.Constants; using Xunit; namespace Omika.Tests.Mobile; /// /// Accès à l'envoi d'email INTERNE selon la préférence de messagerie. /// /// /// Un collaborateur dont la messagerie par défaut est EXTERNE envoie ses courriels /// depuis sa propre application : le droit A.EMAIL.* ne suffit donc pas, le /// composeur interne de l'application ne doit pas lui être proposé (ni à l'entrée /// de la page, ni sur les boutons d'email). La règle est portée par le service de /// droits, seul point consulté par les vues et le garde de navigation. /// /// public class PermissionServiceMessagerieTests { private static PermissionService Service(bool droitEnvoiEmail, bool messagerieExterne) { var service = new PermissionService(); service.SetRights(new Dictionary { [MobilePermissionKeys.EnvoiEmail] = droitEnvoiEmail }); service.SetMessagerieExterne(messagerieExterne); return service; } /// Messagerie interne + droit : l'envoi depuis l'application est possible. [Fact] public void MessagerieInterne_AvecDroit_PeutEnvoyerEmail() { PermissionService service = Service(droitEnvoiEmail: true, messagerieExterne: false); Assert.True(service.PeutEnvoyerEmail); Assert.False(service.MessagerieExterne); } /// /// Messagerie externe : l'envoi interne est refusé même avec le droit — c'est /// la préférence du collaborateur qui prime (envoi depuis sa messagerie). /// [Fact] public void MessagerieExterne_MemeAvecDroit_RefuseLEnvoiInterne() { PermissionService service = Service(droitEnvoiEmail: true, messagerieExterne: true); Assert.True(service.MessagerieExterne); Assert.False(service.PeutEnvoyerEmail); } /// Messagerie interne sans le droit : refusé (règle inchangée). [Fact] public void MessagerieInterne_SansDroit_RefuseLEnvoiInterne() { PermissionService service = Service(droitEnvoiEmail: false, messagerieExterne: false); Assert.False(service.PeutEnvoyerEmail); } /// /// COMPOSER reste possible en messagerie externe : l'utilisateur rédige dans /// Omika (modèle, brouillon) puis envoie depuis sa propre messagerie. Le droit /// d'envoi suffit, la préférence de messagerie ne prive pas du composeur. /// [Fact] public void MessagerieExterne_AvecDroit_PeutComposerEmail() { PermissionService service = Service(droitEnvoiEmail: true, messagerieExterne: true); Assert.True(service.PeutComposerEmail); } /// Composer sans le droit d'envoi reste refusé, quel que soit le choix. [Theory] [InlineData(false)] [InlineData(true)] public void SansDroit_PeutComposerEmailRefuse(bool messagerieExterne) { PermissionService service = Service(droitEnvoiEmail: false, messagerieExterne); Assert.False(service.PeutComposerEmail); } }