XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
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)));
    }
}