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<JsonObject>[]
{
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());}
}
}
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<JsonObject>[]
{
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());}
}
}