using Nonemm.App.Configuration; namespace Nonemm.App.Tests; public class SettingsTests : IDisposable { private readonly string path = Path.Combine(Path.GetTempPath(), $"nonemm-{Guid.NewGuid():N}.json"); public void Dispose() => File.Delete(path); private Settings Load(string json) { File.WriteAllText(path, json); return Settings.Load(path); } [Fact] public void AFileWithNullsInItReadsAsTheDefaults() { Settings settings = Load( """ { "ClusterHost": null, "ClusterCommands": null, "ClusterNodes": null, "TelnetButtons": null, "SpotFilter": null, "Radios": null, "Station": null, "CwMessages": null } """); Assert.Equal("", settings.ClusterHost); Assert.Empty(settings.ClusterCommands); Assert.Empty(settings.ClusterNodes); Assert.Empty(settings.TelnetButtons); Assert.Empty(settings.SpotFilter.Bands); Assert.Empty(settings.Radios); Assert.Equal("", settings.Station.Callsign); Assert.Empty(settings.CwMessages); } [Fact] public void ANullInsideAStoredNodeIsFilledInToo() { Settings settings = Load( """ { "ClusterNodes": [ { "Name": null, "Host": "dxc.example.net", "Commands": null } ] } """); StoredClusterNode node = Assert.Single(settings.ClusterNodes); Assert.Equal("", node.Name); Assert.Empty(node.Commands); } [Fact] public void WhatTheFileSaysIsKept() { Settings settings = Load("""{ "ClusterHost": "dxc.example.net", "ClusterPort": 7300 }"""); Assert.Equal("dxc.example.net", settings.ClusterHost); Assert.Equal(7300, settings.ClusterPort); } [Fact] public void TheTwelveMessagesAnOlderFileHoldsBecomeAFunctionKeyFile() { Settings settings = Load( """ { "CwMessages": [ "CQ TEST {MYCALL}", "5NN {EXCH}" ] } """); Assert.Empty(settings.CwMessages); Assert.Equal("F1 CQ,CQ TEST {MYCALL}\nF2 Exch,5NN {EXCH}", settings.CwMessageFile); } [Fact] public void AFileTextThatIsAlreadyThereIsLeftAlone() { Settings settings = Load( """ { "CwMessageFile": "F1 CQ,CQ", "CwMessages": [ "old" ] } """); Assert.Equal("F1 CQ,CQ", settings.CwMessageFile); } }