using System.Text.Json;
using XFEEDToolBox.Core.Navigation;
using XFEExtension.NetCore.XUnit.Attributes;
namespace XFEEDToolBox.Test;
[TestFixture]
public sealed class SavingSceneRecoveryTests
{
[Test]public void OnlyTheFreshOriginalSavingTransitionCanRequestRecovery()
{
var now=DateTimeOffset.UtcNow;
JsonElement Frame(string state="SaveGameOnEnterLocation",string next="InGame",int pid=42,string hash="build",long age=0,bool available=true)
=>JsonSerializer.SerializeToElement(new{state,nextState=next,processId=pid,gameSha256=hash,observedAtUnixMilliseconds=now.ToUnixTimeMilliseconds()-age,available});
Check.That(SavingSceneRecovery.Matches(Frame(),42,"build",now));
foreach(var other in new[]{Frame(state:"InGame"),Frame(state:"PauseMenu"),Frame(state:"MainMenu"),Frame(next:"ExitToMainMenu"),Frame(pid:43),Frame(hash:"other"),Frame(age:501),Frame(age:-1),Frame(available:false),JsonSerializer.SerializeToElement(new{state="SaveGameOnEnterLocation"})})
Check.That(!SavingSceneRecovery.Matches(other,42,"build",now));
}
[Test]public void TheRecoverySignalCannotBecomeAnOrdinaryTelemetryRetry()
{
var error=new SavingSceneRecoveryRequiredException(new FlightTelemetryUnavailableException("missing"));
Check.That(!NavigationRecovery.CanRetry(error,default));
Check.That(SavingSceneRecoveryRequiredException.Present(new InvalidOperationException("journey",error)));
Check.That(!SavingSceneRecoveryRequiredException.Present(new OperationCanceledException()));
}
}
using System.Text.Json;
using XFEEDToolBox.Core.Navigation;
using XFEExtension.NetCore.XUnit.Attributes;
namespace XFEEDToolBox.Test;
[TestFixture]
public sealed class SavingSceneRecoveryTests
{
[Test]public void OnlyTheFreshOriginalSavingTransitionCanRequestRecovery()
{
var now=DateTimeOffset.UtcNow;
JsonElement Frame(string state="SaveGameOnEnterLocation",string next="InGame",int pid=42,string hash="build",long age=0,bool available=true)
=>JsonSerializer.SerializeToElement(new{state,nextState=next,processId=pid,gameSha256=hash,observedAtUnixMilliseconds=now.ToUnixTimeMilliseconds()-age,available});
Check.That(SavingSceneRecovery.Matches(Frame(),42,"build",now));
foreach(var other in new[]{Frame(state:"InGame"),Frame(state:"PauseMenu"),Frame(state:"MainMenu"),Frame(next:"ExitToMainMenu"),Frame(pid:43),Frame(hash:"other"),Frame(age:501),Frame(age:-1),Frame(available:false),JsonSerializer.SerializeToElement(new{state="SaveGameOnEnterLocation"})})
Check.That(!SavingSceneRecovery.Matches(other,42,"build",now));
}
[Test]public void TheRecoverySignalCannotBecomeAnOrdinaryTelemetryRetry()
{
var error=new SavingSceneRecoveryRequiredException(new FlightTelemetryUnavailableException("missing"));
Check.That(!NavigationRecovery.CanRetry(error,default));
Check.That(SavingSceneRecoveryRequiredException.Present(new InvalidOperationException("journey",error)));
Check.That(!SavingSceneRecoveryRequiredException.Present(new OperationCanceledException()));
}
}