File: ProjectWithReferenceTests.cs
Web Access
Project: src\tests\Aspire.Hosting.Foundry.Tests\Aspire.Hosting.Foundry.Tests.csproj (Aspire.Hosting.Foundry.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.Tests.Utils;
using Aspire.Hosting.Utils;
 
namespace Aspire.Hosting.Foundry.Tests;
 
public class ProjectWithReferenceTests
{
    [Fact]
    public async Task WithReference_InjectsFoundryProjectEndpointAsConnectionProperty()
    {
        using var builder = TestDistributedApplicationBuilder.Create();
        var project = builder.AddFoundry("test-account")
            .AddProject("test-project");
 
        var pyapp = builder.AddPythonApp("app", "./app.py", "main:app")
            .WithReference(project);
 
        builder.Build();
        var envVars = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(
            pyapp.Resource, DistributedApplicationOperation.Publish, TestServiceProvider.Instance);
 
        Assert.Contains(envVars, kvp =>
            kvp.Key == "TEST_PROJECT_URI"
            && kvp.Value == "{test-project.outputs.endpoint}");
    }
 
    [Fact]
    public async Task WithReference_InjectsApplicationInsightsAsConnectionProperty()
    {
        using var builder = TestDistributedApplicationBuilder.Create();
        var project = builder.AddFoundry("test-account")
            .AddProject("test-project");
 
        var pyapp = builder.AddPythonApp("app", "./app.py", "main:app")
            .WithReference(project);
 
        builder.Build();
        var envVars = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(
            pyapp.Resource, DistributedApplicationOperation.Publish, TestServiceProvider.Instance);
 
        Assert.Contains(envVars, kvp =>
            kvp.Key == "TEST_PROJECT_APPLICATIONINSIGHTSCONNECTIONSTRING"
            && kvp.Value == "{test-project.outputs.APPLICATION_INSIGHTS_CONNECTION_STRING}");
    }
 
    [Fact]
    public async Task WithReference_InjectsStandardConnectionString()
    {
        using var builder = TestDistributedApplicationBuilder.Create();
        var project = builder.AddFoundry("test-account")
            .AddProject("test-project");
 
        var pyapp = builder.AddPythonApp("app", "./app.py", "main:app")
            .WithReference(project);
 
        builder.Build();
        var envVars = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(
            pyapp.Resource, DistributedApplicationOperation.Publish, TestServiceProvider.Instance);
 
        // Standard connection string is also injected via ResourceBuilderExtensions.WithReference
        Assert.Contains(envVars, kvp =>
            kvp.Key.StartsWith("ConnectionStrings__", StringComparison.Ordinal));
    }
 
    [Fact]
    public async Task WithReference_DeploymentInjectsModelNameAsConnectionProperty()
    {
        using var builder = TestDistributedApplicationBuilder.Create();
        var foundry = builder.AddFoundry("test-account");
        var deployment = foundry.AddDeployment("chat", "gpt-4", "1", "OpenAI");
 
        var pyapp = builder.AddPythonApp("app", "./app.py", "main:app")
            .WithReference(deployment);
 
        builder.Build();
        var envVars = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(
            pyapp.Resource, DistributedApplicationOperation.Publish, TestServiceProvider.Instance);
 
        Assert.Contains(envVars, kvp =>
            kvp.Key == "CHAT_MODELNAME" && kvp.Value == "chat");
        Assert.Contains(envVars, kvp =>
            kvp.Key == "CHAT_FORMAT" && kvp.Value == "OpenAI");
        Assert.Contains(envVars, kvp =>
            kvp.Key == "CHAT_VERSION" && kvp.Value == "1");
        Assert.Contains(envVars, kvp =>
            kvp.Key == "CHAT_URI");
    }
}