Procházet zdrojové kódy

Laptop Test written but failing due to Laptop Set command missing

James před 1 měsícem
rodič
revize
d51dd77d5d

+ 57 - 0
Tests/EndToEnd/LaptopTests/LaptopCommandTests.cs

@@ -0,0 +1,57 @@
+using Tests.EndToEnd.Infra;
+using Xunit.Abstractions;
+
+namespace Tests.EndToEnd;
+
+[Collection("Yaml CLI tests")]
+public class LaptopCommandTests(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_outputs_expected_information()
+    {
+        await ExecuteAsync("laptops", "add", "lap01");
+        await ExecuteAsync("laptops", "set", "lap01", "--model", "ThinkPad X1 Carbon");
+
+        var (output, _) = await ExecuteAsync("laptops", "describe", "lap01");
+
+        Assert.Contains("lap01", output);
+        Assert.Contains("ThinkPad X1 Carbon", output);
+    }
+
+    [Fact]
+    public async Task help_commands_do_not_throw()
+    {
+        Assert.Contains("Manage Laptop computers", (await ExecuteAsync("laptops", "--help")).Item1);
+        Assert.Contains("Add a new Laptop", (await ExecuteAsync("laptops", "add", "--help")).Item1);
+        Assert.Contains("List all Laptops", (await ExecuteAsync("laptops", "list", "--help")).Item1);
+        Assert.Contains("Retrieve a Laptop", (await ExecuteAsync("laptops", "get", "--help")).Item1);
+        Assert.Contains("Show detailed information", (await ExecuteAsync("laptops", "describe", "--help")).Item1);
+        Assert.Contains("Delete a Laptop", (await ExecuteAsync("laptops", "del", "--help")).Item1);
+        Assert.Contains("Show a summarized hardware report", (await ExecuteAsync("laptops", "summary", "--help")).Item1);
+        Assert.Contains("Display the dependency tree", (await ExecuteAsync("laptops", "tree", "--help")).Item1);
+
+        // CPU help
+        Assert.Contains("Manage CPUs", (await ExecuteAsync("laptops", "cpu", "--help")).Item1);
+        Assert.Contains("Add a CPU", (await ExecuteAsync("laptops", "cpu", "add", "--help")).Item1);
+
+        // Drives help
+        Assert.Contains("Manage storage drives", (await ExecuteAsync("laptops", "drives", "--help")).Item1);
+
+        // GPU help
+        Assert.Contains("Manage GPUs", (await ExecuteAsync("laptops", "gpu", "--help")).Item1);
+    }
+}

+ 99 - 0
Tests/EndToEnd/LaptopTests/LaptopErrorTests.cs

@@ -0,0 +1,99 @@
+using Tests.EndToEnd.Infra;
+using Xunit.Abstractions;
+
+namespace Tests.EndToEnd;
+
+[Collection("Yaml CLI tests")]
+public class LaptopErrorTests(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_laptop_returns_error()
+    {
+        await ExecuteAsync("laptops", "add", "lap01");
+        var (output, _) = await ExecuteAsync("laptops", "add", "lap01");
+        Assert.Contains("already exists", output, StringComparison.OrdinalIgnoreCase);
+    }
+
+    [Fact]
+    public async Task get_missing_laptop_returns_error()
+    {
+        var (output, _) = await ExecuteAsync("laptops", "get", "ghost");
+        Assert.Contains("not found", output, StringComparison.OrdinalIgnoreCase);
+    }
+
+    [Fact]
+    public async Task delete_missing_laptop_returns_error()
+    {
+        var (output, _) = await ExecuteAsync("laptops", "del", "ghost");
+        Assert.Contains("not found", output, StringComparison.OrdinalIgnoreCase);
+    }
+
+    // CPU errors
+    [Fact]
+    public async Task cpu_add_missing_laptop_returns_error()
+    {
+        var (output, _) = await ExecuteAsync(
+            "laptops", "cpu", "add", "ghost",
+            "--model", "Intel i7",
+            "--cores", "8",
+            "--threads", "16"
+        );
+
+        Assert.Contains("not found", output, StringComparison.OrdinalIgnoreCase);
+    }
+
+    [Fact]
+    public async Task cpu_set_invalid_index_returns_error()
+    {
+        await ExecuteAsync("laptops", "add", "lap01");
+
+        var (output, _) = await ExecuteAsync(
+            "laptops", "cpu", "set", "lap01", "5",
+            "--model", "Intel i7"
+        );
+
+        Assert.Contains("not found", output, StringComparison.OrdinalIgnoreCase);
+    }
+
+    // Drive errors
+    [Fact]
+    public async Task drive_set_invalid_index_returns_error()
+    {
+        await ExecuteAsync("laptops", "add", "lap01");
+
+        var (output, _) = await ExecuteAsync(
+            "laptops", "drives", "set", "lap01", "3",
+            "--type", "ssd"
+        );
+
+        Assert.Contains("not found", output, StringComparison.OrdinalIgnoreCase);
+    }
+
+    // GPU errors
+    [Fact]
+    public async Task gpu_set_invalid_index_returns_error()
+    {
+        await ExecuteAsync("laptops", "add", "lap01");
+
+        var (output, _) = await ExecuteAsync(
+            "laptops", "gpu", "set", "lap01", "2",
+            "--model", "Intel Iris Xe"
+        );
+
+        Assert.Contains("not found", output, StringComparison.OrdinalIgnoreCase);
+    }
+}

+ 122 - 0
Tests/EndToEnd/LaptopTests/LaptopWorkflowTests.cs

@@ -0,0 +1,122 @@
+using Tests.EndToEnd.Infra;
+using Xunit.Abstractions;
+
+namespace Tests.EndToEnd;
+
+[Collection("Yaml CLI tests")]
+public class LaptopWorkflowTests(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 laptops_cli_workflow_test()
+    {
+        await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), "");
+
+        // Add laptop
+        var (output, yaml) = await ExecuteAsync("laptops", "add", "lap01");
+        Assert.Equal("Laptop 'lap01' added.\n", output);
+        Assert.Contains("name: lap01", yaml);
+
+        // Set model
+        (output, yaml) = await ExecuteAsync(
+            "laptops", "set", "lap01",
+            "--model", "ThinkPad X1 Carbon"
+        );
+        Assert.Equal("Laptop 'lap01' updated.\n", output);
+        Assert.Contains("model: ThinkPad X1 Carbon", yaml);
+
+        // Add CPU
+        (output, yaml) = await ExecuteAsync(
+            "laptops", "cpu", "add", "lap01",
+            "--model", "Intel i7-1260P",
+            "--cores", "12",
+            "--threads", "16"
+        );
+        Assert.Equal("CPU added to laptop 'lap01'.\n", output);
+
+        // Add Drive
+        (output, yaml) = await ExecuteAsync(
+            "laptops", "drives", "add", "lap01",
+            "--type", "ssd",
+            "--size", "512"
+        );
+        Assert.Equal("Drive added to laptop 'lap01'.\n", output);
+
+        // Add GPU
+        (output, yaml) = await ExecuteAsync(
+            "laptops", "gpu", "add", "lap01",
+            "--model", "Intel Iris Xe",
+            "--vram", "1"
+        );
+        Assert.Equal("GPU added to laptop 'lap01'.\n", output);
+
+        // Get laptop (rich one-line output)
+        (output, yaml) = await ExecuteAsync("laptops", "get", "lap01");
+        Assert.Equal(
+            "lap01  Model: ThinkPad X1 Carbon, CPU: Intel i7-1260P, Cores: 12, RAM: 0GB, Storage: 512GB, GPU: Intel Iris Xe\n",
+            output
+        );
+
+        // List laptops (strict table)
+        (output, yaml) = await ExecuteAsync("laptops", "list");
+        Assert.Equal("""
+                     ╭───────┬────────────────────┬────────────────┬───────┬──────────┬──────────────╮
+                     │ Name  │ Model              │ CPU            │ Cores │ RAM (GB) │ Storage (GB) │
+                     ├───────┼────────────────────┼────────────────┼───────┼──────────┼──────────────┤
+                     │ lap01 │ ThinkPad X1 Carbon │ Intel i7-1260P │ 12    │ 0        │ 512          │
+                     ╰───────┴────────────────────┴────────────────┴───────┴──────────┴──────────────╯
+
+                     """, output);
+
+        // Summary (strict table)
+        (output, yaml) = await ExecuteAsync("laptops", "summary");
+        Assert.Equal("""
+                     ╭───────┬────────────────────┬────────────────┬───────┬──────────┬──────────────╮
+                     │ Name  │ Model              │ CPU            │ Cores │ RAM (GB) │ Storage (GB) │
+                     ├───────┼────────────────────┼────────────────┼───────┼──────────┼──────────────┤
+                     │ lap01 │ ThinkPad X1 Carbon │ Intel i7-1260P │ 12    │ 0        │ 512          │
+                     ╰───────┴────────────────────┴────────────────┴───────┴──────────┴──────────────╯
+
+                     """, output);
+
+        // Describe (loose)
+        (output, yaml) = await ExecuteAsync("laptops", "describe", "lap01");
+        Assert.Contains("lap01", output);
+        Assert.Contains("ThinkPad X1 Carbon", output);
+        Assert.Contains("Intel i7-1260P", output);
+        Assert.Contains("SSD", output);
+        Assert.Contains("512", output);
+        Assert.Contains("Intel Iris Xe", output);
+
+        // Tree (loose)
+        (output, yaml) = await ExecuteAsync("laptops", "tree", "lap01");
+        Assert.Contains("lap01", output);
+        Assert.Contains("CPU:", output);
+        Assert.Contains("Drive:", output);
+        Assert.Contains("GPU:", output);
+
+        // Delete laptop
+        (output, yaml) = await ExecuteAsync("laptops", "del", "lap01");
+        Assert.Equal("""
+                     Laptop 'lap01' deleted.
+
+                     """, output);
+    }
+}

+ 0 - 1
Tests/Tests.csproj

@@ -27,7 +27,6 @@
     </ItemGroup>
 
     <ItemGroup>
-      <Folder Include="EndToEnd\LaptopTests\" />
       <Folder Include="EndToEnd\RouterTests\" />
       <Folder Include="EndToEnd\ServerTests\" />
       <Folder Include="EndToEnd\ServiceTests\" />