| File: Commands\RestoreCommandTests.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.Tests.TestServices; using Aspire.Cli.Tests.Utils; using Microsoft.AspNetCore.InternalTesting; using Microsoft.Extensions.DependencyInjection; using RootCommand = Aspire.Cli.Commands.RootCommand; namespace Aspire.Cli.Tests.Commands; public class RestoreCommandTests(ITestOutputHelper outputHelper) { [Fact] public async Task RestoreCommand_WithDotNetAppHost_RunsDotNetRestore() { using var workspace = TemporaryWorkspace.Create(outputHelper); var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj")); await File.WriteAllTextAsync(appHostFile.FullName, "<Project Sdk=\"Microsoft.NET.Sdk\" />"); var restoreCalled = false; string? capturedProjectFilePath = null; var services = CliTestHelper.CreateServiceCollection(workspace, outputHelper, options => { options.DotNetCliRunnerFactory = _ => new TestDotNetCliRunner { RestoreAsyncCallback = (projectFilePath, _, _) => { restoreCalled = true; capturedProjectFilePath = projectFilePath.FullName; return Aspire.Cli.ExitCodeConstants.Success; } }; }); var provider = services.BuildServiceProvider(); var command = provider.GetRequiredService<RootCommand>(); var result = command.Parse($"restore --apphost {appHostFile.FullName}"); var exitCode = await result.InvokeAsync().DefaultTimeout(); Assert.Equal(Aspire.Cli.ExitCodeConstants.Success, exitCode); Assert.True(restoreCalled); Assert.Equal(appHostFile.FullName, capturedProjectFilePath); } [Fact] public async Task RestoreCommand_WithDotNetAppHostAndMissingSdk_ReturnsSdkNotInstalled() { using var workspace = TemporaryWorkspace.Create(outputHelper); var appHostFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj")); await File.WriteAllTextAsync(appHostFile.FullName, "<Project Sdk=\"Microsoft.NET.Sdk\" />"); var restoreCalled = false; var services = CliTestHelper.CreateServiceCollection(workspace, outputHelper, options => { options.DotNetSdkInstallerFactory = _ => new TestDotNetSdkInstaller { CheckAsyncCallback = _ => (false, null, "9.0.302") }; options.DotNetCliRunnerFactory = _ => new TestDotNetCliRunner { RestoreAsyncCallback = (_, _, _) => { restoreCalled = true; return Aspire.Cli.ExitCodeConstants.Success; } }; }); var provider = services.BuildServiceProvider(); var command = provider.GetRequiredService<RootCommand>(); var result = command.Parse($"restore --apphost {appHostFile.FullName}"); var exitCode = await result.InvokeAsync().DefaultTimeout(); Assert.Equal(Aspire.Cli.ExitCodeConstants.SdkNotInstalled, exitCode); Assert.False(restoreCalled); } }