using Nonemm.Core; namespace Nonemm.Network.Tests; public class ContactMessageTests { private static Qso Contact() => new() { Id = "0123456789abcdef0123456789abcdef", TimestampUtc = new DateTime(2026, 5, 30, 12, 34, 56, DateTimeKind.Utc), Call = Callsign.Parse("JA1XYZ"), Frequency = Frequency.FromKilohertz(14_025.5), Mode = Modes.Cw, ContestName = "CQWW", ContestNumber = 3, SentReport = "599", ReceivedReport = "579", Zone = 25, Points = 3, IsMultiplier1 = true, CountryPrefix = "JA", Continent = "AS", WpxPrefix = "JA1", IsRunQso = true, }; private static Qso ReadBack(string xml) => Assert.IsType(ContactMessage.Read(xml)).Qso; [Fact] public void ContactSurvivesTheRoundTrip() { Qso read = ReadBack(ContactMessage.Write(Contact(), "DL1ABC", "PC1")); Assert.Equal("0123456789abcdef0123456789abcdef", read.Id); Assert.Equal("JA1XYZ", read.Call.Text); Assert.Equal(14_025_500, read.Frequency.Hertz); Assert.Equal(new DateTime(2026, 5, 30, 12, 34, 56, DateTimeKind.Utc), read.TimestampUtc); Assert.Equal(25, read.Zone); Assert.Equal("JA", read.CountryPrefix); Assert.True(read.IsRunQso); Assert.Equal("PC1", read.StationName); } /// A contact that arrived over the network was made somewhere else, whatever /// the sender put in the field. [Fact] public void AContactFromTheNetworkIsNotOriginal() => Assert.False(ReadBack(ContactMessage.Write(Contact(), "DL1ABC", "PC1")).IsOriginal); [Fact] public void FrequenciesAreSentInUnitsOfTenHertz() => Assert.Contains("1402550", ContactMessage.Write(Contact(), "DL1ABC", "PC1")); [Fact] public void AnEditCarriesTheCallAndTimeTheContactHadBefore() { Qso edited = Contact() with { Call = Callsign.Parse("JA1XYZ/2") }; DateTime before = new(2026, 5, 30, 12, 30, 0, DateTimeKind.Utc); ContactReplaced read = Assert.IsType(ContactMessage.Read( ContactMessage.WriteReplace(edited, "DL1ABC", "PC1", "JA1XYZ", before))); Assert.Equal("JA1XYZ/2", read.Qso.Call.Text); Assert.Equal("JA1XYZ", read.OldCall); Assert.Equal(before, read.OldTimestampUtc); } [Fact] public void ADeleteNamesTheContactByIdCallAndTime() { ContactDeleted read = Assert.IsType(ContactMessage.Read( ContactMessage.WriteDelete(Contact(), "DL1ABC", "PC1"))); Assert.Equal("0123456789abcdef0123456789abcdef", read.Id); Assert.Equal("JA1XYZ", read.Call); Assert.Equal(new DateTime(2026, 5, 30, 12, 34, 56, DateTimeKind.Utc), read.TimestampUtc); Assert.Equal(3, read.ContestNumber); Assert.Equal("PC1", read.StationName); } [Theory] [InlineData("N1MM")] [InlineData("not xml at all")] [InlineData("")] public void AnythingThatIsNotAContactIsPassedOver(string message) => Assert.Null(ContactMessage.Read(message)); }