File: Publishing\PublishingExtensionsTests.cs
Web Access
Project: src\tests\Aspire.Hosting.Tests\Aspire.Hosting.Tests.csproj (Aspire.Hosting.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
#pragma warning disable ASPIREPUBLISHERS001
 
using Aspire.Hosting.Publishing;
 
namespace Aspire.Hosting.Tests.Publishing;
 
public class PublishingExtensionsTests
{
    private readonly InteractionService _interactionService = PublishingActivityReporterTests.CreateInteractionService();
 
    [Fact]
    public async Task PublishingStepExtensions_CreateTask_WorksCorrectly()
    {
        // Arrange
        var reporter = new PublishingActivityReporter(_interactionService);
        await using var step = await reporter.CreateStepAsync("Test Step", CancellationToken.None);
 
        // Act
        var task = await step.CreateTaskAsync("Initial status", CancellationToken.None);
 
        // Assert
        Assert.NotNull(task);
        await using var stepInternal = Assert.IsType<PublishingStep>(step);
        var taskInternal = Assert.IsType<PublishingTask>(task);
        Assert.Equal(stepInternal.Id, taskInternal.StepId);
        Assert.Equal("Initial status", taskInternal.StatusText);
        Assert.Equal(CompletionState.InProgress, taskInternal.CompletionState);
    }
 
    [Fact]
    public async Task PublishingStepExtensions_Succeed_WorksCorrectly()
    {
        // Arrange
        var reporter = new PublishingActivityReporter(_interactionService);
        await using var step = await reporter.CreateStepAsync("Test Step", CancellationToken.None);
 
        // Act
        var result = await step.SucceedAsync("Success message", CancellationToken.None);
 
        // Assert
        Assert.Equal(step, result);
        // Cast to internal type to verify internal state for testing
        await using var stepInternal = Assert.IsType<PublishingStep>(step);
        Assert.NotEqual(CompletionState.InProgress, stepInternal.CompletionState);
        Assert.Equal("Success message", stepInternal.CompletionText);
    }
 
    [Fact]
    public async Task PublishingTaskExtensions_UpdateStatus_WorksCorrectly()
    {
        // Arrange
        var reporter = new PublishingActivityReporter(_interactionService);
        await using var step = await reporter.CreateStepAsync("Test Step", CancellationToken.None);
        var task = await step.CreateTaskAsync("Initial status", CancellationToken.None);
 
        // Act
        var result = await task.UpdateStatusAsync("Updated status", CancellationToken.None);
 
        // Assert
        Assert.Equal(task, result);
 
        // Cast to internal type to verify internal state for testing
        var taskInternal = Assert.IsType<PublishingTask>(task);
        Assert.Equal("Updated status", taskInternal.StatusText);
    }
 
    [Fact]
    public async Task PublishingTaskExtensions_Succeed_WorksCorrectly()
    {
        // Arrange
        var reporter = new PublishingActivityReporter(_interactionService);
        await using var step = await reporter.CreateStepAsync("Test Step", CancellationToken.None);
        var task = await step.CreateTaskAsync("Initial status", CancellationToken.None);
 
        // Act
        var result = await task.SucceedAsync("Success message", CancellationToken.None);
 
        // Assert
        Assert.Equal(task, result);
        var taskInternal = Assert.IsType<PublishingTask>(task);
        Assert.Equal(CompletionState.Completed, taskInternal.CompletionState);
        Assert.Equal("Success message", taskInternal.CompletionMessage);
    }
 
    [Fact]
    public async Task PublishingTaskExtensions_Warn_WorksCorrectly()
    {
        // Arrange
        var reporter = new PublishingActivityReporter(_interactionService);
        await using var step = await reporter.CreateStepAsync("Test Step", CancellationToken.None);
        var task = await step.CreateTaskAsync("Initial status", CancellationToken.None);
 
        // Act
        var result = await task.WarnAsync("Warning message", CancellationToken.None);
 
        // Assert
        Assert.Equal(task, result);
        var taskInternal = Assert.IsType<PublishingTask>(task);
        Assert.Equal(CompletionState.CompletedWithWarning, taskInternal.CompletionState);
        Assert.Equal("Warning message", taskInternal.CompletionMessage);
    }
 
    [Fact]
    public async Task PublishingTaskExtensions_Fail_WorksCorrectly()
    {
        // Arrange
        var reporter = new PublishingActivityReporter(_interactionService);
        await using var step = await reporter.CreateStepAsync("Test Step", CancellationToken.None);
        var task = await step.CreateTaskAsync("Initial status", CancellationToken.None);
 
        // Act
        await task.FailAsync("Error message", CancellationToken.None);
 
        // Assert
        var taskInternal = Assert.IsType<PublishingTask>(task);
        Assert.Equal(CompletionState.CompletedWithError, taskInternal.CompletionState);
        Assert.Equal("Error message", taskInternal.CompletionMessage);
    }
}