using System.Security.Claims; using Microsoft.AspNetCore.Components.Authorization; namespace Prefab.Tests.Infrastructure; /// /// Simplified authentication provider for tests. Returns a configurable principal and works outside Blazor circuits. /// public sealed class TestAuthenticationStateProvider : AuthenticationStateProvider { private readonly object _sync = new(); private ClaimsPrincipal _principal = CreateAnonymous(); public override Task GetAuthenticationStateAsync() { ClaimsPrincipal principal; lock (_sync) { principal = _principal; } return Task.FromResult(new AuthenticationState(principal)); } public void SetPrincipal(ClaimsPrincipal? principal) { lock (_sync) { _principal = principal ?? CreateAnonymous(); } NotifyAuthenticationStateChanged(Task.FromResult(new AuthenticationState(_principal))); } public void SetAnonymous() => SetPrincipal(null); private static ClaimsPrincipal CreateAnonymous() => new(new ClaimsIdentity()); }