74 lines
2.9 KiB
C#
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);
|
|
}
|
|
}
|