File: Pipelines\PipelineSummaryTests.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 ASPIREPIPELINES001
 
using Aspire.Hosting.Pipelines;
 
namespace Aspire.Hosting.Tests.Pipelines;
 
public class PipelineSummaryTests
{
    [Fact]
    public void Add_WithValidKeyAndValue_AddsItemToCollection()
    {
        // Arrange
        var summary = new PipelineSummary();
 
        // Act
        summary.Add("Key1", "Value1");
 
        // Assert
        Assert.Single(summary.Items);
        Assert.Equal("Key1", summary.Items[0].Key);
        Assert.Equal("Value1", summary.Items[0].Value);
    }
 
    [Fact]
    public void Add_MultipleItems_PreservesInsertionOrder()
    {
        // Arrange
        var summary = new PipelineSummary();
 
        // Act
        summary.Add("First", "1");
        summary.Add("Second", "2");
        summary.Add("Third", "3");
 
        // Assert
        Assert.Equal(3, summary.Items.Count);
        Assert.Equal("First", summary.Items[0].Key);
        Assert.Equal("Second", summary.Items[1].Key);
        Assert.Equal("Third", summary.Items[2].Key);
    }
 
    [Fact]
    public void Add_DuplicateKeys_AllowsBothInItems()
    {
        // Arrange
        var summary = new PipelineSummary();
 
        // Act
        summary.Add("Key", "Value1");
        summary.Add("Key", "Value2");
 
        // Assert
        Assert.Equal(2, summary.Items.Count);
        Assert.Equal("Value1", summary.Items[0].Value);
        Assert.Equal("Value2", summary.Items[1].Value);
    }
 
    [Theory]
    [InlineData(null)]
    [InlineData("")]
    [InlineData("   ")]
    public void Add_WithNullOrWhitespaceKey_ThrowsArgumentException(string? key)
    {
        // Arrange
        var summary = new PipelineSummary();
 
        // Act & Assert
        Assert.ThrowsAny<ArgumentException>(() => summary.Add(key!, "value"));
    }
 
    [Theory]
    [InlineData(null)]
    [InlineData("")]
    [InlineData("   ")]
    public void Add_WithNullOrWhitespaceValue_ThrowsArgumentException(string? value)
    {
        // Arrange
        var summary = new PipelineSummary();
 
        // Act & Assert
        Assert.ThrowsAny<ArgumentException>(() => summary.Add("key", value!));
    }
 
    [Fact]
    public void Items_ReturnsReadOnlyCollection()
    {
        // Arrange
        var summary = new PipelineSummary();
        summary.Add("Key", "Value");
 
        // Act
        var items = summary.Items;
 
        // Assert
        Assert.IsType<System.Collections.ObjectModel.ReadOnlyCollection<KeyValuePair<string, string>>>(items);
    }
 
    [Fact]
    public void Items_WhenEmpty_ReturnsEmptyCollection()
    {
        // Arrange
        var summary = new PipelineSummary();
 
        // Act & Assert
        Assert.Empty(summary.Items);
    }
 
    [Fact]
    public void Items_WithItems_ReturnsItemsInInsertionOrder()
    {
        // Arrange
        var summary = new PipelineSummary();
        summary.Add("Key1", "Value1");
        summary.Add("Key2", "Value2");
 
        // Act & Assert
        Assert.Equal(2, summary.Items.Count);
        Assert.Equal(new KeyValuePair<string, string>("Key1", "Value1"), summary.Items[0]);
        Assert.Equal(new KeyValuePair<string, string>("Key2", "Value2"), summary.Items[1]);
    }
 
    [Fact]
    public void Items_WithDuplicateKeys_PreservesAllEntries()
    {
        // Arrange
        var summary = new PipelineSummary();
        summary.Add("Key", "FirstValue");
        summary.Add("Key", "LastValue");
 
        // Act & Assert
        Assert.Equal(2, summary.Items.Count);
        Assert.Equal(new KeyValuePair<string, string>("Key", "FirstValue"), summary.Items[0]);
        Assert.Equal(new KeyValuePair<string, string>("Key", "LastValue"), summary.Items[1]);
    }
 
    [Fact]
    public void Add_WithUnicodeCharactersInKey_Succeeds()
    {
        // Arrange
        var summary = new PipelineSummary();
 
        // Act
        summary.Add("☁️ Target", "Azure");
        summary.Add("📦 Resource Group", "rg-test");
 
        // Assert
        Assert.Equal(2, summary.Items.Count);
        Assert.Equal("☁️ Target", summary.Items[0].Key);
        Assert.Equal("📦 Resource Group", summary.Items[1].Key);
    }
}