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 =>