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;
using Xunit;
 
namespace Aspire.Hosting.Tests.Publishing;
 
public class PublishingExtensionsTests
{
    private readonly InteractionService _interactionService = PublishingActivityProgressReporterTests.CreateInteractionService();
 
    [Fact]
    public async Task PublishingStepExtensions_CreateTask_WorksCorrectly()
    {
        // Arrange
        var reporter = new PublishingActivityProgressReporter(_interactionService);
        var step = await reporter.CreateStepAsync("Test Step", CancellationToken.None);
 
        // Act
        var task = await step.CreateTaskAsync("Initial status", CancellationToken.None);
 
        // Assert
        Assert.NotNull(task);
        Assert.Equal(step.Id, task.StepId);
        Assert.Equal("Initial status", task.StatusText);
        Assert.Equal(CompletionState.InProgress, task.CompletionState);
    }
 
    [Fact]
    public async Task PublishingStepExtensions_CreateTask_ThrowsWhenNoReporter()
    {
        // Arrange
        var step = new PublishingStep("test-id", "Test Step");
 
        // Act & Assert
        var exception = await Assert.ThrowsAsync<InvalidOperationException>(
            () => step.CreateTaskAsync("Initial status", CancellationToken.None));
        Assert.Equal("Cannot create task: Reporter is not set.", exception.Message);
    }
 
    [Fact]
    public async Task PublishingStepExtensions_CreateTask_WorksWithNullReporter()
    {
        // Arrange
        var reporter = NullPublishingActivityProgressReporter.Instance;
        var step = await reporter.CreateStepAsync("Test Step", CancellationToken.None);
 
        // Act
        var task = await step.CreateTaskAsync("Initial status", CancellationToken.None);
 
        // Assert
        Assert.NotNull(task);
        Assert.Equal(step.Id, task.StepId);
        Assert.Equal("Initial status", task.StatusText);
        Assert.Equal(CompletionState.InProgress, task.CompletionState);
    }
 
    [Fact]
    public async Task PublishingStepExtensions_Succeed_WorksCorrectly()
    {
        // Arrange
        var reporter = new PublishingActivityProgressReporter(_interactionService);
        var step = await reporter.CreateStepAsync("Test Step", CancellationToken.None);
 
        // Act
        var result = await step.SucceedAsync("Success message", CancellationToken.None);
 
        // Assert
        Assert.Equal(step, result);
        Assert.True(step.CompletionState != CompletionState.InProgress);
        Assert.Equal("Success message", step.CompletionText);
    }
 
    [Fact]
    public async Task PublishingTaskExtensions_UpdateStatus_WorksCorrectly()
    {
        // Arrange
        var reporter = new PublishingActivityProgressReporter(_interactionService);
        var step = await reporter.CreateStepAsync("Test Step", CancellationToken.None);
        var task = await reporter.CreateTaskAsync(step, "Initial status", CancellationToken.None);
 
        // Act
        var result = await task.UpdateStatusAsync("Updated status", CancellationToken.None);
 
        // Assert
        Assert.Equal(task, result);
        Assert.Equal("Updated status", task.StatusText);
    }
 
    [Fact]
    public async Task PublishingTaskExtensions_Succeed_WorksCorrectly()
    {
        // Arrange
        var reporter = new PublishingActivityProgressReporter(_interactionService);
        var step = await reporter.CreateStepAsync("Test Step", CancellationToken.None);
        var task = await reporter.CreateTaskAsync(step, "Initial status", CancellationToken.None);
 
        // Act
        var result = await task.SucceedAsync("Success message", CancellationToken.None);
 
        // Assert
        Assert.Equal(task, result);
        Assert.Equal(CompletionState.Completed, task.CompletionState);
        Assert.Equal("Success message", task.CompletionMessage);
    }
 
    [Fact]
    public async Task PublishingTaskExtensions_Warn_WorksCorrectly()
    {
        // Arrange
        var reporter = new PublishingActivityProgressReporter(_interactionService);
        var step = await reporter.CreateStepAsync("Test Step", CancellationToken.None);
        var task = await reporter.CreateTaskAsync(step, "Initial status", CancellationToken.None);
 
        // Act
        var result = await task.WarnAsync("Warning message", CancellationToken.None);
 
        // Assert
        Assert.Equal(task, result);
        Assert.Equal(CompletionState.CompletedWithWarning, task.CompletionState);
        Assert.Equal("Warning message", task.CompletionMessage);
    }
 
    [Fact]
    public async Task PublishingTaskExtensions_Fail_WorksCorrectly()
    {
        // Arrange
        var reporter = new PublishingActivityProgressReporter(_interactionService);
        var step = await reporter.CreateStepAsync("Test Step", CancellationToken.None);
        var task = await reporter.CreateTaskAsync(step, "Initial status", CancellationToken.None);
 
        // Act
        await task.FailAsync("Error message", CancellationToken.None);
 
        // Assert
        Assert.Equal(CompletionState.CompletedWithError, task.CompletionState);
        Assert.Equal("Error message", task.CompletionMessage);
    }
}