using Microsoft.AspNetCore.Mvc;
using Omika.Diagnostics.Models;
using Omika.Diagnostics.Tests.Fakes;
using Omika.Diagnostics.Web.Pages;
namespace Omika.Diagnostics.Tests;
///
/// T24-A — handlers serveur du prompt IA (OnGetPromptAsync) : vérifie que le clic renvoie
/// bien le texte du prompt (text/plain), et 404 pour un id inconnu. Ne teste pas la
/// génération (déjà couverte par DiagnosticPromptBuilderTests) mais le contrat HTTP.
///
public class DiagnosticPromptHandlerTests
{
private static DiagnosticEventRecord Ev(long id, string eventCode = "ERR") => new()
{
Id = id,
EventId = Guid.NewGuid(),
EventCode = eventCode,
TimestampUtc = new DateTimeOffset(2025, 1, 1, 12, 0, 0, TimeSpan.Zero),
Level = "Error",
Priority = "P2",
ExceptionType = "System.InvalidOperationException",
Source = DiagnosticSources.Api,
IngestedAtUtc = DateTimeOffset.UtcNow
};
[Fact]
public async Task DiagnosticsDetail_Prompt_ReturnsTextPrompt()
{
var repo = new FakeDiagnosticEventRepository();
await repo.InsertBatchAsync(new[] { Ev(42) });
var model = new DiagnosticsDetailModel(repo);
IActionResult result = await model.OnGetPromptAsync(42);
ContentResult content = Assert.IsType(result);
Assert.StartsWith("Analyse cette erreur Omika", content.Content, StringComparison.Ordinal);
Assert.Contains("ERR", content.Content, StringComparison.Ordinal);
Assert.Equal("text/plain; charset=utf-8", content.ContentType);
}
[Fact]
public async Task DiagnosticsDetail_Prompt_UnknownId_ReturnsNotFound()
{
var repo = new FakeDiagnosticEventRepository();
var model = new DiagnosticsDetailModel(repo);
IActionResult result = await model.OnGetPromptAsync(999);
Assert.IsType(result);
}
}