File: TestProgramModelTests.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.
 
using Aspire.Hosting.Dotnet;
 
namespace Aspire.Hosting.Tests;
 
[Trait("Partition", "2")]
public class TestProgramModelTests
{
    [Theory]
    [InlineData(false)]
    [InlineData(true)]
    public void TestProgramUsesDotnetProjectsWithAbsoluteFixturePaths(bool includeIntegrationServices)
    {
        using var program = TestProgram.Create<TestProgramModelTests>(includeIntegrationServices: includeIntegrationServices);
        program.Build();
 
        (IResourceBuilder<DotnetProjectResource> Builder, IProjectMetadata Metadata)[] projects =
        [
            (program.ServiceABuilder, new Projects.ServiceA()),
            (program.ServiceBBuilder, new Projects.ServiceB()),
            (program.ServiceCBuilder, new Projects.ServiceC()),
            (program.WorkerABuilder, new Projects.WorkerA())
        ];
 
        foreach (var (builder, metadata) in projects)
        {
            var project = Assert.IsType<DotnetProjectResource>(builder.Resource);
            Assert.IsAssignableFrom<IDotnetProgramResource>(project);
            Assert.True(Path.IsPathFullyQualified(project.GetProjectMetadata().ProjectPath));
            Assert.Equal(metadata.ProjectPath, project.GetProjectMetadata().ProjectPath);
        }
 
        Assert.Equal(
            [program.ServiceABuilder, program.ServiceBBuilder, program.ServiceCBuilder],
            program.ServiceProjectBuilders);
 
        if (includeIntegrationServices)
        {
            var integrationService = Assert.IsType<DotnetProjectResource>(program.IntegrationServiceABuilder?.Resource);
            Assert.Equal(new Projects.IntegrationServiceA().ProjectPath, integrationService.GetProjectMetadata().ProjectPath);
        }
        else
        {
            Assert.Null(program.IntegrationServiceABuilder);
        }
    }
}