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<InvalidDataException>(()=>GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body+",\"defaulted\":1}")));
Check.Throws<InvalidDataException>(()=>GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body.Replace("\"governmentId\":1","\"governmentId\":4")+",\"defaulted\":true}")));
Check.Throws<InvalidDataException>(()=>GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body+",\"defaulted\":true,\"allegianceKey\":\"Empire\"}")));
Check.Throws<InvalidDataException>(()=>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<InvalidDataException>(()=>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<InvalidDataException>(()=>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);
}
}
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<InvalidDataException>(()=>GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body+",\"defaulted\":1}")));
Check.Throws<InvalidDataException>(()=>GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body.Replace("\"governmentId\":1","\"governmentId\":4")+",\"defaulted\":true}")));
Check.Throws<InvalidDataException>(()=>GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body+",\"defaulted\":true,\"allegianceKey\":\"Empire\"}")));
Check.Throws<InvalidDataException>(()=>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<InvalidDataException>(()=>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<InvalidDataException>(()=>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);
}
}