using System.Text.Json; using XFEEDToolBox.Core.Navigation; using XFEExtension.NetCore.XUnit.Attributes; namespace XFEEDToolBox.Test; [TestFixture] public sealed class LocalFlightTelemetryStatusTests { private static SystemNavigationTarget Expected=>new(1,10,"Exact station",SystemTargetKind.Station,20){NativeKey=3,NativeKind=5,NativeIdentity=new('a',64)}; private static JsonElement Frame(bool selected=true,bool ready=false,string stage="bodyGeometry",long generation=7,int key=3,ulong body=10,string name="Exact station") =>JsonSerializer.SerializeToElement(new{generation,selected,telemetryReady=ready,sampleStage=stage,target=new{key,bodyAddress=body.ToString(),kind=5,marketId=20,name}}); [Test]public void MissingGeometryKeepsTheMatchingIdentityAndExplainsTheReadOnlyWait() { var value=LocalFlightTelemetryStatus.Parse(Frame(),7,Expected); Check.That(value.Selected&&!value.TelemetryReady&&!value.TargetChanged);Check.Equal("bodyGeometry",value.SampleStage); } [Test]public void AnotherCompleteSelectedIdentityIsDistinguishedFromAnUnavailableCatalogueEntry() { var changed=LocalFlightTelemetryStatus.Parse(Frame(selected:false,key:4,body:11,name:"Another target"),7,Expected); Check.That(changed.TargetChanged&&!changed.Selected);Check.Equal("Another target",changed.ActualTarget); var unknown=LocalFlightTelemetryStatus.Parse(Frame(selected:false,key:-1,body:0,name:"",stage:"selectedIdentity"),7,Expected); Check.That(!unknown.TargetChanged&&!unknown.Selected); } [Test]public void ForeignGenerationAndContradictoryIdentityCannotBeTreatedAsOrdinarySamplingWait() { foreach(var value in new[]{Frame(generation:8),Frame(key:4,body:11,name:"Another target"),Frame(selected:false,ready:true)}) Check.Throws(()=>LocalFlightTelemetryStatus.Parse(value,7,Expected)); } }