using XFEEDToolBox.Core.Galaxy; using XFEExtension.NetCore.XUnit.Attributes; namespace XFEEDToolBox.Test; [TestFixture] public sealed class GalaxyOriginalCommodityTests { [Test] public void SavedUidResolvesOnlyThroughActualDefinitionsAndKeepsItsActualParentIndependentOfMarketIds() { var actual=new GalaxyNativeCommodityOption(671333304,"gold","Chemicals",1,true); var f=GalaxyOriginalSettings.Parse("",new(){OriginalCommodityOptions=[actual]}).Filter; Check.That(f.Values!.SetEquals(["gold"]));Check.Equal(GalaxyCommodityDirection.Imports,f.CommodityDirection);Check.Equal(671333304u,f.OriginalCommodityUid); var observed=GalaxyCommodityTree.Definitions.Single(d=>d.Symbol=="gold");Check.That(observed.Id!=actual.Uid);Check.That(GalaxyOriginalCommodities.Resolve([actual],(uint)observed.Id) is null); var tree=GalaxyCommodityTree.Build([],originalOptions:[actual]);Check.Equal(1,tree.Count);Check.Equal("Chemicals",tree[0].Key);Check.That(tree[0].Children.Single().Key=="gold"); Check.That(ReferenceEquals(f,GalaxyOriginalCommodities.WithOptions(f,[actual]))); } [Test] public void MissingDefinitionRetainsRawUidForLaterResolutionAndVerifiedBothModesAreRestored() { var current=new GalaxyMapFilter{Category=GalaxyFilterCategory.Commodity,Values=new HashSet{"previous"},CommodityDirection=GalaxyCommodityDirection.Exports}; var imported=GalaxyOriginalSettings.Parse("",current); Check.Equal(0xF0000001u,imported.Filter.OriginalCommodityUid);Check.Equal(GalaxyCommodityDirection.Both,imported.Filter.CommodityDirection);Check.That(imported.Filter.Values!.Contains("previous"));Check.That(imported.Limitations.Any(l=>l.Contains("UID"))&&!imported.Limitations.Any(l=>l.Contains("尚未完整恢复"))); var actual=new GalaxyNativeCommodityOption(0xF0000001,"Actual item","Actual category",2,null); var ready=GalaxyOriginalCommodities.WithOptions(imported.Filter,[actual]);Check.That(ready.Values!.SetEquals(["actualitem"]));Check.That(ready.OriginalCommodityOptions[0].PublisherEligible is null); var unavailable=GalaxyOriginalCommodities.WithOptions(ready,[actual with{PublisherEligible=false}]);Check.That(unavailable.Values!.Count==0&&unavailable.OriginalCommodityUid==actual.Uid); Check.Equal(0,GalaxyCommodityTree.Build([],originalOptions:[actual with{PublisherEligible=false}]).Count); var extra=GalaxyCommodityTree.Build([new("actualitem","Actual item")],originalOptions:[actual with{PublisherEligible=false}]);Check.Equal("__notpublished",extra.Single().Key);Check.That(!extra.Single().OriginalCategory); var edited=ready with{OriginalCommodityUid=null,Values=new HashSet{"chosen"}};Check.That(GalaxyOriginalCommodities.WithOptions(edited,[actual]).Values!.Contains("chosen")); Check.That(GalaxyOriginalCommodities.TrySavedUid("0",out var zero)&&zero==0);Check.That(GalaxyOriginalCommodities.TrySavedUid("4294967294",out var high)&&high==uint.MaxValue-1);Check.That(!GalaxyOriginalCommodities.TrySavedUid("-1",out _)); Check.Equal(GalaxyCommodityDirection.Exports,GalaxyOriginalCommodities.SingleDirectionFromSavedPriceMode(2));Check.That(GalaxyOriginalCommodities.SingleDirectionFromSavedPriceMode(3) is null); } }