| File: Publishing\BicepGenerationMultiResourceTests.cs | Web Access |
| Project: src\tests\Aspire.Hosting.Radius.Tests\Aspire.Hosting.Radius.Tests.csproj (Aspire.Hosting.Radius.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.ApplicationModel; using Aspire.Hosting.Radius.Publishing; using Aspire.Hosting.Utils; using Microsoft.Extensions.DependencyInjection; namespace Aspire.Hosting.Radius.Tests.Publishing; public class BicepGenerationMultiResourceTests { [Fact] public void MultipleResources_AllResourceTypesPresent() { using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); builder.AddRadiusEnvironment("myenv"); builder.AddRedis("cache"); builder.AddSqlServer("sqlserver"); builder.AddMongoDB("mongo"); builder.AddRabbitMQ("messaging"); builder.AddContainer("api", "myapp/api", "latest"); using var app = builder.Build(); var model = app.Services.GetRequiredService<DistributedApplicationModel>(); var radiusEnv = model.Resources.OfType<RadiusEnvironmentResource>().First(); RadiusTestHelper.AttachDeploymentTargets(radiusEnv, model); var context = new RadiusBicepPublishingContext(radiusEnv); var bicep = context.GenerateBicep(model); // Each resource type instance should be present // Note: Redis, MongoDB, and RabbitMQ use legacy fallback types per ResourceTypeMapper Assert.Contains("Applications.Datastores/redisCaches@2023-10-01-preview", bicep); Assert.Contains("Radius.Data/sqlDatabases@2025-08-01-preview", bicep); Assert.Contains("Applications.Datastores/mongoDatabases@2023-10-01-preview", bicep); Assert.Contains("Applications.Messaging/rabbitMQQueues@2023-10-01-preview", bicep); } [Fact] public void MultipleResources_RecipePackContainsAllTypes() { using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); builder.AddRadiusEnvironment("myenv"); builder.AddRedis("cache"); builder.AddSqlServer("sqlserver"); builder.AddContainer("api", "myapp/api", "latest"); using var app = builder.Build(); var model = app.Services.GetRequiredService<DistributedApplicationModel>(); var radiusEnv = model.Resources.OfType<RadiusEnvironmentResource>().First(); RadiusTestHelper.AttachDeploymentTargets(radiusEnv, model); var context = new RadiusBicepPublishingContext(radiusEnv); var bicep = context.GenerateBicep(model); // Recipe pack should have entries for each resource type Assert.Contains("ghcr.io/radius-project/recipes/local-dev/rediscaches:latest", bicep); Assert.Contains("ghcr.io/radius-project/recipes/local-dev/sqldatabases:latest", bicep); } [Fact] public void MultipleResources_EachHasApplicationReference() { using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); builder.AddRadiusEnvironment("myenv"); builder.AddRedis("cache"); builder.AddContainer("api", "myapp/api", "latest"); using var app = builder.Build(); var model = app.Services.GetRequiredService<DistributedApplicationModel>(); var radiusEnv = model.Resources.OfType<RadiusEnvironmentResource>().First(); RadiusTestHelper.AttachDeploymentTargets(radiusEnv, model); var context = new RadiusBicepPublishingContext(radiusEnv); var bicep = context.GenerateBicep(model); // Resources should reference the application Assert.Contains("application: app.id", bicep); } [Fact] public void MultipleResources_EnvironmentReferencesRecipePack() { using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); builder.AddRadiusEnvironment("myenv"); builder.AddRedis("cache"); builder.AddContainer("api", "myapp/api", "latest"); using var app = builder.Build(); var model = app.Services.GetRequiredService<DistributedApplicationModel>(); var radiusEnv = model.Resources.OfType<RadiusEnvironmentResource>().First(); RadiusTestHelper.AttachDeploymentTargets(radiusEnv, model); var context = new RadiusBicepPublishingContext(radiusEnv); var bicep = context.GenerateBicep(model); // Environment should reference recipe pack Assert.Contains("recipepack.id", bicep); } [Fact] public void MultipleContainers_AllContainersPresent() { using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); builder.AddRadiusEnvironment("myenv"); builder.AddContainer("frontend", "myapp/frontend", "latest"); builder.AddContainer("backend", "myapp/backend", "latest"); using var app = builder.Build(); var model = app.Services.GetRequiredService<DistributedApplicationModel>(); var radiusEnv = model.Resources.OfType<RadiusEnvironmentResource>().First(); RadiusTestHelper.AttachDeploymentTargets(radiusEnv, model); var context = new RadiusBicepPublishingContext(radiusEnv); var bicep = context.GenerateBicep(model); Assert.Contains("name: 'frontend'", bicep); Assert.Contains("name: 'backend'", bicep); } }