using System.Text.Json; using System.Text.Json.Nodes; using XFEEDToolBox.Core.Navigation; using XFEExtension.NetCore.XUnit.Attributes; namespace XFEEDToolBox.Test; [TestFixture] public sealed class CruiseControllerReplacementTests { private static readonly DateTimeOffset Now=DateTimeOffset.UtcNow; private static JsonObject Ready()=>JsonSerializer.SerializeToNode(new{service=CruiseControlProtocol.LegacyService,gameSha256="build",processId=42,enabled=true,owned=false, leaseExpiresAtUnixMilliseconds=Now.AddSeconds(-1).ToUnixTimeMilliseconds(),sampleReady=true, sample=new{verified=true,active=false,state=0,observedAtUnixMilliseconds=Now.ToUnixTimeMilliseconds(),healthEmergency=false,hullFraction=.78}})!.AsObject(); private static bool Accept(JsonObject row)=>CruiseControllerReplacement.CanRetire(JsonSerializer.SerializeToElement(row),42,"build",Now); [Test]public void AStoppedIdleVerifiedControllerCanBeReplacedWithoutRequiringAnUndamagedHull() {Check.That(Accept(Ready()));var row=Ready();row["sample"]!["state"]=3;Check.That(Accept(row));} [Test]public void AForeignActivePendingStaleOrUnsafeControllerCannotBeRetired() { foreach(var mutate in new Action[] { row=>row["service"]="other",row=>row["gameSha256"]="other",row=>row["processId"]=43,row=>row["owned"]=true, row=>row["leaseExpiresAtUnixMilliseconds"]=Now.AddSeconds(1).ToUnixTimeMilliseconds(),row=>row["sampleReady"]=false, row=>row["sample"]!["active"]=true,row=>row["sample"]!["state"]=1,row=>row["sample"]!["state"]=2, row=>row["sample"]!["verified"]=false,row=>row["sample"]!["healthEmergency"]=true,row=>row["sample"]!["hullFraction"]=0, row=>row["sample"]!["observedAtUnixMilliseconds"]=Now.AddSeconds(-1).ToUnixTimeMilliseconds(),row=>row["sample"]=null }){var row=Ready();mutate(row);Check.That(!Accept(row),row.ToJsonString());} } }