77 lines
3.3 KiB
C#
77 lines
3.3 KiB
C#
using System.Net.Http;
|
|
using Omika.App.Local.Abstractions;
|
|
using Omika.App.Local.Services;
|
|
|
|
namespace Omika.Tests.Mobile.Local;
|
|
|
|
/// <summary>
|
|
/// Tests du classement des erreurs : une indisponibilité du serveur — coupure réseau
|
|
/// OU inscription incomplète (aucune URL d'API) — est un état dégradé journalisé en
|
|
/// Warning/P2, jamais un incident ; une erreur métier conserve son message et sa
|
|
/// gravité.
|
|
///
|
|
/// Origine : ticket de production du 09/10 (AgendaViewModel), où l'absence d'URL
|
|
/// d'API remontait en Error/P1 avec un message technique inactionnable.
|
|
/// </summary>
|
|
public class ReseauMessagesTests
|
|
{
|
|
[Fact]
|
|
public void EstErreurReseau_HttpRequestException_Vrai()
|
|
=> Assert.True(ReseauMessages.EstErreurReseau(new HttpRequestException("Connection failure")));
|
|
|
|
[Fact]
|
|
public void EstErreurReseau_ErreurMetier_Faux()
|
|
=> Assert.False(ReseauMessages.EstErreurReseau(new InvalidOperationException("panne métier")));
|
|
|
|
/// <summary>
|
|
/// Une inscription incomplète n'est PAS une erreur réseau : l'appareil peut être
|
|
/// parfaitement en ligne. La confondre ferait afficher « hors ligne » et masquerait
|
|
/// l'action attendue (rescan du QR).
|
|
/// </summary>
|
|
[Fact]
|
|
public void EstInscriptionIncomplete_ExceptionDediee_Vrai()
|
|
{
|
|
var ex = new MobileEnrollmentRequiredException();
|
|
|
|
Assert.True(ReseauMessages.EstInscriptionIncomplete(ex));
|
|
Assert.False(ReseauMessages.EstErreurReseau(ex));
|
|
// L'état reste une InvalidOperationException : les traitements existants qui
|
|
// le considèrent comme non terminal (session jamais purgée) continuent de
|
|
// fonctionner.
|
|
Assert.IsAssignableFrom<InvalidOperationException>(ex);
|
|
}
|
|
|
|
[Fact]
|
|
public void EstInscriptionIncomplete_InvalidOperationExceptionGenerique_Faux()
|
|
=> Assert.False(ReseauMessages.EstInscriptionIncomplete(new InvalidOperationException("panne métier")));
|
|
|
|
/// <summary>Le classement utilisé AVANT journalisation couvre les deux états dégradés.</summary>
|
|
[Fact]
|
|
public void EstIndisponibiliteServeur_CouvreReseauEtInscription()
|
|
{
|
|
Assert.True(ReseauMessages.EstIndisponibiliteServeur(new HttpRequestException("Connection failure")));
|
|
Assert.True(ReseauMessages.EstIndisponibiliteServeur(new MobileEnrollmentRequiredException()));
|
|
Assert.False(ReseauMessages.EstIndisponibiliteServeur(new InvalidOperationException("panne métier")));
|
|
}
|
|
|
|
[Fact]
|
|
public void Traduire_EchecReseau_MessageStable()
|
|
=> Assert.Equal(
|
|
"Hors ligne — impossible de contacter le serveur.",
|
|
ReseauMessages.Traduire(new HttpRequestException("Connection failure")));
|
|
|
|
/// <summary>
|
|
/// Le message technique « Aucune URL d'API Omika configurée… » n'indiquait pas le
|
|
/// geste attendu : l'utilisateur reçoit désormais l'action à faire.
|
|
/// </summary>
|
|
[Fact]
|
|
public void Traduire_InscriptionIncomplete_IndiqueLAction()
|
|
=> Assert.Equal(
|
|
"Inscription incomplète — rescannez le QR code pour reconnecter l'application.",
|
|
ReseauMessages.Traduire(new MobileEnrollmentRequiredException()));
|
|
|
|
[Fact]
|
|
public void Traduire_ErreurMetier_ConserveLeMessage()
|
|
=> Assert.Equal("panne métier", ReseauMessages.Traduire(new InvalidOperationException("panne métier")));
|
|
}
|