using Nonemm.Contests.Rules; using Nonemm.Contests.Udc; using Nonemm.Core; using Nonemm.Storage; namespace Nonemm.Session.Tests; public class ContestDefinitionsTests { private static readonly StationInfo Germany = new() { Callsign = "DL1ABC", CqZone = 14, ItuZone = 28, Continent = "EU", CountryPrefix = "DL", }; [Fact] public void NamesAndModeComeFromTheContest() { ContestDefinition definition = ContestDefinitions.For(new CqWorldWide(ModeCategory.Cw), Germany); Assert.Equal("CQWWCW", definition.Name); Assert.Equal("CQ-WW-CW", definition.CabrilloName); Assert.Equal("CW", definition.Mode); } [Fact] public void MultiplierNamesAreN1mmsOwnAndFillUpToThree() { ContestDefinition definition = ContestDefinitions.For(new CqWorldWide(ModeCategory.Cw), Germany); Assert.Equal("ZN", definition.Multiplier1Name); Assert.Equal("CountryPrefix", definition.Multiplier2Name); Assert.Equal("N/A", definition.Multiplier3Name); } [Fact] public void AContestWithThreeMultipliersFillsAllThree() { ContestDefinition definition = ContestDefinitions.For(new BartgSprint(), Germany); Assert.Equal(("CountryPrefix", "Sect", "Continent"), (definition.Multiplier1Name, definition.Multiplier2Name, definition.Multiplier3Name)); } [Theory] [InlineData(typeof(Sweepstakes), 1)] [InlineData(typeof(CqWorldWide), 2)] [InlineData(typeof(IaruHf), 3)] public void DupeScopeBecomesN1mmsDupeType(Type contest, int expected) { object made = contest == typeof(IaruHf) ? new IaruHf() : Activator.CreateInstance(contest, ModeCategory.Cw)!; Assert.Equal(expected, ContestDefinitions.For((Contests.Contest)made, Germany).DupeType); } [Fact] public void ContestWithSeveralModesIsBothAsN1mmWritesIt() => Assert.Equal("Both", ContestDefinitions.For(new IaruHf(), Germany).Mode); [Fact] public void ABuiltInContestTakesTheRowN1mmWrote() { ContestDefinition definition = ContestDefinitions.For(new Wae(ModeCategory.Cw), Germany); Assert.Equal("DARC-WAEDC-CW", definition.CabrilloName); Assert.Equal("Worked All Europe - WAE CW", definition.DisplayName); Assert.Equal((3, 1, 1), (definition.DupeType, definition.Period, definition.PointsPerContact)); } [Fact] public void AUserDefinedContestIsWorkedOutFromItsFile() { UserDefinedContest contest = new(UdcFile.Parse(""" [Contest] Name=SAMPLETEST DisplayName=Sample Test CabrilloName=SAMPLE-TEST Mode=CW DupeType=2 Multiplier1Name=Countries MultSqlString=CountryPrefix IsMultPer=1 PointsPerContact=1 EntryWindowInfo=RCVText, 500, Exchange1Text, 500 FrameText=RcvRST Exch DefaultContestExchange=599 """)); ContestDefinition definition = ContestDefinitions.For(contest, Germany); Assert.Equal(("Sample Test", "SAMPLE-TEST", "Countries"), (definition.DisplayName, definition.CabrilloName, definition.Multiplier1Name)); } }