File: CombinationsAnalyzerTests.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 CombinationsAnalyzerTests
{
    [Theory]
    [ClassData(typeof(TestData.InvalidModelNames))]
    public async Task MethodWithBothResourceAndEndpointNameParametersInvalid(string modelName)
    {
        Assert.False(ModelName.TryValidateName("Resource", $"{modelName}-resource", out var message1));
        Assert.False(ModelName.TryValidateName("Endpoint", $"{modelName}-endpoint", 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.AddMultiple(
                "{{modelName}}-resource",
                "{{modelName}}-endpoint");
 
            public static class TestExtensions
            {
                public static void AddMultiple(this IDistributedApplicationBuilder builder, [ResourceName] string param1Name, [EndpointName] string param2Name)
                {
 
                }
            }
            """,
            [
                CompilerError(diagnostic.Id).WithLocation(7, 5).WithMessage(message1),
                CompilerError(diagnostic.Id).WithLocation(8, 5).WithMessage(message2)
            ]);
 
        await test.RunAsync();
    }
 
    [Theory]
    [ClassData(typeof(TestData.InvalidModelNames))]
    public async Task AnalyzerIsResilientToParameterWithMutlipleModelNameAttributes(string modelName)
    {
        Assert.False(ModelName.TryValidateName("Resource", $"{modelName}", out var message1));
        Assert.False(ModelName.TryValidateName("Endpoint", $"{modelName}", 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.AddMultiple("{{modelName}}");
 
            public static class TestExtensions
            {
                public static void AddMultiple(this IDistributedApplicationBuilder builder, [ResourceName, EndpointName] string theName)
                {
 
                }
            }
            """,
            [
                CompilerError(diagnostic.Id).WithLocation(6, 21).WithMessage(message1),
                CompilerError(diagnostic.Id).WithLocation(6, 21).WithMessage(message2)
            ]);
 
        await test.RunAsync();
    }
}