| File: TestServices\TestNewCommandPrompter.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 System.CommandLine; using Aspire.Cli.Commands; using Aspire.Cli.Interaction; using Aspire.Cli.Packaging; using Aspire.Cli.Templating; using Spectre.Console; using NuGetPackage = Aspire.Shared.NuGetPackageCli; namespace Aspire.Cli.Tests.TestServices; internal sealed class TestNewCommandPrompter(IInteractionService interactionService) : NewCommandPrompter(interactionService) { public Func<IEnumerable<(NuGetPackage Package, PackageChannel Channel)>, (NuGetPackage Package, PackageChannel Channel)>? PromptForTemplatesVersionCallback { get; set; } public Func<ITemplate[], ITemplate>? PromptForTemplateCallback { get; set; } public Func<string, string>? PromptForProjectNameCallback { get; set; } public Func<string, string>? PromptForOutputPathCallback { get; set; } public Func<string, Func<string, ValidationResult>?, string>? PromptForOutputPathWithValidatorCallback { get; set; } public override Task<ITemplate> PromptForTemplateAsync(ITemplate[] validTemplates, CancellationToken cancellationToken) { return PromptForTemplateCallback switch { { } callback => Task.FromResult(callback(validTemplates)), _ => Task.FromResult(validTemplates[0]) // If no callback is provided just accept the first template. }; } public override Task<string> PromptForProjectNameAsync(string defaultName, ParseResult parseResult, CancellationToken cancellationToken) { return PromptForProjectNameCallback switch { { } callback => Task.FromResult(callback(defaultName)), _ => Task.FromResult(defaultName) // If no callback is provided just accept the default. }; } public override Task<string> PromptForOutputPath(string path, ParseResult parseResult, Func<string, ValidationResult>? validator = null, Func<string, string>? outputPathResolver = null, CancellationToken cancellationToken = default) { var resolvedValidator = validator; if (validator is not null && outputPathResolver is not null) { resolvedValidator = candidatePath => validator(outputPathResolver(candidatePath)); } var outputPath = PromptForOutputPathWithValidatorCallback switch { { } callback => callback(path, resolvedValidator), _ => PromptForOutputPathCallback switch { { } callback => callback(path), _ => path // If no callback is provided just accept the default. } }; return Task.FromResult(outputPathResolver?.Invoke(outputPath) ?? outputPath); } public override Task<(NuGetPackage Package, PackageChannel Channel)> PromptForTemplatesVersionAsync(IEnumerable<(NuGetPackage Package, PackageChannel Channel)> candidatePackages, CancellationToken cancellationToken) { return PromptForTemplatesVersionCallback switch { { } callback => Task.FromResult(callback(candidatePackages)), _ => Task.FromResult(candidatePackages.First()) // If no callback is provided just accept the first package. }; } }