Bladeren bron

Ups Tests written

James 1 maand geleden
bovenliggende
commit
bd97b1702c
3 gewijzigde bestanden met toevoegingen van 236 en 0 verwijderingen
  1. 61 0
      Tests/EndToEnd/Ups/UpsCommandTests.cs
  2. 72 0
      Tests/EndToEnd/Ups/UpsErrorTest.cs
  3. 103 0
      Tests/EndToEnd/Ups/UpsWorkflowtests.cs

+ 61 - 0
Tests/EndToEnd/Ups/UpsCommandTests.cs

@@ -0,0 +1,61 @@
+using Tests.EndToEnd.Infra;
+using Xunit.Abstractions;
+
+namespace Tests.EndToEnd;
+
+[Collection("Yaml CLI tests")]
+public class UpsCommandTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
+    : IClassFixture<TempYamlCliFixture>
+{
+    private async Task<(string, string)> ExecuteAsync(params string[] args)
+    {
+        var output = await YamlCliTestHost.RunAsync(
+            args,
+            fs.Root,
+            outputHelper,
+            "config.yaml");
+
+        var yaml = await File.ReadAllTextAsync(Path.Combine(fs.Root, "config.yaml"));
+        return (output, yaml);
+    }
+
+    [Fact]
+    public async Task describe_returns_detailed_information()
+    {
+        // given
+        await ExecuteAsync("ups", "add", "ups01");
+        await ExecuteAsync("ups", "set", "ups01", "--model", "APC Smart-UPS 1500", "--va", "1500");
+
+        // when
+        var (output, _) = await ExecuteAsync("ups", "describe", "ups01");
+
+        // then 
+        Assert.Contains("Name:", output);
+        Assert.Contains("ups01", output);
+
+        Assert.Contains("Model:", output);
+        Assert.Contains("APC Smart-UPS 1500", output);
+
+        Assert.Contains("VA", output);
+        Assert.Contains("1500", output);
+    }
+
+    [Fact]
+    public async Task help_outputs_do_not_throw()
+    {
+        var (rootHelp, _) = await ExecuteAsync("ups", "--help");
+        Assert.Contains("Manage UPS units", rootHelp);
+
+        var (addHelp, _) = await ExecuteAsync("ups", "add", "--help");
+        Assert.Contains("Add a new UPS unit", addHelp);
+
+        var (setHelp, _) = await ExecuteAsync("ups", "set", "--help");
+        Assert.Contains("Update properties", setHelp);
+
+        var (describeHelp, _) = await ExecuteAsync("ups", "describe", "--help");
+        Assert.Contains("Show detailed information", describeHelp);
+
+        var (delHelp, _) = await ExecuteAsync("ups", "del", "--help");
+        Assert.Contains("Delete a UPS unit", delHelp);
+    }
+}

+ 72 - 0
Tests/EndToEnd/Ups/UpsErrorTest.cs

@@ -0,0 +1,72 @@
+using Tests.EndToEnd.Infra;
+using Xunit.Abstractions;
+
+namespace Tests.EndToEnd;
+
+[Collection("Yaml CLI tests")]
+public class UpsErrorTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
+    : IClassFixture<TempYamlCliFixture>
+{
+    private async Task<(string, string)> ExecuteAsync(params string[] args)
+    {
+        var output = await YamlCliTestHost.RunAsync(
+            args,
+            fs.Root,
+            outputHelper,
+            "config.yaml");
+
+        var yaml = await File.ReadAllTextAsync(Path.Combine(fs.Root, "config.yaml"));
+        return (output, yaml);
+    }
+
+    [Fact]
+    public async Task adding_duplicate_ups_returns_error()
+    {
+        await ExecuteAsync("ups", "add", "ups01");
+
+        var (output, _) = await ExecuteAsync("ups", "add", "ups01");
+
+        Assert.Contains("already exists", output, StringComparison.OrdinalIgnoreCase);
+    }
+
+    [Fact]
+    public async Task get_missing_ups_returns_error()
+    {
+        var (output, _) = await ExecuteAsync("ups", "get", "ghost");
+
+        Assert.Contains("not found", output, StringComparison.OrdinalIgnoreCase);
+    }
+
+    [Fact]
+    public async Task set_missing_ups_returns_error()
+    {
+        var (output, _) = await ExecuteAsync(
+            "ups", "set", "ghost",
+            "--model", "X",
+            "--va", "1000"
+        );
+
+        Assert.Contains("not found", output, StringComparison.OrdinalIgnoreCase);
+    }
+
+    [Fact]
+    public async Task delete_missing_ups_returns_error()
+    {
+        var (output, _) = await ExecuteAsync("ups", "del", "ghost");
+
+        Assert.Contains("not found", output, StringComparison.OrdinalIgnoreCase);
+    }
+
+    [Fact]
+    public async Task invalid_va_value_returns_error()
+    {
+        await ExecuteAsync("ups", "add", "ups01");
+
+        var (output, _) = await ExecuteAsync(
+            "ups", "set", "ups01",
+            "--va", "not-a-number"
+        );
+
+        Assert.Contains("invalid", output, StringComparison.OrdinalIgnoreCase);
+    }
+}

+ 103 - 0
Tests/EndToEnd/Ups/UpsWorkflowtests.cs

@@ -0,0 +1,103 @@
+using Tests.EndToEnd.Infra;
+using Xunit.Abstractions;
+
+namespace Tests.EndToEnd;
+
+[Collection("Yaml CLI tests")]
+public class UpsWorkflowTests(TempYamlCliFixture fs, ITestOutputHelper outputHelper)
+    : IClassFixture<TempYamlCliFixture>
+{
+    private async Task<(string, string)> ExecuteAsync(params string[] args)
+    {
+        outputHelper.WriteLine($"rpk {string.Join(" ", args)}");
+
+        var output = await YamlCliTestHost.RunAsync(
+            args,
+            fs.Root,
+            outputHelper,
+            "config.yaml");
+
+        outputHelper.WriteLine(output);
+
+        var yaml = await File.ReadAllTextAsync(Path.Combine(fs.Root, "config.yaml"));
+        return (output, yaml);
+    }
+
+    [Fact]
+    public async Task ups_cli_workflow_test()
+    {
+        // Add UPS
+        var (output, yaml) = await ExecuteAsync("ups", "add", "ups01");
+        Assert.Equal("UPS 'ups01' added.\n", output);
+        Assert.Contains("name: ups01", yaml);
+
+        // Update UPS
+        (output, yaml) = await ExecuteAsync(
+            "ups", "set", "ups01",
+            "--model", "APC-SmartUPS-1500",
+            "--va", "1500"
+        );
+        Assert.Equal("UPS 'ups01' updated.\n", output);
+
+        Assert.Equal("""
+                     resources:
+                     - kind: Ups
+                       model: APC-SmartUPS-1500
+                       va: 1500
+                       name: ups01
+
+                     """, yaml);
+
+        // Add second UPS
+        (output, yaml) = await ExecuteAsync("ups", "add", "ups02");
+        Assert.Equal("UPS 'ups02' added.\n", output);
+
+        (output, yaml) = await ExecuteAsync(
+            "ups", "set", "ups02",
+            "--model", "CyberPower-2200VA",
+            "--va", "2200"
+        );
+        Assert.Equal("UPS 'ups02' updated.\n", output);
+
+        Assert.Equal("""
+                     resources:
+                     - kind: Ups
+                       model: APC-SmartUPS-1500
+                       va: 1500
+                       name: ups01
+                     - kind: Ups
+                       model: CyberPower-2200VA
+                       va: 2200
+                       name: ups02
+
+                     """, yaml);
+
+        // Get UPS
+        (output, yaml) = await ExecuteAsync("ups", "get", "ups01");
+        Assert.Contains("ups01", output);
+        Assert.Contains("APC-SmartUPS-1500", output);
+        Assert.Contains("1500", output);
+
+        // List UPS units
+        (output, yaml) = await ExecuteAsync("ups", "list");
+        Assert.Contains("ups01", output);
+        Assert.Contains("ups02", output);
+
+        // Summary
+        (output, yaml) = await ExecuteAsync("ups", "summary");
+        Assert.Contains("ups01", output);
+        Assert.Contains("ups02", output);
+
+        // Delete UPS
+        (output, yaml) = await ExecuteAsync("ups", "del", "ups02");
+        Assert.Equal("""
+                     UPS 'ups02' deleted.
+
+                     """, output);
+
+        // List again
+        (output, yaml) = await ExecuteAsync("ups", "list");
+        Assert.Contains("ups01", output);
+        Assert.DoesNotContain("ups02", output);
+    }
+}