thalos-service/tests/Thalos.Service.Application.UnitTests/RuntimeWiringTests.cs
2026-02-24 05:26:54 -06:00

74 lines
2.9 KiB
C#

using Microsoft.Extensions.DependencyInjection;
using BuildingBlock.Identity.Contracts.Requests;
using Thalos.Service.Application.Adapters;
using Thalos.Service.Application.DependencyInjection;
using Thalos.Service.Application.Grpc;
using Thalos.Service.Application.UseCases;
namespace Thalos.Service.Application.UnitTests;
public class RuntimeWiringTests
{
[Fact]
public async Task AddThalosServiceRuntime_WhenInvoked_ResolvesUseCases()
{
var services = new ServiceCollection();
services.AddThalosServiceRuntime();
using var provider = services.BuildServiceProvider();
var issueTokenUseCase = provider.GetRequiredService<IIssueIdentityTokenUseCase>();
var evaluatePolicyUseCase = provider.GetRequiredService<IEvaluateIdentityPolicyUseCase>();
var tokenResponse = await issueTokenUseCase.HandleAsync(new IssueIdentityTokenRequest("user-1", "tenant-1"));
var policyResponse = await evaluatePolicyUseCase.HandleAsync(
new EvaluateIdentityPolicyRequest("user-1", "tenant-1", "identity.token.issue"));
Assert.Equal("user-1:tenant-1:token", tokenResponse.Token);
Assert.Equal(1800, tokenResponse.ExpiresInSeconds);
Assert.True(policyResponse.IsAllowed);
}
[Fact]
public async Task AddThalosServiceRuntime_WhenSubjectMissing_ReturnsEmptyToken()
{
var services = new ServiceCollection();
services.AddThalosServiceRuntime();
using var provider = services.BuildServiceProvider();
var issueTokenUseCase = provider.GetRequiredService<IIssueIdentityTokenUseCase>();
var tokenResponse = await issueTokenUseCase.HandleAsync(
new IssueIdentityTokenRequest("missing-user", "tenant-1"));
Assert.Equal(string.Empty, tokenResponse.Token);
Assert.Equal(0, tokenResponse.ExpiresInSeconds);
}
[Fact]
public void IdentityPolicyGrpcContractAdapter_WhenMapped_PreservesValues()
{
var adapter = new IdentityPolicyGrpcContractAdapter();
var useCaseRequest = new EvaluateIdentityPolicyRequest("user-2", "tenant-2", "identity.policy.evaluate");
var grpcContract = adapter.ToGrpc(useCaseRequest);
var roundtrip = adapter.FromGrpc(grpcContract);
Assert.Equal("user-2", roundtrip.SubjectId);
Assert.Equal("tenant-2", roundtrip.TenantId);
Assert.Equal("identity.policy.evaluate", roundtrip.PermissionCode);
}
[Fact]
public void IdentityPolicyGrpcContractAdapter_WhenFromGrpc_UsesExpectedContractShape()
{
var adapter = new IdentityPolicyGrpcContractAdapter();
var contract = new EvaluateIdentityPolicyGrpcContract("subject-9", "tenant-9", "identity.token.issue");
var request = adapter.FromGrpc(contract);
Assert.Equal("subject-9", request.SubjectId);
Assert.Equal("tenant-9", request.TenantId);
Assert.Equal("identity.token.issue", request.PermissionCode);
}
}