using XFEEDToolBox.Core.Galaxy; using XFEExtension.NetCore.XUnit.Attributes; namespace XFEEDToolBox.Test; [TestFixture] public sealed class GalaxyOriginalPowerSelectionTests { private static readonly GalaxyNativePowerOption[] Options=[new(0,1,42,"First actual definition",.1f,.2f,.3f),new(1,2,7,"Second actual definition",.4f,.5f,.6f)]; [Test] public void SavedZeroBasedIndexRestoresTheActualNameAndInternalIdRatherThanUiIdOrId() { var initial=new GalaxyMapFilter{OriginalPowerOptions=Options}; var first=GalaxyOriginalPowerSelection.FromSavedActivityPower(initial,0); Check.Equal(42,first.ActivityInternalPowerId);Check.Equal("First actual definition",first.ActivityPowerName); var second=GalaxyOriginalPowerSelection.FromSavedActivityPower(initial,1); Check.Equal(7,second.ActivityInternalPowerId);Check.Equal("Second actual definition",second.ActivityPowerName); Check.That(first.OriginalActivityPowerIndex is null&&second.OriginalActivityPowerIndex is null&&second.TerritoryActivityFilterEnabled); Check.That(GalaxyOriginalPowerSelection.FromSavedActivityPower(initial,7).ActivityPowerName is null); Check.That(GalaxyOriginalPowerSelection.FromSavedActivityPower(initial,2).ActivityPowerName is null); } [Test] public void MissingDefinitionsKeepPendingIndexAndLaterCurrentOptionsResolveIt() { var pending=GalaxyOriginalPowerSelection.FromSavedActivityPower(new(){ActivityPowerName="Old selection",ActivityInternalPowerId=7},0); Check.Equal(0,pending.OriginalActivityPowerIndex);Check.That(pending.ActivityPowerName is null&&pending.ActivityInternalPowerId is null&&!pending.ActivityNativeQueryReady); Check.That(ReferenceEquals(pending,GalaxyOriginalPowerSelection.WithOptions(pending,[]))); var resolved=GalaxyOriginalPowerSelection.WithOptions(pending,Options); Check.Equal(42,resolved.ActivityInternalPowerId);Check.Equal("First actual definition",resolved.ActivityPowerName); Check.That(resolved.OriginalActivityPowerIndex is null&&resolved.ActivityNativeQueryReady); Check.That(ReferenceEquals(resolved,GalaxyOriginalPowerSelection.WithOptions(resolved,Options))); } [Test] public void DuplicateOrUnavailableIndexCannotFallBackToAnInternalIdOrOldSelection() { var pending=GalaxyOriginalPowerSelection.FromSavedActivityPower(new(),0); var duplicated=GalaxyOriginalPowerSelection.WithOptions(pending,[Options[0],Options[1] with{Index=0}]); Check.That(duplicated.OriginalActivityPowerIndex==0&&duplicated.ActivityPowerName is null&&duplicated.ActivityInternalPowerId is null); var outOfRange=GalaxyOriginalPowerSelection.FromSavedActivityPower(new(){OriginalPowerOptions=Options},42); Check.Equal(42,outOfRange.OriginalActivityPowerIndex);Check.That(outOfRange.ActivityPowerName is null&&!outOfRange.ActivityNativeQueryReady); } [Test] public void ExplicitChoiceAndAllOrDisabledScopesDoNotReapplyThePendingIndex() { var pending=GalaxyOriginalPowerSelection.FromSavedActivityPower(new(),0); var explicitChoice=pending with{OriginalActivityPowerIndex=null,ActivityPowerName=Options[1].Name,ActivityInternalPowerId=7}; var chosen=GalaxyOriginalPowerSelection.WithOptions(explicitChoice,Options); Check.Equal(7,chosen.ActivityInternalPowerId);Check.Equal(Options[1].Name,chosen.ActivityPowerName); var all=GalaxyOriginalPowerSelection.FromSavedActivityPower(pending,-2); Check.That(all.ActivityAllPowers&&all.TerritoryActivityFilterEnabled&&all.OriginalActivityPowerIndex is null&&all.ActivityNativeQueryReady); var disabled=GalaxyOriginalPowerSelection.FromSavedActivityPower(pending,-1); Check.That(!disabled.TerritoryActivityFilterEnabled&&!disabled.ActivityAllPowers&&disabled.OriginalActivityPowerIndex is null&&!disabled.ActivityNativeQueryReady); Check.That(ReferenceEquals(pending,GalaxyOriginalPowerSelection.FromSavedActivityPower(pending,-3))); } }