using System.Text.Json; using XFEEDToolBox.Core.Galaxy; using XFEExtension.NetCore.XUnit.Attributes; namespace XFEEDToolBox.Test; [TestFixture] public sealed class GalaxyNativeBasicSystemFactsTests { [Test] public void ReadyMissingRowProvenanceIsDistinctAndContradictoryDefaultsAreRejected() { const string body="\"population\":\"0\",\"governmentId\":1,\"primaryEconomyId\":1,\"secondaryEconomyId\":1,\"factionStateId\":0,\"allegianceId\":\"18446744073709551615\",\"securityValue\":0"; var observed=GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body+"}"))!; Check.That(!observed.Defaulted&&observed.AllegianceKey is null); var fallback=GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body+",\"defaulted\":true}"))!; Check.That(fallback.Defaulted);Check.Equal("None",fallback.Government);Check.Equal("None",fallback.PrimaryEconomy); Check.Equal("None",fallback.AllegianceKey);Check.Equal("Anarchy",fallback.SecurityKey); Check.Throws(()=>GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body+",\"defaulted\":1}"))); Check.Throws(()=>GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body.Replace("\"governmentId\":1","\"governmentId\":4")+",\"defaulted\":true}"))); Check.Throws(()=>GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body+",\"defaulted\":true,\"allegianceKey\":\"Empire\"}"))); Check.Throws(()=>GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body+",\"defaulted\":true,\"allegianceKey\":\"UnverifiedFuture\"}"))); } [Test] public void OptionalAllegianceKeyUsesOnlyActualDefinitionNamesAndKeepsLegacyUnknown() { const string body="\"population\":\"0\",\"governmentId\":1,\"primaryEconomyId\":1,\"secondaryEconomyId\":1,\"factionStateId\":0,\"allegianceId\":\"9007199254740995\",\"securityValue\":0"; var legacy=GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body+"}"))!;Check.That(legacy.AllegianceKey is null); var actual=GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body+",\"allegianceKey\":\"Federation\"}"))!; Check.Equal("Federation",actual.AllegianceKey);Check.Equal(9007199254740995UL,actual.AllegianceId); var future=GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body+",\"allegianceKey\":\"UnverifiedFutureKey\"}"))!; Check.That(future.AllegianceKey is null);Check.Equal(9007199254740995UL,future.AllegianceId); Check.Throws(()=>GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body+",\"allegianceKey\":1}"))); } [Test] public void ActualEnumsRetainBothEconomiesAndDoNotGuessAllegianceFromItsIdentifier() { var fact=new GalaxyNativeBasicSystemFacts(123456789,4,4,6,17,9007199254740995,79); Check.Equal("Democracy",fact.Government);Check.Equal("Industrial",fact.PrimaryEconomy);Check.Equal("HighTech",fact.SecondaryEconomy); Check.Equal("CivilLiberty",fact.BaseFactionState);Check.Equal(123456789L,fact.PopulationForFilter);Check.Equal(3,fact.SecurityClass); Check.Equal(9007199254740995UL,fact.AllegianceId); Check.Equal("Agriculture",(fact with{PrimaryEconomyId=3}).PrimaryEconomy); } [Test] public void ExactU64AndUnknownFutureEnumsCannotTurnIntoNoDataOrOverflow() { using var json=JsonDocument.Parse("{\"population\":\"18446744073709551615\",\"governmentId\":4294967295,\"primaryEconomyId\":29,\"secondaryEconomyId\":28,\"factionStateId\":40,\"allegianceId\":\"9007199254740995\",\"securityValue\":255}"); var fact=GalaxyNativeBasicSystemFacts.FromWire(json.RootElement)!; Check.Equal(ulong.MaxValue,fact.Population);Check.That(fact.PopulationForFilter is null&&fact.Government is null&&fact.PrimaryEconomy is null&&fact.BaseFactionState is null&&fact.SecurityClass is null); Check.Equal("Carrier",fact.SecondaryEconomy);Check.Equal(9007199254740995UL,fact.AllegianceId); Check.That(GalaxyNativeBasicSystemFacts.FromWire(Check.Json("null")) is null); Check.Throws(()=>GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{\"population\":1}"))); } [Test] public void OriginalSecurityThresholdsAndZeroPopulationRemainExact() { var fact=new GalaxyNativeBasicSystemFacts(0,4,1,1,14,ulong.MaxValue,39); Check.Equal(0L,fact.PopulationForFilter);Check.That(fact.BaseFactionState is null);Check.Equal(2,fact.SecurityClass); Check.Equal(3,(fact with{SecurityValue=40}).SecurityClass);Check.Equal(3,(fact with{SecurityValue=79}).SecurityClass); Check.Equal(4,(fact with{SecurityValue=80}).SecurityClass);Check.Equal(0,(fact with{GovernmentId=1,SecurityValue=255}).SecurityClass); Check.Equal(0,(fact with{GovernmentId=2,SecurityValue=255}).SecurityClass); } [Test] public void OriginalSecurityConstructorKeysFollowNumericClassRatherThanPaletteOrder() { var fact=new GalaxyNativeBasicSystemFacts(0,4,1,1,0,0,0); Check.Equal("LowSecurity",fact.SecurityKey); Check.Equal("LowSecurity",(fact with{SecurityValue=39}).SecurityKey); Check.Equal("MediumSecurity",(fact with{SecurityValue=40}).SecurityKey); Check.Equal("MediumSecurity",(fact with{SecurityValue=79}).SecurityKey); Check.Equal("HighSecurity",(fact with{SecurityValue=80}).SecurityKey); Check.Equal("HighSecurity",(fact with{SecurityValue=255}).SecurityKey); Check.Equal("Anarchy",(fact with{GovernmentId=1,SecurityValue=255}).SecurityKey); Check.Equal("Anarchy",(fact with{GovernmentId=2,SecurityValue=255}).SecurityKey); Check.That((fact with{GovernmentId=19}).SecurityKey is null); } }