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