| File: ProjectRebuilderResourceTests.cs | Web Access |
| Project: src\tests\Aspire.Hosting.Tests\Aspire.Hosting.Tests.csproj (Aspire.Hosting.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #pragma warning disable ASPIREPROJECTS001 using Aspire.Hosting.Testing; using Aspire.Hosting.Tests.Utils; using Aspire.Hosting.Utils; using Microsoft.Extensions.DependencyInjection; namespace Aspire.Hosting.Tests; [Trait("Partition", "2")] public class ProjectRebuilderResourceTests { [Fact] public async Task AddProjectRebuilderUsesConfiguredBuildConfiguration() { using var builder = CreateBuilder(); var versionProvider = UseDotnetSdkVersion(builder, "11.0.100-rc.1"); var project = builder.AddProject<Projects.ServiceA>("servicea", options => options.ExcludeLaunchProfile = true); var launchDefaults = Assert.Single(project.Resource.Annotations.OfType<ProjectLaunchDefaultsAnnotation>()); launchDefaults.BuildConfiguration = "Release"; var rebuilder = Assert.Single(builder.Resources.OfType<ProjectRebuilderResource>()); await using var app = builder.Build(); await EventingTestHelpers.SubscribeEventingSubscribersAsync( app, TestContext.Current.CancellationToken); await builder.Eventing.PublishAsync( new BeforeResourceStartedEvent(rebuilder, app.Services), TestContext.Current.CancellationToken); // Repeated start events must not add another switch or repeat the SDK probe. await builder.Eventing.PublishAsync( new BeforeResourceStartedEvent(rebuilder, app.Services), TestContext.Current.CancellationToken); var args = await ArgumentEvaluator.GetArgumentListAsync(rebuilder, app.Services); Assert.Equal( [ "build", project.Resource.GetProjectMetadata().ProjectPath, "-mt", "--configuration", "Release" ], args); Assert.Equal(1, versionProvider.CallCount); Assert.Equal(rebuilder.WorkingDirectory, Assert.Single(versionProvider.WorkingDirectories)); } [Fact] public async Task AddProjectRebuilderOmitsConfigurationWhenAppHostConfigurationIsUnavailable() { using var builder = CreateBuilder(); UseDotnetSdkVersion(builder, "11.0.100-preview.7.25380.108"); var project = builder.AddProject<Projects.ServiceA>("servicea", options => options.ExcludeLaunchProfile = true); var launchDefaults = Assert.Single(project.Resource.Annotations.OfType<ProjectLaunchDefaultsAnnotation>()); launchDefaults.BuildConfiguration = null; var rebuilder = Assert.Single(builder.Resources.OfType<ProjectRebuilderResource>()); await using var app = builder.Build(); await EventingTestHelpers.SubscribeEventingSubscribersAsync( app, TestContext.Current.CancellationToken); await builder.Eventing.PublishAsync( new BeforeResourceStartedEvent(rebuilder, app.Services), TestContext.Current.CancellationToken); var args = await ArgumentEvaluator.GetArgumentListAsync(rebuilder, app.Services); Assert.Equal( [ "build", project.Resource.GetProjectMetadata().ProjectPath ], args); } private static IDistributedApplicationTestingBuilder CreateBuilder() { return TestDistributedApplicationBuilder.Create(); } private static TestDotnetSdkVersionProvider UseDotnetSdkVersion( IDistributedApplicationBuilder builder, string? version) { var provider = new TestDotnetSdkVersionProvider(version); builder.Services.AddSingleton<IDotnetSdkVersionProvider>(provider); return provider; } }