File: EndpointHttpContextExtensionsTests.cs
Web Access
Project: src\src\Http\Http.Abstractions\test\Microsoft.AspNetCore.Http.Abstractions.Tests.csproj (Microsoft.AspNetCore.Http.Abstractions.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Microsoft.AspNetCore.Http.Features;
 
namespace Microsoft.AspNetCore.Http.Abstractions.Tests;
 
public class EndpointHttpContextExtensionsTests
{
    [Fact]
    public void GetEndpoint_ContextWithoutFeature_ReturnsNull()
    {
        // Arrange
        var context = new DefaultHttpContext();
 
        // Act
        var endpoint = context.GetEndpoint();
 
        // Assert
        Assert.Null(endpoint);
    }
 
    [Fact]
    public void GetEndpoint_ContextWithFeatureAndNullEndpoint_ReturnsNull()
    {
        // Arrange
        var context = new DefaultHttpContext();
        context.Features.Set<IEndpointFeature>(new EndpointFeature
        {
            Endpoint = null
        });
 
        // Act
        var endpoint = context.GetEndpoint();
 
        // Assert
        Assert.Null(endpoint);
    }
 
    [Fact]
    public void GetEndpoint_ContextWithFeatureAndEndpoint_ReturnsEndpoint()
    {
        // Arrange
        var context = new DefaultHttpContext();
        var initial = new Endpoint(c => Task.CompletedTask, EndpointMetadataCollection.Empty, "Test endpoint");
        context.Features.Set<IEndpointFeature>(new EndpointFeature
        {
            Endpoint = initial
        });
 
        // Act
        var endpoint = context.GetEndpoint();
 
        // Assert
        Assert.Equal(initial, endpoint);
    }
 
    [Fact]
    public void SetEndpoint_NullOnContextWithoutFeature_NoFeatureSet()
    {
        // Arrange
        var context = new DefaultHttpContext();
 
        // Act
        context.SetEndpoint(null);
 
        // Assert
        Assert.Null(context.Features.Get<IEndpointFeature>());
    }
 
    [Fact]
    public void SetEndpoint_EndpointOnContextWithoutFeature_FeatureWithEndpointSet()
    {
        // Arrange
        var context = new DefaultHttpContext();
 
        // Act
        var endpoint = new Endpoint(c => Task.CompletedTask, EndpointMetadataCollection.Empty, "Test endpoint");
        context.SetEndpoint(endpoint);
 
        // Assert
        var feature = context.Features.Get<IEndpointFeature>();
        Assert.NotNull(feature);
        Assert.Equal(endpoint, context.GetEndpoint());
    }
 
    [Fact]
    public void SetEndpoint_EndpointOnContextWithFeature_EndpointSetOnExistingFeature()
    {
        // Arrange
        var context = new DefaultHttpContext();
        var initialEndpoint = new Endpoint(c => Task.CompletedTask, EndpointMetadataCollection.Empty, "Test endpoint");
        var initialFeature = new EndpointFeature
        {
            Endpoint = initialEndpoint
        };
        context.Features.Set<IEndpointFeature>(initialFeature);
 
        // Act
        var endpoint = new Endpoint(c => Task.CompletedTask, EndpointMetadataCollection.Empty, "Test endpoint");
        context.SetEndpoint(endpoint);
 
        // Assert
        var feature = context.Features.Get<IEndpointFeature>();
        Assert.Equal(initialFeature, feature);
        Assert.Equal(endpoint, context.GetEndpoint());
    }
 
    [Fact]
    public void SetEndpoint_NullOnContextWithFeature_NullSetOnExistingFeature()
    {
        // Arrange
        var context = new DefaultHttpContext();
        var initialEndpoint = new Endpoint(c => Task.CompletedTask, EndpointMetadataCollection.Empty, "Test endpoint");
        var initialFeature = new EndpointFeature
        {
            Endpoint = initialEndpoint
        };
        context.Features.Set<IEndpointFeature>(initialFeature);
 
        // Act
        context.SetEndpoint(null);
 
        // Assert
        var feature = context.Features.Get<IEndpointFeature>();
        Assert.Equal(initialFeature, feature);
        Assert.Null(context.GetEndpoint());
    }
 
    [Fact]
    public void SetAndGetEndpoint_Roundtrip_EndpointIsRoundtrip()
    {
        // Arrange
        var context = new DefaultHttpContext();
        var initialEndpoint = new Endpoint(c => Task.CompletedTask, EndpointMetadataCollection.Empty, "Test endpoint");
 
        // Act
        context.SetEndpoint(initialEndpoint);
        var endpoint = context.GetEndpoint();
 
        // Assert
        Assert.Equal(initialEndpoint, endpoint);
    }
 
    private class EndpointFeature : IEndpointFeature
    {
        public Endpoint? Endpoint { get; set; }
    }
}