using FluentAssertions; using StellaOps.Interop; using Xunit; using Xunit.Sdk; namespace StellaOps.Interop.Tests; public sealed partial class ToolManagerTests { [Fact] public async Task RunAsync_ReturnsFailure_WhenToolMissingAsync() { var workDir = CreateTempDirectory(); try { var manager = new ToolManager(workDir); var result = await manager.RunAsync("missing-tool", "--version", CancellationToken.None); result.Success.Should().BeFalse(); result.Error.Should().Contain("Tool not found"); result.ExitCode.Should().Be(-1); } finally { DeleteDirectory(workDir); } } [Fact] public async Task RunAsync_ReturnsSuccess_WhenShellExecutesScriptAsync() { var workDir = CreateTempDirectory(); try { var scriptPath = WriteShellScript(workDir); var shellPath = ResolveShellPath(); if (string.IsNullOrWhiteSpace(shellPath) || !File.Exists(shellPath)) throw SkipException.ForSkip("Shell not available for interop tool test."); var toolPaths = new Dictionary(StringComparer.OrdinalIgnoreCase) { ["shell"] = shellPath }; var args = OperatingSystem.IsWindows() ? $"/c \"{scriptPath}\"" : $"\"{scriptPath}\""; var manager = new ToolManager(workDir, toolPaths); var result = await manager.RunAsync("shell", args, CancellationToken.None); result.Success.Should().BeTrue(); result.StdOut.Should().Contain("ok"); } finally { DeleteDirectory(workDir); } } }