using System;
using System.Collections.Generic;
using AutopilotMonitor.Functions.Services;
using AutopilotMonitor.Shared;
using AutopilotMonitor.Shared.Models;
using Xunit;
namespace AutopilotMonitor.Functions.Tests;
///
/// D-316: the agent corrects an already reported platform run from IME's saved result with a
/// script_output_reconciliation. It is observation of an earlier run: it never heals a Stalled session and never
/// counts as another script run.
///
public class ScriptOutputReconciliationClassificationTests
{
private static readonly DateTime At = new(2026, 10, 3, 20, 59, 8, DateTimeKind.Utc);
[Fact]
public void A_correction_alone_is_no_real_activity_and_no_script_run()
{
var classification = EventIngestProcessor.ClassifyEvents(new List
{
Event(Constants.EventTypes.ScriptOutputReconciliation, new Dictionary { ["scriptType"] = "platform", ["runId"] = "run-1", ["outcome"] = "foreign" }),
});
Assert.False(classification.HasNonPeriodicRealEvent);
Assert.Equal(0, classification.PlatformScriptCount);
}
[Fact]
public void The_corrected_run_counts_once_as_a_platform_script()
{
var classification = EventIngestProcessor.ClassifyEvents(new List
{
Event("script_failed", new Dictionary { ["scriptType"] = "platform", ["runId"] = "run-1", ["exitCode"] = "1" }),
Event(Constants.EventTypes.ScriptOutputReconciliation, new Dictionary { ["scriptType"] = "platform", ["runId"] = "run-1", ["outcome"] = "foreign" }),
});
Assert.True(classification.HasNonPeriodicRealEvent);
Assert.Equal(1, classification.PlatformScriptCount);
}
private static EnrollmentEvent Event(string eventType, Dictionary data) => new()
{
EventId = Guid.NewGuid().ToString(),
Timestamp = At,
EventType = eventType,
Source = "RegistryScriptResult",
Data = data,
};
}