From 5c2059cfa947abab415906ed94c4340a7d5cd971 Mon Sep 17 00:00:00 2001 From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com> Date: Mon, 10 Mar 2025 20:48:19 -0500 Subject: [PATCH] tests: work on writing tests for console functionality --- .../AltGen.Console.Tests.csproj | 1 + .../Unit/AddConfigCommandTests.cs | 76 +++++++++++++++++-- src/AltGen.Console/Config/AppSettings.cs | 9 ++- 3 files changed, 80 insertions(+), 6 deletions(-) diff --git a/src/AltGen.Console.Tests/AltGen.Console.Tests.csproj b/src/AltGen.Console.Tests/AltGen.Console.Tests.csproj index 94aed1c..401e66c 100644 --- a/src/AltGen.Console.Tests/AltGen.Console.Tests.csproj +++ b/src/AltGen.Console.Tests/AltGen.Console.Tests.csproj @@ -11,6 +11,7 @@ + diff --git a/src/AltGen.Console.Tests/Unit/AddConfigCommandTests.cs b/src/AltGen.Console.Tests/Unit/AddConfigCommandTests.cs index dc5fb23..6d77e97 100644 --- a/src/AltGen.Console.Tests/Unit/AddConfigCommandTests.cs +++ b/src/AltGen.Console.Tests/Unit/AddConfigCommandTests.cs @@ -1,16 +1,82 @@ +using Spectre.Console; +using Spectre.Console.Cli; +using Spectre.Console.Testing; + namespace AltGen.Console.Tests.Unit; public class AddConfigCommandTests { - [Fact] - public Task ExecuteAsync_WhenSettingsDoNotExist_ItShouldCreateSettings() + readonly Mock _fileSystem = new(); + readonly IAnsiConsole _testConsole = new TestConsole(); + readonly AddConfigCommand _sut; + + public AddConfigCommandTests() { - throw new NotImplementedException(); + _sut = new AddConfigCommand(_testConsole, _fileSystem.Object); + } + + + [Fact] + public async Task ExecuteAsync_WhenSettingsDoNotExist_ItShouldCreateSettings() + { + var testSettingsPath = "appsettings.json"; + + _fileSystem + .Setup(static x => x.Path.Combine(It.IsAny(), It.IsAny())) + .Returns(testSettingsPath); + + _fileSystem + .Setup(static x => x.File.Exists(It.IsAny())) + .Returns(false); + + var commandSettings = new AddConfigCommand.Settings(_fileSystem.Object) + { + Provider = "provider", + Key = "key", + }; + + var result = await _sut.ExecuteAsync(null!, commandSettings); + + result.Should().Be(0); + + _fileSystem + .Verify( + x => x.File.WriteAllTextAsync(testSettingsPath, It.IsAny(), default), + Times.Once + ); } [Fact] - public Task ExecuteAsync_WhenSettingsExist_ItShouldUpdateSettings() + public async Task ExecuteAsync_WhenSettingsExist_ItShouldUpdateSettings() { - throw new NotImplementedException(); + var testSettingsPath = "appsettings.json"; + + _fileSystem + .Setup(static x => x.Path.Combine(It.IsAny(), It.IsAny())) + .Returns(testSettingsPath); + + _fileSystem + .Setup(static x => x.File.Exists(It.IsAny())) + .Returns(true); + + _fileSystem + .Setup(static x => x.File.ReadAllTextAsync(It.IsAny(), default)) + .ReturnsAsync("{}"); + + var commandSettings = new AddConfigCommand.Settings(_fileSystem.Object) + { + Provider = "provider", + Key = "key", + }; + + var result = await _sut.ExecuteAsync(null!, commandSettings); + + result.Should().Be(0); + + _fileSystem + .Verify( + x => x.File.WriteAllTextAsync(testSettingsPath, It.IsAny(), default), + Times.Once + ); } } \ No newline at end of file diff --git a/src/AltGen.Console/Config/AppSettings.cs b/src/AltGen.Console/Config/AppSettings.cs index 9967e99..26bc33b 100644 --- a/src/AltGen.Console/Config/AppSettings.cs +++ b/src/AltGen.Console/Config/AppSettings.cs @@ -1,7 +1,14 @@ namespace AltGen.Console.Config; -record AppSettings(ProviderSettings[] Providers) +record AppSettings { + public ProviderSettings[] Providers { get; init; } = []; + + public AppSettings(ProviderSettings[] providers) + { + Providers = providers; + } + public AppSettings AddOrUpdateProvider(AddConfigCommand.Settings settings) { var updatedProviders = Providers.Select(p =>