Added skorubauserservice tests

This commit is contained in:
2026-10-11 07:43:51 +02:00
parent 381d5b7e94
commit 9a0371fb08
6 changed files with 181 additions and 43 deletions
@@ -1,22 +1,11 @@
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;
/// <summary>
/// Integration tests for SkorubaUserService.GetUserRolesAsync method.
///
/// These tests hit the actual Skoruba API environment.
/// Requires the following configuration:
/// - MachineIdentitySettings with valid ClientId and ClientSecret from user secrets
/// - SkorubaApi connection string pointing to the API endpoint
/// - Network access to the Skoruba API
///
/// To run these tests:
/// dotnet test --filter "FullyQualifiedName~SkorubaUserServiceGetUserRolesIntegrationTests"
/// </summary>
public class SkorubaUserServiceGetUserRolesIntegrationTests
{
private readonly ISkorubaUserService _skorubaService;
@@ -51,9 +40,6 @@ public class SkorubaUserServiceGetUserRolesIntegrationTests
_httpClientFactory = serviceProvider.GetRequiredService<IHttpClientFactory>();
}
/// <summary>
/// Integration test: Verify HttpClient is properly configured with SkorubaHttpClient name.
/// </summary>
[DebugOnlyFact]
public void HttpClientFactory_HasSkorubaHttpClientConfigured()
{
@@ -65,15 +51,72 @@ public class SkorubaUserServiceGetUserRolesIntegrationTests
Assert.NotNull(httpClient.BaseAddress);
}
/// <summary>
/// Integration test: Verify that the service properly formats API requests.
/// Uses a fake/invalid user ID to test the HTTP request flow.
/// </summary>
[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;
@@ -85,9 +128,88 @@ public class SkorubaUserServiceGetUserRolesIntegrationTests
Assert.Empty(result.Errors);
}
/// <summary>
/// Integration test: Verify cancellation token is respected.
/// </summary>
[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()
{