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())); } }