229 lines
7.4 KiB
C#
229 lines
7.4 KiB
C#
using PostFundManagement.Application.Extensions;
|
|
using PostFundManagement.Domain.Abstractions;
|
|
using PostFundManagement.Domain.Models.Security;
|
|
using PostFundManagement.Infrastructure.Database.Services;
|
|
using static PostFundManagement.Domain.Extensions.Constants;
|
|
|
|
namespace PostFundManagement.Tests;
|
|
|
|
public class SkorubaUserServiceGetUserRolesIntegrationTests
|
|
{
|
|
private readonly ISkorubaUserService _skorubaService;
|
|
private readonly IHttpClientFactory _httpClientFactory;
|
|
|
|
public SkorubaUserServiceGetUserRolesIntegrationTests()
|
|
{
|
|
var services = new ServiceCollection();
|
|
|
|
// Load configuration from environment and secrets
|
|
var configuration = new ConfigurationBuilder()
|
|
.AddJsonFile("appsettings.json", optional: true)
|
|
.AddUserSecrets(Assembly.GetExecutingAssembly(), optional: true)
|
|
.AddEnvironmentVariables()
|
|
.Build();
|
|
|
|
services.AddSingleton(configuration);
|
|
services.AddHttpClient();
|
|
|
|
// Register the Skoruba HTTP client with the actual DI configuration
|
|
services.AddSkorubaApiService(configuration)
|
|
.AddRegisterServicesWithCaching(configuration)
|
|
.AddEndpointAndServiceCaching(configuration)
|
|
.AddSharedServices()
|
|
.AddHashServices(configuration)
|
|
.AddApplicationDbContext(configuration)
|
|
.AddHttpContextAccessor()
|
|
.AddTransient<ITenantContextService, TenantContextService>();
|
|
|
|
var serviceProvider = services.BuildServiceProvider();
|
|
_skorubaService = serviceProvider.GetRequiredService<ISkorubaUserService>();
|
|
_httpClientFactory = serviceProvider.GetRequiredService<IHttpClientFactory>();
|
|
}
|
|
|
|
[DebugOnlyFact]
|
|
public void HttpClientFactory_HasSkorubaHttpClientConfigured()
|
|
{
|
|
// Act
|
|
var httpClient = _httpClientFactory.CreateClient(SkorubaHttpClient);
|
|
|
|
// Assert
|
|
Assert.NotNull(httpClient);
|
|
Assert.NotNull(httpClient.BaseAddress);
|
|
}
|
|
|
|
[DebugOnlyFact]
|
|
public async Task CreateUserAsync_MustSucced_WithErrorMessage()
|
|
{
|
|
// Arrange
|
|
var newUser = new CreateUserRequest
|
|
{
|
|
UserName = "testuser",
|
|
Email = "testuser@example.com",
|
|
EmailConfirmed = true,
|
|
};
|
|
|
|
// Act
|
|
var result = await _skorubaService.CreateUserAsync(newUser);
|
|
|
|
// Assert
|
|
Assert.True(result.IsSuccess, result.Errors.FirstOrDefault()?.Message);
|
|
Assert.Empty(result.Errors);
|
|
}
|
|
|
|
[DebugOnlyFact]
|
|
public async Task DeleteUserAsync_MustSucced_WithErrorMessage()
|
|
{
|
|
// Arrange
|
|
var userId = Guid.Parse("3b001832-c78d-4705-9bc2-0f2f2ebb35b7");
|
|
|
|
// Act
|
|
var result = await _skorubaService.RemoveUserAsync(userId);
|
|
|
|
// Assert
|
|
Assert.True(result.IsSuccess, result.Errors.FirstOrDefault()?.Message);
|
|
Assert.Empty(result.Errors);
|
|
}
|
|
|
|
[DebugOnlyFact]
|
|
public async Task LockoutUserAsync_MustSucced_WithErrorMessage()
|
|
{
|
|
// Arrange
|
|
var userId = Guid.Parse("285df6e4-c0f9-4c7c-8da7-b3867ffe1880");
|
|
|
|
// Act
|
|
var result = await _skorubaService.SetUserLockoutAsync(userId, true);
|
|
|
|
// Assert
|
|
Assert.True(result.IsSuccess, result.Errors.FirstOrDefault()?.Message);
|
|
Assert.Empty(result.Errors);
|
|
}
|
|
|
|
[DebugOnlyFact]
|
|
public async Task UnlockUserAsync_MustSucced_WithErrorMessage()
|
|
{
|
|
// Arrange
|
|
var userId = Guid.Parse("285df6e4-c0f9-4c7c-8da7-b3867ffe1880");
|
|
|
|
// Act
|
|
var result = await _skorubaService.SetUserLockoutAsync(userId, false);
|
|
|
|
// Assert
|
|
Assert.True(result.IsSuccess, result.Errors.FirstOrDefault()?.Message);
|
|
Assert.Empty(result.Errors);
|
|
}
|
|
|
|
[DebugOnlyFact]
|
|
public async Task GetUserRolesAsync_SendsProperlyFormattedRequest()
|
|
{
|
|
// Arrange
|
|
var userId = Guid.Parse("6059f1e4-6a41-4447-a546-86ece5102004");
|
|
//var userId = Guid.Parse("285df6e4-c0f9-4c7c-8da7-b3867ffe1880");
|
|
var page = 1;
|
|
var pageSize = 25;
|
|
|
|
// Act
|
|
var result = await _skorubaService.GetUserRolesAsync(userId, page, pageSize);
|
|
|
|
// Assert
|
|
Assert.True(result.IsSuccess, result.Errors.FirstOrDefault()?.Message);
|
|
Assert.Empty(result.Errors);
|
|
}
|
|
|
|
[DebugOnlyFact]
|
|
public async Task AddUserRoleAsync_MustSucced_WithErrorMessage()
|
|
{
|
|
// Arrange
|
|
var userId = Guid.Parse("285df6e4-c0f9-4c7c-8da7-b3867ffe1880");
|
|
var roleId = Guid.Parse("34b03edc-cda4-4380-b7a5-3310933b75ab"); // Contributor role ID
|
|
|
|
// Act
|
|
var result = await _skorubaService.AddRoleAsync(userId, roleId);
|
|
|
|
// Assert
|
|
Assert.True(result.IsSuccess, result.Errors.FirstOrDefault()?.Message);
|
|
Assert.Empty(result.Errors);
|
|
}
|
|
|
|
[DebugOnlyFact]
|
|
public async Task RemoveUserRoleAsync_MustSucced_WithErrorMessage()
|
|
{
|
|
// Arrange
|
|
var userId = Guid.Parse("285df6e4-c0f9-4c7c-8da7-b3867ffe1880");
|
|
var roleId = Guid.Parse("34b03edc-cda4-4380-b7a5-3310933b75ab"); // Contributor role ID
|
|
|
|
// Act
|
|
var result = await _skorubaService.RemoveRoleAsync(userId, roleId);
|
|
|
|
// Assert
|
|
Assert.True(result.IsSuccess, result.Errors.FirstOrDefault()?.Message);
|
|
Assert.Empty(result.Errors);
|
|
}
|
|
|
|
[DebugOnlyFact]
|
|
public async Task GetUserClaimAsync_MustSucced_WithErrorMessage()
|
|
{
|
|
// Arrange
|
|
var userId = Guid.Parse("285df6e4-c0f9-4c7c-8da7-b3867ffe1880");
|
|
var page = 1;
|
|
var pageSize = 25;
|
|
|
|
// Act
|
|
var result = await _skorubaService.GetUserClaimsAsync(userId, page, pageSize);
|
|
|
|
// Assert
|
|
Assert.True(result.IsSuccess, result.Errors.FirstOrDefault()?.Message);
|
|
Assert.Empty(result.Errors);
|
|
}
|
|
|
|
[DebugOnlyFact]
|
|
public async Task AddUserClaimAsync_MustSucced_WithErrorMessage()
|
|
{
|
|
// Arrange
|
|
var userId = Guid.Parse("285df6e4-c0f9-4c7c-8da7-b3867ffe1880");
|
|
var claimType = "test-claim";
|
|
var claimValue = "test-value";
|
|
|
|
// Act
|
|
var result = await _skorubaService.AddClaimAsync(userId, claimType, claimValue);
|
|
|
|
// Assert
|
|
Assert.True(result.IsSuccess, result.Errors.FirstOrDefault()?.Message);
|
|
Assert.Empty(result.Errors);
|
|
}
|
|
|
|
[DebugOnlyFact]
|
|
public async Task RemoveUserClaimAsync_MustSucced_WithErrorMessage()
|
|
{
|
|
// Arrange
|
|
var userId = Guid.Parse("285df6e4-c0f9-4c7c-8da7-b3867ffe1880");
|
|
var claimType = "test-claim";
|
|
|
|
var userClaimsResult = await _skorubaService.GetUserClaimsAsync(userId);
|
|
var matchingClaim = userClaimsResult.Value?.FirstOrDefault(c => c.ClaimType == claimType);
|
|
|
|
Assert.NotNull(matchingClaim);
|
|
|
|
// Act
|
|
var result = await _skorubaService.RemoveClaimAsync(userId, matchingClaim!.ClaimId!.Value);
|
|
|
|
// Assert
|
|
Assert.True(result.IsSuccess, result.Errors.FirstOrDefault()?.Message);
|
|
Assert.Empty(result.Errors);
|
|
}
|
|
|
|
[DebugOnlyFact]
|
|
public async Task GetUserRolesAsync_RespectsCancellationToken()
|
|
{
|
|
// Arrange
|
|
var userId = Guid.NewGuid();
|
|
var cts = new CancellationTokenSource();
|
|
cts.Cancel();
|
|
|
|
// Act & Assert
|
|
await Assert.ThrowsAsync<OperationCanceledException>(async () =>
|
|
{
|
|
await _skorubaService.GetUserRolesAsync(userId, cancellationToken: cts.Token);
|
|
});
|
|
}
|
|
}
|