using System.Text.Json;
using XFEEDToolBox.Core.Galaxy;
using XFEEDToolBox.Core.Models;
using XFEExtension.NetCore.XUnit.Attributes;
namespace XFEEDToolBox.Test;
[TestFixture]
public class GalacticPlacesTests
{
[Test] public void StationQueriesUseActualServerFiltersAndOnlyInStockCommodities()
{
var module=JsonSerializer.SerializeToElement(GalacticPlaces.Request(GalacticPlaceKind.Module,"Frame Shift Drive",new(1,2,3),6,"A",true));
Check.Equal(6,module.GetProperty("filters").GetProperty("modules")[0].GetProperty("class").GetProperty("value")[0].GetInt32());
Check.That(module.GetProperty("filters").GetProperty("has_large_pad").GetProperty("value").GetBoolean());
Check.Equal(3d,module.GetProperty("reference_coords").GetProperty("z").GetDouble());
var commodity=JsonSerializer.SerializeToElement(GalacticPlaces.Request(GalacticPlaceKind.Commodity,"Tritium",new(0,0,0)));
Check.Equal(1,commodity.GetProperty("filters").GetProperty("marketplace")[0].GetProperty("supply").GetProperty("value")[0].GetInt32());
Check.Throws<ArgumentException>(()=>GalacticPlaces.Request(GalacticPlaceKind.MaterialTrader,"All",new(0,0,0)));
}
[Test] public void StationResultsValidateCoordinatesAndSortMeasuredDistance()
{
var root=Check.Json("""{"results":[{"name":"Far","system_name":"B","system_x":20,"system_y":0,"system_z":0,"distance":1},{"name":"Near","system_name":"A","system_x":3,"system_y":4,"system_z":0,"system_id64":42,"distance_to_arrival":120,"updated_at":"2026-10-20T00:00:00Z"},{"name":"Invalid","system_name":"C"}]}""");
var results=GalacticPlaces.Parse(root,GalacticPlaceKind.MaterialTrader,"Raw",new(0,0,0));
Check.Equal(2,results.Count);Check.Equal("Near",results[0].Name);Check.Equal(5d,results[0].Distance);Check.Equal(42L,results[0].SystemAddress!.Value);Check.That(results[0].Description.Contains("原材料"));
}
[Test] public void EngineerDirectoryIncludesPortraitsAndKnownRealCoordinates()
{
var engineer=EngineerDirectory.Find("Tod \"The Blaster\" McQuinn")!;
Check.Equal("Wolf 397",engineer.SystemName);Check.Equal(40d,engineer.Position.X);Check.That(engineer.Portrait.EndsWith("/todmcquinn.jpg"));
Check.That(EngineerDirectory.All.Count>=38&&EngineerDirectory.All.All(e=>e.Position.IsValid&&e.PortraitFile.Length>0));
}
[Test] public void ViewportPanUsesCameraAxesAndRejectsInvisibleStarsAtEveryOrientation()
{
var viewport=GalaxyViewport.Create(new(0,0,0),1000,800,.4,0,5,0,100);
Check.Equal(20d,viewport.Focus.Y);Check.That(viewport.Contains(new(0,20,0)));Check.That(!viewport.Contains(new(0,2000,0)));
var far=GalaxyViewport.Create(new(20000,300,-10000),1000,800,.7,.8,.01,0,0);Check.That(!far.Detail);Check.That(far.Contains(far.Focus));
var close=GalaxyViewport.Create(new(20000,300,-10000),1000,800,.7,.8,20,0,0);Check.That(close.Detail&&close.Radius<50);
}
[Test] public void StarHoldReportsContinuousProgressAndDragResetsIt()
{
var hold=new StarHoldGesture();hold.Begin(10,10,100,true);Check.Equal(.5,hold.Progress(400));hold.Move(20,10);Check.Equal(0d,hold.Progress(500));Check.That(!hold.TryConfirm(1000));
}
}
using System.Text.Json;
using XFEEDToolBox.Core.Galaxy;
using XFEEDToolBox.Core.Models;
using XFEExtension.NetCore.XUnit.Attributes;
namespace XFEEDToolBox.Test;
[TestFixture]
public class GalacticPlacesTests
{
[Test] public void StationQueriesUseActualServerFiltersAndOnlyInStockCommodities()
{
var module=JsonSerializer.SerializeToElement(GalacticPlaces.Request(GalacticPlaceKind.Module,"Frame Shift Drive",new(1,2,3),6,"A",true));
Check.Equal(6,module.GetProperty("filters").GetProperty("modules")[0].GetProperty("class").GetProperty("value")[0].GetInt32());
Check.That(module.GetProperty("filters").GetProperty("has_large_pad").GetProperty("value").GetBoolean());
Check.Equal(3d,module.GetProperty("reference_coords").GetProperty("z").GetDouble());
var commodity=JsonSerializer.SerializeToElement(GalacticPlaces.Request(GalacticPlaceKind.Commodity,"Tritium",new(0,0,0)));
Check.Equal(1,commodity.GetProperty("filters").GetProperty("marketplace")[0].GetProperty("supply").GetProperty("value")[0].GetInt32());
Check.Throws<ArgumentException>(()=>GalacticPlaces.Request(GalacticPlaceKind.MaterialTrader,"All",new(0,0,0)));
}
[Test] public void StationResultsValidateCoordinatesAndSortMeasuredDistance()
{
var root=Check.Json("""{"results":[{"name":"Far","system_name":"B","system_x":20,"system_y":0,"system_z":0,"distance":1},{"name":"Near","system_name":"A","system_x":3,"system_y":4,"system_z":0,"system_id64":42,"distance_to_arrival":120,"updated_at":"2026-10-20T00:00:00Z"},{"name":"Invalid","system_name":"C"}]}""");
var results=GalacticPlaces.Parse(root,GalacticPlaceKind.MaterialTrader,"Raw",new(0,0,0));
Check.Equal(2,results.Count);Check.Equal("Near",results[0].Name);Check.Equal(5d,results[0].Distance);Check.Equal(42L,results[0].SystemAddress!.Value);Check.That(results[0].Description.Contains("原材料"));
}
[Test] public void EngineerDirectoryIncludesPortraitsAndKnownRealCoordinates()
{
var engineer=EngineerDirectory.Find("Tod \"The Blaster\" McQuinn")!;
Check.Equal("Wolf 397",engineer.SystemName);Check.Equal(40d,engineer.Position.X);Check.That(engineer.Portrait.EndsWith("/todmcquinn.jpg"));
Check.That(EngineerDirectory.All.Count>=38&&EngineerDirectory.All.All(e=>e.Position.IsValid&&e.PortraitFile.Length>0));
}
[Test] public void ViewportPanUsesCameraAxesAndRejectsInvisibleStarsAtEveryOrientation()
{
var viewport=GalaxyViewport.Create(new(0,0,0),1000,800,.4,0,5,0,100);
Check.Equal(20d,viewport.Focus.Y);Check.That(viewport.Contains(new(0,20,0)));Check.That(!viewport.Contains(new(0,2000,0)));
var far=GalaxyViewport.Create(new(20000,300,-10000),1000,800,.7,.8,.01,0,0);Check.That(!far.Detail);Check.That(far.Contains(far.Focus));
var close=GalaxyViewport.Create(new(20000,300,-10000),1000,800,.7,.8,20,0,0);Check.That(close.Detail&&close.Radius<50);
}
[Test] public void StarHoldReportsContinuousProgressAndDragResetsIt()
{
var hold=new StarHoldGesture();hold.Begin(10,10,100,true);Check.Equal(.5,hold.Progress(400));hold.Move(20,10);Check.Equal(0d,hold.Progress(500));Check.That(!hold.TryConfirm(1000));
}
}