File: Migrations\PendingMigrationsCheckTests.cs
Web Access
Project: src\tests\Aspire.Cli.Tests\Aspire.Cli.Tests.csproj (Aspire.Cli.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Text.Json.Nodes;
using Aspire.Cli.Migrations;
using Aspire.Cli.Tests.TestServices;
using Aspire.Cli.Utils.EnvironmentChecker;
using Microsoft.Extensions.Logging.Abstractions;
 
namespace Aspire.Cli.Tests.Migrations;
 
public class PendingMigrationsCheckTests
{
    [Fact]
    public void Order_Is102()
    {
        var check = new PendingMigrationsCheck([], NullLogger<PendingMigrationsCheck>.Instance);
 
        Assert.Equal(102, check.Order);
    }
 
    [Fact]
    public async Task CheckAsync_WithNoMigrations_ReturnsEmpty()
    {
        var check = new PendingMigrationsCheck([], NullLogger<PendingMigrationsCheck>.Instance);
 
        var results = await check.CheckAsync();
 
        Assert.Empty(results);
    }
 
    [Fact]
    public async Task CheckAsync_WithApplicableMigration_ReturnsWarning()
    {
        var descriptor = new MigrationDescriptor
        {
            Title = "Migrate the thing",
            Detail = "The thing needs migrating",
            Metadata = new JsonObject { ["language"] = "typescript" }
        };
        var migration = new TestMigration("stub-migration", 100, descriptor);
        var check = new PendingMigrationsCheck([migration], NullLogger<PendingMigrationsCheck>.Instance);
 
        var results = await check.CheckAsync();
 
        var result = Assert.Single(results);
        Assert.Equal(EnvironmentCheckCategories.AppHost, result.Category);
        Assert.Equal("stub-migration", result.Name);
        Assert.Equal(EnvironmentCheckStatus.Warning, result.Status);
        Assert.Equal("The thing needs migrating", result.Message);
        Assert.NotNull(result.Fix);
        Assert.Same(descriptor.Metadata, result.Metadata);
    }
 
    [Fact]
    public async Task CheckAsync_WithNonApplicableMigration_ReturnsEmpty()
    {
        var migration = new TestMigration("stub-migration", 100, descriptor: null);
        var check = new PendingMigrationsCheck([migration], NullLogger<PendingMigrationsCheck>.Instance);
 
        var results = await check.CheckAsync();
 
        Assert.Empty(results);
    }
 
    [Fact]
    public async Task CheckAsync_WithFailingMigration_SkipsItAndContinues()
    {
        var failing = new TestMigration("failing", 100, descriptor: null, throwOnDetect: true);
        var applicable = new TestMigration("applicable", 200, new MigrationDescriptor
        {
            Title = "Apply me",
            Detail = "Detail message"
        });
        var check = new PendingMigrationsCheck([failing, applicable], NullLogger<PendingMigrationsCheck>.Instance);
 
        var results = await check.CheckAsync();
 
        var result = Assert.Single(results);
        Assert.Equal("applicable", result.Name);
    }
}