using Nonemm.Contests.Udc; using Nonemm.Core; namespace Nonemm.Contests.Tests; public class UserDefinedContestTests { private const string Sample = """ [Author] AuthorName=Someone [Contest] Name=SAMPLETEST DisplayName=Sample Test CabrilloName=SAMPLE-TEST Mode=CW DupeType=2 Multiplier1Name=Countries MultSqlString=CountryPrefix IsMultPer=1 PointsPerContact=MyCountry, 1, SameContinent, 2, OtherContinent, 5 EntryWindowInfo=RCVText, 500, Exchange1Text, 500 FrameText=RcvRST Exch DefaultContestExchange=599 """; private static UserDefinedContest Contest() => new(UdcFile.Parse(Sample)); private static ContestLog LogFor(StationInfo me) => new(Contest(), me, TestLog.CountryFile); [Fact] public void NameAndCabrilloNameComeFromTheFile() { UserDefinedContest contest = Contest(); Assert.Equal("SAMPLETEST", contest.Name); Assert.Equal("Sample Test", contest.DisplayName); Assert.Equal("SAMPLE-TEST", contest.CabrilloName); } [Fact] public void ExchangeBoxesComeFromTheEntryWindowSetting() { IReadOnlyList fields = Contest().ExchangeFieldsFor(TestLog.Germany); Assert.Equal(2, fields.Count); Assert.Equal("RcvRST", fields[0].Label); Assert.Equal(ExchangeSlot.Exchange1, fields[1].Slot); } [Theory] [InlineData("DL9XYZ", 1)] [InlineData("IK2XYZ", 2)] [InlineData("JA1XYZ", 5)] public void PointsFollowTheConditionList(string call, int expected) => Assert.Equal(expected, LogFor(TestLog.Germany).Judge(TestLog.Contact(call)).Points); [Fact] public void CountriesCountOncePerBand() { ContestLog log = LogFor(TestLog.Germany); log.Add(TestLog.Contact("JA1XYZ")); Assert.Empty(log.Judge(TestLog.Contact("JA2XYZ")).NewMultipliers); Assert.Single(log.Judge(TestLog.Contact("JA2XYZ", 7_025)).NewMultipliers); } [Fact] public void FileWithNoContestNameIsRejected() => Assert.Throws(() => UdcFile.Parse("[Author]\r\nAuthorName=Someone\r\n")); [Fact] public void DupeTypeFourNeverFlagsADupe() { UserDefinedContest contest = new(UdcFile.Parse(Sample.Replace("DupeType=2", "DupeType=4"))); ContestLog log = new(contest, TestLog.Germany, TestLog.CountryFile); log.Add(TestLog.Contact("JA1XYZ")); Assert.False(log.Judge(TestLog.Contact("JA1XYZ")).IsDupe); } }