using System.Text.Json;
using XFEEDToolBox.Core.Galaxy;
using XFEExtension.NetCore.XUnit.Attributes;
namespace XFEEDToolBox.Test;
[TestFixture]
public sealed class GalaxyMissionMarkerStylesTests
{
[Test] public void PublishedFullAddressSetsKeepActiveAndCompletedMissionIconsAtTheSameSystem()
{
const long shared=9007199254740993;
var result=GalaxyMissionMarkerStyles.BySystem([
new(11,[shared,42,shared],42){MarkerType=4},
new(12,[shared,43],43){MarkerType=45},
new(13,[],99){MarkerType=45},
new(14,[100],100){MarkerType=7}]);
Check.That(result[shared].SequenceEqual([4,45]));Check.That(result[42].SequenceEqual([4])&&result[43].SequenceEqual([45]));
Check.That(!result.ContainsKey(99)&&!result.ContainsKey(100));
Check.Equal("GM_DisplayOptions_Missions",GalaxyMissionMarkerStyles.OriginalFrameFor(4));Check.Equal("GM_Marker_MissionComplete",GalaxyMissionMarkerStyles.OriginalFrameFor(45));Check.That(GalaxyMissionMarkerStyles.OriginalFrameFor(7) is null);
}
[Test] public void MissionStylesCannotSurviveDiskAccountOrProcessChangesAndExplicitRefreshReplacesThem()
{
var style=new GalaxyNativeAccountMarkerState("F1",7,["mission"]){MissionMarkerTypes=[4,45]};
var data=new GalaxySystemData{AccountFid="F1",PersonalMarkers=["mission"],NativeAccountMarkers=style};
var json=JsonSerializer.Serialize(data);Check.That(!json.Contains("MissionMarkerTypes")&&!json.Contains("NativeAccountMarkers"));
var restored=JsonSerializer.Deserialize<GalaxySystemData>(json)!;Check.That(restored.NativeAccountMarkers is null&&restored.PersonalMarkers!.Contains("mission"));
Check.That(data.ForAccount("F2").NativeAccountMarkers is null&&data.ForNativeContext("F1",8,null).NativeAccountMarkers is null);
var next=data.Merge(new(){NativeAccountMarkers=new("F1",7,["mission"]){MissionMarkerTypes=[45]}});Check.That(next.NativeAccountMarkers!.MissionMarkerTypes.SequenceEqual([45]));
Check.That(ReferenceEquals(data,data.Merge(new(){NativeAccountMarkers=style})));
}
}
using System.Text.Json;
using XFEEDToolBox.Core.Galaxy;
using XFEExtension.NetCore.XUnit.Attributes;
namespace XFEEDToolBox.Test;
[TestFixture]
public sealed class GalaxyMissionMarkerStylesTests
{
[Test] public void PublishedFullAddressSetsKeepActiveAndCompletedMissionIconsAtTheSameSystem()
{
const long shared=9007199254740993;
var result=GalaxyMissionMarkerStyles.BySystem([
new(11,[shared,42,shared],42){MarkerType=4},
new(12,[shared,43],43){MarkerType=45},
new(13,[],99){MarkerType=45},
new(14,[100],100){MarkerType=7}]);
Check.That(result[shared].SequenceEqual([4,45]));Check.That(result[42].SequenceEqual([4])&&result[43].SequenceEqual([45]));
Check.That(!result.ContainsKey(99)&&!result.ContainsKey(100));
Check.Equal("GM_DisplayOptions_Missions",GalaxyMissionMarkerStyles.OriginalFrameFor(4));Check.Equal("GM_Marker_MissionComplete",GalaxyMissionMarkerStyles.OriginalFrameFor(45));Check.That(GalaxyMissionMarkerStyles.OriginalFrameFor(7) is null);
}
[Test] public void MissionStylesCannotSurviveDiskAccountOrProcessChangesAndExplicitRefreshReplacesThem()
{
var style=new GalaxyNativeAccountMarkerState("F1",7,["mission"]){MissionMarkerTypes=[4,45]};
var data=new GalaxySystemData{AccountFid="F1",PersonalMarkers=["mission"],NativeAccountMarkers=style};
var json=JsonSerializer.Serialize(data);Check.That(!json.Contains("MissionMarkerTypes")&&!json.Contains("NativeAccountMarkers"));
var restored=JsonSerializer.Deserialize<GalaxySystemData>(json)!;Check.That(restored.NativeAccountMarkers is null&&restored.PersonalMarkers!.Contains("mission"));
Check.That(data.ForAccount("F2").NativeAccountMarkers is null&&data.ForNativeContext("F1",8,null).NativeAccountMarkers is null);
var next=data.Merge(new(){NativeAccountMarkers=new("F1",7,["mission"]){MissionMarkerTypes=[45]}});Check.That(next.NativeAccountMarkers!.MissionMarkerTypes.SequenceEqual([45]));
Check.That(ReferenceEquals(data,data.Merge(new(){NativeAccountMarkers=style})));
}
}