| File: Templating\OutputPathHelperTests.cs | Web Access |
| Project: src\tests\Aspire.Cli.Tests\Aspire.Cli.Tests.csproj (Aspire.Cli.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Aspire.Cli.Templating; namespace Aspire.Cli.Tests.Templating; public class OutputPathHelperTests(ITestOutputHelper outputHelper) { [Fact] public void GetUniqueDefaultOutputPath_ReturnsTemplateName_WhenDirectoryDoesNotExist() { using var workspace = TemporaryWorkspace.CreateForCli(outputHelper); var result = OutputPathHelper.GetUniqueDefaultOutputPath("aspire-starter", workspace.WorkspaceRoot.FullName); Assert.Equal("./aspire-starter", result); } [Fact] public void GetUniqueDefaultOutputPath_ReturnsTemplateName_WhenDirectoryExistsButIsEmpty() { using var workspace = TemporaryWorkspace.CreateForCli(outputHelper); workspace.CreateDirectory("aspire-starter"); var result = OutputPathHelper.GetUniqueDefaultOutputPath("aspire-starter", workspace.WorkspaceRoot.FullName); Assert.Equal("./aspire-starter", result); } [Fact] public void GetUniqueDefaultOutputPath_AppendsSuffix_WhenDirectoryExistsAndIsNonEmpty() { using var workspace = TemporaryWorkspace.CreateForCli(outputHelper); var dir = workspace.CreateDirectory("aspire-starter"); File.WriteAllText(Path.Combine(dir.FullName, "file.txt"), "content"); var result = OutputPathHelper.GetUniqueDefaultOutputPath("aspire-starter", workspace.WorkspaceRoot.FullName); Assert.Equal("./aspire-starter-2", result); } [Fact] public void GetUniqueDefaultOutputPath_IncrementsUntilUnique() { using var workspace = TemporaryWorkspace.CreateForCli(outputHelper); // Create non-empty directories for aspire-starter and aspire-starter-2 foreach (var name in new[] { "aspire-starter", "aspire-starter-2" }) { var dir = workspace.CreateDirectory(name); File.WriteAllText(Path.Combine(dir.FullName, "file.txt"), "content"); } var result = OutputPathHelper.GetUniqueDefaultOutputPath("aspire-starter", workspace.WorkspaceRoot.FullName); Assert.Equal("./aspire-starter-3", result); } [Fact] public void GetUniqueDefaultOutputPath_SkipsNonEmptyAndUsesEmptySlot() { using var workspace = TemporaryWorkspace.CreateForCli(outputHelper); // aspire-starter is non-empty, aspire-starter-2 is empty var dir = workspace.CreateDirectory("aspire-starter"); File.WriteAllText(Path.Combine(dir.FullName, "file.txt"), "content"); workspace.CreateDirectory("aspire-starter-2"); var result = OutputPathHelper.GetUniqueDefaultOutputPath("aspire-starter", workspace.WorkspaceRoot.FullName); Assert.Equal("./aspire-starter-2", result); } [Fact] public void GetUniqueDefaultOutputPath_StripsInvalidPathCharacters() { using var workspace = TemporaryWorkspace.CreateForCli(outputHelper); var result = OutputPathHelper.GetUniqueDefaultOutputPath("my\0app", workspace.WorkspaceRoot.FullName); Assert.Equal("./myapp", result); } [Fact] public void GetUniqueDefaultOutputPath_FallsBackToOutput_WhenAllCharsInvalid() { using var workspace = TemporaryWorkspace.CreateForCli(outputHelper); var result = OutputPathHelper.GetUniqueDefaultOutputPath("\0", workspace.WorkspaceRoot.FullName); Assert.Equal("./output", result); } [Fact] public void ValidateOutputPath_ReturnsNull_WhenDirectoryDoesNotExist() { using var workspace = TemporaryWorkspace.CreateForCli(outputHelper); var path = Path.Combine(workspace.WorkspaceRoot.FullName, "new-dir"); var result = OutputPathHelper.ValidateOutputPath(path, workspace.WorkspaceRoot.FullName); Assert.Null(result); } [Fact] public void ValidateOutputPath_ReturnsNull_WhenDirectoryExistsButIsEmpty() { using var workspace = TemporaryWorkspace.CreateForCli(outputHelper); var dir = workspace.CreateDirectory("empty-dir"); var result = OutputPathHelper.ValidateOutputPath(dir.FullName, workspace.WorkspaceRoot.FullName); Assert.Null(result); } [Fact] public void ValidateOutputPath_ReturnsError_WhenDirectoryExistsAndIsNonEmpty() { using var workspace = TemporaryWorkspace.CreateForCli(outputHelper); var dir = workspace.CreateDirectory("non-empty-dir"); File.WriteAllText(Path.Combine(dir.FullName, "file.txt"), "content"); var result = OutputPathHelper.ValidateOutputPath(dir.FullName, workspace.WorkspaceRoot.FullName); Assert.NotNull(result); Assert.Contains(dir.FullName, result); } [Fact] public void CreateOutputPathValidator_ReturnsSuccess_WhenDirectoryDoesNotExist() { using var workspace = TemporaryWorkspace.CreateForCli(outputHelper); var validator = OutputPathHelper.CreateOutputPathValidator(workspace.WorkspaceRoot.FullName); var result = validator("./new-dir"); Assert.True(result.Successful); } [Fact] public void CreateOutputPathValidator_ReturnsSuccess_WhenDirectoryExistsButIsEmpty() { using var workspace = TemporaryWorkspace.CreateForCli(outputHelper); workspace.CreateDirectory("empty-dir"); var validator = OutputPathHelper.CreateOutputPathValidator(workspace.WorkspaceRoot.FullName); var result = validator("./empty-dir"); Assert.True(result.Successful); } [Fact] public void CreateOutputPathValidator_ReturnsError_WhenDirectoryExistsAndIsNonEmpty() { using var workspace = TemporaryWorkspace.CreateForCli(outputHelper); var dir = workspace.CreateDirectory("non-empty-dir"); File.WriteAllText(Path.Combine(dir.FullName, "file.txt"), "content"); var validator = OutputPathHelper.CreateOutputPathValidator(workspace.WorkspaceRoot.FullName); var result = validator("./non-empty-dir"); Assert.False(result.Successful); } }