| File: EndpointNameAnalyzerTests.cs | Web Access |
| Project: src\tests\Aspire.Hosting.Analyzers.Tests\Aspire.Hosting.Analyzers.Tests.csproj (Aspire.Hosting.Analyzers.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 Xunit; using static Microsoft.CodeAnalysis.Testing.DiagnosticResult; namespace Aspire.Hosting.Analyzers.Tests; public class EndpointNameAnalyzerTests { [Theory] [ClassData(typeof(TestData.InvalidModelNames))] public async Task EndpointNameInvalid(string endpointName) { Assert.False(ModelName.TryValidateName("Endpoint", endpointName, out var message)); var diagnostic = AppHostAnalyzer.Diagnostics.s_modelNameMustBeValid; var test = AnalyzerTest.Create<AppHostAnalyzer>($$""" using Aspire.Hosting; var builder = DistributedApplication.CreateBuilder(args); builder.AddContainer("container", "image") .WithEndpoint(port: 1234, name: "{{endpointName}}"); """, [CompilerError(diagnostic.Id).WithLocation(6, 37).WithMessage(message)]); await test.RunAsync(); } [Theory] [ClassData(typeof(TestData.InvalidModelNames))] public async Task EndpointNameInvalidMultipleParameters(string endpointName) { Assert.False(ModelName.TryValidateName("Endpoint", $"{endpointName}-one", out var message1)); Assert.False(ModelName.TryValidateName("Endpoint", $"{endpointName}-two", out var message2)); var diagnostic = AppHostAnalyzer.Diagnostics.s_modelNameMustBeValid; var test = AnalyzerTest.Create<AppHostAnalyzer>($$""" using Aspire.Hosting; using Aspire.Hosting.ApplicationModel; var builder = DistributedApplication.CreateBuilder(args); builder.AddContainer("container", "image") .WithEndpoints( "{{endpointName}}-one", "{{endpointName}}-two"); public static class TestExtensions { public static IResourceBuilder<ContainerResource> WithEndpoints( this IResourceBuilder<ContainerResource> builder, [EndpointName] string param1Name, [EndpointName] string param2Name) { return builder; } } """, [ CompilerError(diagnostic.Id).WithLocation(8, 9).WithMessage(message1), CompilerError(diagnostic.Id).WithLocation(9, 9).WithMessage(message2) ]); await test.RunAsync(); } [Theory] [ClassData(typeof(TestData.ValidModelNames))] public async Task EndpointNameValid(string endpointName) { var test = AnalyzerTest.Create<AppHostAnalyzer>($$""" using Aspire.Hosting; var builder = DistributedApplication.CreateBuilder(args); builder.AddContainer("container", "image") .WithEndpoint(port: 1234, name: "{{endpointName}}"); """, []); await test.RunAsync(); } [Theory] [ClassData(typeof(TestData.ValidModelNames))] public async Task EndpointNameValidMultipleParameters(string endpointName) { var test = AnalyzerTest.Create<AppHostAnalyzer>($$""" using Aspire.Hosting; using Aspire.Hosting.ApplicationModel; var builder = DistributedApplication.CreateBuilder(args); builder.AddContainer("container", "image") .WithEndpoints( "{{endpointName}}-one", "{{endpointName}}-two"); public static class TestExtensions { public static IResourceBuilder<ContainerResource> WithEndpoints( this IResourceBuilder<ContainerResource> builder, [EndpointName] string param1Name, [EndpointName] string param2Name) { return builder; } } """, []); await test.RunAsync(); } }