using Omika.Diagnostics.Queries; namespace Omika.Diagnostics.Tests; /// /// Tâche 4 — Périodes du Dashboard (§T4/5) et détection des niveaux d'erreur réels /// (§T4/6). Logique pure (Core), testable sans intégration Web : c'est exactement la /// logique déléguée par IndexModel (DashboardPeriods.Resolve). /// public class DashboardPeriodTests { [Fact] public void Resolve_Null_ReturnsDefault() { DashboardPeriod period = DashboardPeriods.Resolve(null); Assert.Equal(DashboardPeriods.DefaultKey, period.Key); Assert.Equal(TimeSpan.FromHours(24), period.Duration); } [Fact] public void Resolve_24h() { DashboardPeriod period = DashboardPeriods.Resolve("24h"); Assert.Equal("24h", period.Key); Assert.Equal(TimeSpan.FromHours(24), period.Duration); Assert.Equal(DiagnosticTimeBucket.Hour, period.Bucket); } [Fact] public void Resolve_7d() { DashboardPeriod period = DashboardPeriods.Resolve("7d"); Assert.Equal("7d", period.Key); Assert.Equal(TimeSpan.FromDays(7), period.Duration); Assert.Equal(DiagnosticTimeBucket.Day, period.Bucket); } [Fact] public void Resolve_30d() { DashboardPeriod period = DashboardPeriods.Resolve("30d"); Assert.Equal("30d", period.Key); Assert.Equal(TimeSpan.FromDays(30), period.Duration); Assert.Equal(DiagnosticTimeBucket.Day, period.Bucket); } [Fact] public void Resolve_Invalid_FallsBackToDefault() { DashboardPeriod period = DashboardPeriods.Resolve("999d"); Assert.Equal(DashboardPeriods.DefaultKey, period.Key); } [Fact] public void Resolve_IsCaseInsensitive() { Assert.Equal("24h", DashboardPeriods.Resolve("24H").Key); Assert.Equal("7d", DashboardPeriods.Resolve("7D").Key); } [Fact] public void All_ExposesExactlyThreePeriods() { Assert.Equal(3, DashboardPeriods.All.Count); Assert.Equal(new[] { "24h", "7d", "30d" }, DashboardPeriods.All.Select(p => p.Key).ToArray()); } [Fact] public void IsError_MatchesErrorAndCritical_CaseInsensitively() { Assert.True(DiagnosticErrorLevels.IsError("Error")); Assert.True(DiagnosticErrorLevels.IsError("error")); Assert.True(DiagnosticErrorLevels.IsError("Critical")); Assert.True(DiagnosticErrorLevels.IsError("CRITICAL")); Assert.False(DiagnosticErrorLevels.IsError("Info")); Assert.False(DiagnosticErrorLevels.IsError("Warning")); Assert.False(DiagnosticErrorLevels.IsError(null)); Assert.False(DiagnosticErrorLevels.IsError(" ")); } }