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(()=>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)); } }