File: MauiProjectResourceValidationTests.cs
Web Access
Project: src\tests\Aspire.Hosting.Maui.Tests\Aspire.Hosting.Maui.Tests.csproj (Aspire.Hosting.Maui.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.Maui;
 
namespace Aspire.Hosting.Tests;
 
/// <summary>
/// Tests for AddMauiProject resource creation and input validation.
/// </summary>
public class MauiProjectResourceValidationTests
{
    [Fact]
    public void AddMauiProject_NullBuilder_ThrowsArgumentNullException()
    {
        IDistributedApplicationBuilder builder = null!;
 
        Assert.Throws<ArgumentNullException>(() =>
            builder.AddMauiProject("mauiapp", "path/to/project.csproj"));
    }
 
    [Theory]
    [InlineData(null)]
    [InlineData("")]
    public void AddMauiProject_NullOrEmptyName_ThrowsArgumentException(string? name)
    {
        var appBuilder = DistributedApplication.CreateBuilder();
 
        Assert.ThrowsAny<ArgumentException>(() =>
            appBuilder.AddMauiProject(name!, "path/to/project.csproj"));
    }
 
    [Theory]
    [InlineData(null)]
    [InlineData("")]
    public void AddMauiProject_NullOrEmptyProjectPath_ThrowsArgumentException(string? projectPath)
    {
        var appBuilder = DistributedApplication.CreateBuilder();
 
        Assert.ThrowsAny<ArgumentException>(() =>
            appBuilder.AddMauiProject("mauiapp", projectPath!));
    }
 
    [Fact]
    public void AddMauiProject_SetsProjectPathOnResource()
    {
        var projectPath = "path/to/MyMauiApp.csproj";
        var appBuilder = DistributedApplication.CreateBuilder();
 
        var maui = appBuilder.AddMauiProject("mauiapp", projectPath);
 
        Assert.Equal(projectPath, maui.Resource.ProjectPath);
    }
 
    [Fact]
    public void AddMauiProject_SetsResourceName()
    {
        var appBuilder = DistributedApplication.CreateBuilder();
 
        var maui = appBuilder.AddMauiProject("my-maui-app", "path/to/project.csproj");
 
        Assert.Equal("my-maui-app", maui.Resource.Name);
    }
 
    [Fact]
    public void AddMauiProject_ResourceIsNotAddedToAppModelResources()
    {
        var appBuilder = DistributedApplication.CreateBuilder();
 
        appBuilder.AddMauiProject("mauiapp", "path/to/project.csproj");
 
        // The MauiProjectResource should not be in the top-level resources
        // (it uses CreateResourceBuilder, not AddResource, so it stays invisible in the dashboard)
        Assert.DoesNotContain(appBuilder.Resources, r => r is MauiProjectResource);
    }
 
    [Fact]
    public void MauiProjectResource_NullProjectPath_ThrowsArgumentNullException()
    {
        Assert.Throws<ArgumentNullException>(() => new MauiProjectResource("name", null!));
    }
}