Premiere commit - Omika
This commit is contained in:
@@ -0,0 +1,158 @@
|
||||
using Omika.App.Local.Models;
|
||||
using Omika.App.Local.Repositories;
|
||||
using Omika.App.Services;
|
||||
|
||||
namespace Omika.Tests.Mobile.Local;
|
||||
|
||||
/// <summary>
|
||||
/// Tests du service de thème : mode clair/sombre/système, couleur principale,
|
||||
/// persistance locale et restauration au démarrage.
|
||||
/// </summary>
|
||||
public class ThemeServiceTests : LocalTestBase
|
||||
{
|
||||
private readonly UiPreferencesRepository _preferencesRepository;
|
||||
private readonly ThemeService _themeService;
|
||||
|
||||
public ThemeServiceTests()
|
||||
{
|
||||
_preferencesRepository = new UiPreferencesRepository(Database);
|
||||
_themeService = new ThemeService(_preferencesRepository);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Defaut_System_et_CouleurParDefaut()
|
||||
{
|
||||
// Act
|
||||
await _themeService.InitializeAsync();
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ThemeMode.System, _themeService.CurrentMode);
|
||||
Assert.Equal(ThemeService.DefaultPrimaryColor, _themeService.PrimaryColor);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task PassageDark_Persiste()
|
||||
{
|
||||
// Arrange
|
||||
await _themeService.InitializeAsync();
|
||||
|
||||
// Act
|
||||
await _themeService.SetThemeModeAsync(ThemeMode.Dark);
|
||||
|
||||
// Assert : le mode courant est Dark.
|
||||
Assert.Equal(ThemeMode.Dark, _themeService.CurrentMode);
|
||||
|
||||
// Assert : la préférence est persistée.
|
||||
UiPreferences saved = await _preferencesRepository.GetAsync();
|
||||
Assert.Equal("Dark", saved.ThemeMode);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Persistance_RestaurationAuDemarrage()
|
||||
{
|
||||
// Arrange : définir Dark + une couleur, puis recréer le service.
|
||||
await _themeService.InitializeAsync();
|
||||
await _themeService.SetThemeModeAsync(ThemeMode.Dark);
|
||||
await _themeService.SetPrimaryColorAsync("#2563eb");
|
||||
|
||||
var freshService = new ThemeService(_preferencesRepository);
|
||||
|
||||
// Act
|
||||
await freshService.InitializeAsync();
|
||||
|
||||
// Assert : les préférences sont restaurées.
|
||||
Assert.Equal(ThemeMode.Dark, freshService.CurrentMode);
|
||||
Assert.Equal("#2563eb", freshService.PrimaryColor);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task CouleurPrincipale_ChangeEtPersiste()
|
||||
{
|
||||
// Arrange
|
||||
await _themeService.InitializeAsync();
|
||||
|
||||
// Act
|
||||
await _themeService.SetPrimaryColorAsync("#0d9488");
|
||||
|
||||
// Assert
|
||||
Assert.Equal("#0d9488", _themeService.PrimaryColor);
|
||||
UiPreferences saved = await _preferencesRepository.GetAsync();
|
||||
Assert.Equal("#0d9488", saved.PrimaryColor);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task CouleurPrincipale_Restauree()
|
||||
{
|
||||
// Arrange
|
||||
await _themeService.InitializeAsync();
|
||||
await _themeService.SetPrimaryColorAsync("#7c3aed");
|
||||
|
||||
var freshService = new ThemeService(_preferencesRepository);
|
||||
|
||||
// Act
|
||||
await freshService.InitializeAsync();
|
||||
|
||||
// Assert
|
||||
Assert.Equal("#7c3aed", freshService.PrimaryColor);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task ConfigInvalide_FallbackSur()
|
||||
{
|
||||
// Arrange : enregistrer une valeur invalide directement dans le repository.
|
||||
await _preferencesRepository.SaveAsync(new UiPreferences
|
||||
{
|
||||
ThemeMode = "Neon",
|
||||
PrimaryColor = "pas-une-couleur"
|
||||
});
|
||||
|
||||
// Act
|
||||
await _themeService.InitializeAsync();
|
||||
|
||||
// Assert : fallback sûr vers System + couleur par défaut.
|
||||
Assert.Equal(ThemeMode.System, _themeService.CurrentMode);
|
||||
Assert.Equal(ThemeService.DefaultPrimaryColor, _themeService.PrimaryColor);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseThemeMode_ValeursConnues()
|
||||
{
|
||||
Assert.Equal(ThemeMode.Light, ThemeService.ParseThemeMode("Light"));
|
||||
Assert.Equal(ThemeMode.Dark, ThemeService.ParseThemeMode("Dark"));
|
||||
Assert.Equal(ThemeMode.System, ThemeService.ParseThemeMode("System"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseThemeMode_ValeurInconnue_FallbackSystem()
|
||||
{
|
||||
Assert.Equal(ThemeMode.System, ThemeService.ParseThemeMode("Inconnu"));
|
||||
Assert.Equal(ThemeMode.System, ThemeService.ParseThemeMode(null));
|
||||
Assert.Equal(ThemeMode.System, ThemeService.ParseThemeMode(""));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IsValidHexColor_Valide()
|
||||
{
|
||||
Assert.True(ThemeService.IsValidHexColor("#4f46e5"));
|
||||
Assert.True(ThemeService.IsValidHexColor("#4F46E5"));
|
||||
Assert.True(ThemeService.IsValidHexColor("#4f46e5ff"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IsValidHexColor_Invalide()
|
||||
{
|
||||
Assert.False(ThemeService.IsValidHexColor(null));
|
||||
Assert.False(ThemeService.IsValidHexColor(""));
|
||||
Assert.False(ThemeService.IsValidHexColor("#12345"));
|
||||
Assert.False(ThemeService.IsValidHexColor("#gggggg"));
|
||||
Assert.False(ThemeService.IsValidHexColor("rouge"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task SetPrimaryColor_Invalide_LeveException()
|
||||
{
|
||||
// Act / Assert
|
||||
await Assert.ThrowsAsync<ArgumentException>(() => _themeService.SetPrimaryColorAsync("pas-une-couleur"));
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user