Premiere commit - Omika
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
using Omika.Core.Observability;
|
||||
using Omika.Diagnostics.Models;
|
||||
using Omika.Diagnostics.Queries;
|
||||
using Omika.Diagnostics.Tests.Fakes;
|
||||
using Omika.Diagnostics.Web.Pages;
|
||||
|
||||
namespace Omika.Diagnostics.Tests;
|
||||
|
||||
/// <summary>
|
||||
/// T18 — PageModel /Telemetry : section « Utilisation de l'application » (écrans +
|
||||
/// fonctionnalités) et filtres d'usage. Testé sans HttpContext.
|
||||
/// </summary>
|
||||
public class DiagnosticTelemetryUsageModelTests
|
||||
{
|
||||
private static readonly string ScreenView = TelemetryEventCodes.MobileScreenView.Value!;
|
||||
private static readonly string FeatureUse = TelemetryEventCodes.MobileFeatureUse.Value!;
|
||||
|
||||
[Fact]
|
||||
public async Task TelemetryModel_LoadsScreenAndFeatureUsage()
|
||||
{
|
||||
var repo = new FakeDiagnosticEventRepository();
|
||||
DateTimeOffset now = DateTimeOffset.UtcNow;
|
||||
|
||||
await repo.InsertBatchAsync(
|
||||
[
|
||||
Screen("AGENDA", "D-A", Guid.NewGuid(), now.AddMinutes(-10)),
|
||||
Screen("AGENDA", "D-B", Guid.NewGuid(), now.AddMinutes(-9)),
|
||||
Screen("SITE_DETAIL", "D-A", Guid.NewGuid(), now.AddMinutes(-8)),
|
||||
Feature("EMAIL_SEND", "D-A", now.AddMinutes(-7)),
|
||||
Feature("EMAIL_SEND", "D-B", now.AddMinutes(-6)),
|
||||
Feature("REPORT_GENERATE", "D-A", now.AddMinutes(-5))
|
||||
]);
|
||||
|
||||
var model = new TelemetryModel(repo) { Period = "30d" };
|
||||
await model.OnGetAsync();
|
||||
|
||||
Assert.True(model.PostgreSqlAvailable);
|
||||
Assert.True(model.HasUsageData);
|
||||
|
||||
ScreenUsageRecord agenda = model.ScreenUsage.Single(s => s.ScreenCode == "AGENDA");
|
||||
Assert.Equal(2, agenda.Views);
|
||||
Assert.Equal(2, agenda.DistinctDevices);
|
||||
|
||||
FeatureUsageRecord email = model.FeatureUsage.Single(f => f.FeatureCode == "EMAIL_SEND");
|
||||
Assert.Equal(2, email.Uses);
|
||||
Assert.Equal(2, email.DistinctDevices);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task TelemetryModel_UsageFiltersByScreenAndPlatform()
|
||||
{
|
||||
var repo = new FakeDiagnosticEventRepository();
|
||||
DateTimeOffset now = DateTimeOffset.UtcNow;
|
||||
|
||||
await repo.InsertBatchAsync(
|
||||
[
|
||||
Screen("AGENDA", "D-A", Guid.NewGuid(), now.AddMinutes(-10), platform: "Android"),
|
||||
Screen("SITE_DETAIL", "D-A", Guid.NewGuid(), now.AddMinutes(-9), platform: "Android"),
|
||||
Screen("SITE_DETAIL", "D-B", Guid.NewGuid(), now.AddMinutes(-8), platform: "iOS")
|
||||
]);
|
||||
|
||||
var model = new TelemetryModel(repo) { Period = "30d", ScreenCode = "SITE_DETAIL" };
|
||||
await model.OnGetAsync();
|
||||
|
||||
ScreenUsageRecord item = Assert.Single(model.ScreenUsage);
|
||||
Assert.Equal("SITE_DETAIL", item.ScreenCode);
|
||||
Assert.Equal(2, item.Views);
|
||||
}
|
||||
|
||||
private static DiagnosticEventRecord Screen(
|
||||
string screenCode,
|
||||
string deviceKey,
|
||||
Guid sessionId,
|
||||
DateTimeOffset ts,
|
||||
string? platform = null) =>
|
||||
new()
|
||||
{
|
||||
EventId = Guid.NewGuid(),
|
||||
EventCode = ScreenView,
|
||||
TimestampUtc = ts,
|
||||
ScreenCode = screenCode,
|
||||
DeviceKey = deviceKey,
|
||||
SessionId = sessionId,
|
||||
Platform = platform,
|
||||
Source = "mobile",
|
||||
IngestedAtUtc = DateTimeOffset.UtcNow
|
||||
};
|
||||
|
||||
private static DiagnosticEventRecord Feature(string featureCode, string deviceKey, DateTimeOffset ts) =>
|
||||
new()
|
||||
{
|
||||
EventId = Guid.NewGuid(),
|
||||
EventCode = FeatureUse,
|
||||
TimestampUtc = ts,
|
||||
FeatureCode = featureCode,
|
||||
DeviceKey = deviceKey,
|
||||
Source = "mobile",
|
||||
IngestedAtUtc = DateTimeOffset.UtcNow
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user