using System.Text.Json; using XFEEDToolBox.Core.Galaxy; using XFEEDToolBox.Core.Models; using XFEExtension.NetCore.XUnit.Attributes; namespace XFEEDToolBox.Test; [TestFixture] public sealed class GalaxyNativeAccountMarkerTests { private static GalaxyMapFilter Filter(string key)=>new(){Mode=GalaxyMapMode.Map,Category=GalaxyFilterCategory.Markers,Values=new HashSet{key},IncludeUnknown=false}; private static GalacticSystem Star(GalaxySystemData data)=>new("Actual location",new(0,0,0),9007199254740993){Data=data}; [Test] public void PublishedAccountMarkersArePositiveRuntimeFactsAndNeverPersistedAsJournalHistory() { var data=new GalaxySystemData{AccountFid="F1",PersonalMarkers=["mission"],NativeAccountMarkers=new("F1",7,["ship","communitygoal"])}; Check.That(Filter("ship").Matches(Star(data))&&Filter("communitygoal").Matches(Star(data))&&Filter("mission").Matches(Star(data))); var json=JsonSerializer.Serialize(data,ToolboxSettings.JsonOptions);var restored=JsonSerializer.Deserialize(json,ToolboxSettings.JsonOptions)!; Check.That(restored.NativeAccountMarkers is null&&!Filter("ship").Matches(Star(restored))&&!Filter("communitygoal").Matches(Star(restored))); Check.That(Filter("mission").Matches(Star(restored))); } [Test] public void LosingProcessOrAccountClearsOnlyTheBoundPublishedMarkers() { var data=new GalaxySystemData{AccountFid="F1",Markers=["fleetcarrier"],NativeAccountMarkers=new("F1",7,["ship"])}; Check.That(Filter("ship").Matches(Star(data.ForNativeContext("F1",7,null)))); Check.That(!Filter("ship").Matches(Star(data.ForNativeContext("F1",8,null)))); Check.That(!Filter("ship").Matches(Star(data.ForAccount("F2")))); Check.That(Filter("fleetcarrier").Matches(Star(data.ForAccount("F2")))); var metadata=data.Merge(new(){Population=100});Check.That(metadata.NativeAccountMarkers==data.NativeAccountMarkers); var cleared=metadata with{NativeAccountMarkers=null};Check.That(!Filter("ship").Matches(Star(cleared))); } }