File: Circuits\ServerAuthenticationStateProviderTest.cs
Web Access
Project: src\src\Components\Server\test\Microsoft.AspNetCore.Components.Server.Tests.csproj (Microsoft.AspNetCore.Components.Server.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.Security.Claims;
using Microsoft.AspNetCore.Components.Authorization;
 
namespace Microsoft.AspNetCore.Components.Server.Tests.Circuits;
 
public class ServerAuthenticationStateProviderTest
{
    [Fact]
    public async Task CannotProvideAuthenticationStateBeforeInitialization()
    {
        await Assert.ThrowsAsync<InvalidOperationException>(() =>
            new ServerAuthenticationStateProvider()
                .GetAuthenticationStateAsync());
    }
 
    [Fact]
    public async Task SuppliesAuthenticationStateWithFixedUser()
    {
        // Arrange
        var user = new ClaimsPrincipal();
        var provider = new ServerAuthenticationStateProvider();
 
        // Act 1
        var expectedAuthenticationState1 = new AuthenticationState(user);
        provider.SetAuthenticationState(Task.FromResult(expectedAuthenticationState1));
 
        // Assert 1
        var actualAuthenticationState1 = await provider.GetAuthenticationStateAsync();
        Assert.NotNull(actualAuthenticationState1);
        Assert.Same(expectedAuthenticationState1, actualAuthenticationState1);
 
        // Act 2: Show we can update it further
        var expectedAuthenticationState2 = new AuthenticationState(user);
        provider.SetAuthenticationState(Task.FromResult(expectedAuthenticationState2));
 
        // Assert 2
        var actualAuthenticationState2 = await provider.GetAuthenticationStateAsync();
        Assert.NotNull(actualAuthenticationState2);
        Assert.NotSame(actualAuthenticationState1, actualAuthenticationState2);
        Assert.Same(expectedAuthenticationState2, actualAuthenticationState2);
    }
}