using XFEEDToolBox.Core.Galaxy; using XFEExtension.NetCore.XUnit.Attributes; namespace XFEEDToolBox.Test; [TestFixture] public class GalaxyOriginalTradeCategoriesTests { [Test] public void CachedOriginalLeavesUseTheOriginalThirteenParentsWithoutAddingUnobservedRoutes() { Check.Equal(13,GalaxyOriginalTradeCategories.Categories.Count);Check.Equal(123,GalaxyOriginalTradeCategories.Commodities.Count); var choices=new[]{new GalaxyFilterChoice("gold","Gold"),new GalaxyFilterChoice("imperialslaves","Imperial Slaves"),new GalaxyFilterChoice("lowtemperaturediamonds","Low Temperature Diamonds")}; var groups=GalaxyOriginalTradeCategories.Build(choices);Check.Equal(3,groups.Sum(g=>g.Children.Count)); Check.That(groups.Single(g=>g.Key=="originaltrade:0").Children.Single().Key=="gold"); // The original TradeRoute table puts ImperialSlaves in Other, whereas // the current market taxonomy has an independent slaves category. Check.That(groups.Single(g=>g.Key=="originaltrade:12").Children.Single().Key=="imperialslaves"); var unknown=groups.Single(g=>!g.OriginalCategory);Check.That(unknown.Children.Single().Key=="lowtemperaturediamonds"); Check.Equal(0,GalaxyOriginalTradeCategories.Build([]).Count); } [Test] public void SavedTraderSourceDoesNotSelectAnUnrelatedCommodityParentOrActivateHistoricalTrade() { Check.Equal(GalaxyTradeFlowSource.Npc,GalaxyOriginalTradeCategories.FromSavedTraderCategory(1));Check.Equal(GalaxyTradeFlowSource.Players,GalaxyOriginalTradeCategories.FromSavedTraderCategory(2));Check.Equal(GalaxyTradeFlowSource.All,GalaxyOriginalTradeCategories.FromSavedTraderCategory(3)); Check.That(GalaxyOriginalTradeCategories.FromSavedTraderCategory(0) is null&&GalaxyOriginalTradeCategories.FromSavedTraderCategory(13) is null); var imported=GalaxyOriginalSettings.Parse("",new(){HistoricalTradeSource=GalaxyTradeFlowSource.Players}); Check.Equal(GalaxyTradeFlowSource.All,imported.Filter.HistoricalTradeSource);Check.Equal(GalaxyTradeFlowSource.All,imported.Filter.CurrentTradeSource);Check.That(imported.Filter.ShowCurrentTradeFlows&&!imported.Filter.ShowHistoricalTradeFlows);Check.Equal("1",imported.OriginalOptions["TradeRoutes"]); var invalid=GalaxyOriginalSettings.Parse("",new(){HistoricalTradeSource=GalaxyTradeFlowSource.Players});Check.Equal(GalaxyTradeFlowSource.Players,invalid.Filter.HistoricalTradeSource);Check.That(invalid.Limitations.Any(l=>l.Contains("交易者来源编号"))); } [Test] public void SavedParentVisibilityAndLeafSelectionRemainIndependentAndAndTogether() { var imported=GalaxyOriginalSettings.Parse("",new()); Check.That(imported.Filter.CurrentTradeCategories is {} categories&&!categories.Contains(0)&&categories.Count==12); Check.That(imported.Filter.CurrentTradeCommodities is {} commodities&&commodities.Contains("gold")&&!commodities.Contains("silver")&&commodities.Contains("copper")); Check.Equal("0",imported.OriginalOptions["VisibilityFlags/categories/Metals"]); var snapshot=new GalaxyCurrentTradeFlowsSnapshot(true,1000,100,50,1,[new(42,43,1,"Gold",.5f,0,1000),new(42,43,2,"Silver",.4f,0,1000)],0); Check.Equal(0,GalaxyCurrentTradeRoutes.Select(snapshot,GalaxyTradeFlowSource.Npc,imported.Filter.CurrentTradeCommodities,imported.Filter.CurrentTradeCategories).Count); // Re-enabling the parent must recover Gold while Silver stays off. var restored=GalaxyCurrentTradeRoutes.Select(snapshot,GalaxyTradeFlowSource.Npc,imported.Filter.CurrentTradeCommodities,new HashSet{0}); Check.Equal(1,restored.Count);Check.Equal(.5f,restored[0].Amount);Check.Equal("Gold",restored[0].Contributions.Single().CommodityName); Check.That(!imported.Filter.ShowHistoricalTradeFlows); } [Test] public void AbsentOriginalTradeEntriesDefaultOnAndUnknownFlagsRemainRaw() { var imported=GalaxyOriginalSettings.Parse("",new()); Check.Equal(13,imported.Filter.CurrentTradeCategories!.Count);Check.Equal(123,imported.Filter.CurrentTradeCommodities!.Count); Check.Equal("0",imported.OriginalOptions["VisibilityFlags/categories/FutureParent"]);Check.Equal("1",imported.OriginalOptions["VisibilityFlags/commodities/FutureCommodity"]); Check.Equal(2,imported.Limitations.Count);Check.That(!imported.Filter.CurrentTradeCommodities.Contains("futurecommodity")); var empty=GalaxyOriginalSettings.Parse("",new(){CurrentTradeCategories=new HashSet(),CurrentTradeCommodities=new HashSet()}); Check.Equal(13,empty.Filter.CurrentTradeCategories!.Count);Check.Equal(123,empty.Filter.CurrentTradeCommodities!.Count); } }