Added skoruba user service integration test

This commit is contained in:
2026-10-10 15:31:36 +02:00
parent 343f405982
commit 8eca793f5f
12 changed files with 248 additions and 41 deletions
@@ -4,12 +4,12 @@ using PostFundManagement.Domain.Models.Security;
namespace PostFundManagement.Infrastructure.Security;
public class SkorubaUserService([FromKeyedServices(SkorubaHttpClient)] IHttpClientFactory httpClientFactory) : ISkorubaUserService
public class SkorubaUserService(IHttpClientFactory httpClientFactory) : ISkorubaUserService
{
public async Task<Result<string>> CreateUserAsync(CreateUserRequest request, Guid userId, CancellationToken cancellationToken = default) =>
await Result.Try((Func<Task<Result<string>>>)(async () =>
{
var httpClient = httpClientFactory.CreateClient();
var httpClient = httpClientFactory.CreateClient(SkorubaHttpClient);
var response = await httpClient.PostAsJsonAsync("api/users", request, cancellationToken);
if (!response.IsSuccessStatusCode)
@@ -24,7 +24,7 @@ public class SkorubaUserService([FromKeyedServices(SkorubaHttpClient)] IHttpClie
public async Task<Result<UserResponse>> GetUserAsync(Guid userId, CancellationToken cancellationToken = default) =>
await Result.Try((Func<Task<Result<UserResponse>>>)(async () =>
{
var httpClient = httpClientFactory.CreateClient();
var httpClient = httpClientFactory.CreateClient(SkorubaHttpClient);
var result = await httpClient.GetFromJsonAsync<UserResponse>($"api/users/{userId}", cancellationToken);
return Result.FailIf(result is null, NotFoundError.Create($"User {userId} not found."))
@@ -34,7 +34,7 @@ public class SkorubaUserService([FromKeyedServices(SkorubaHttpClient)] IHttpClie
public async Task<Result> UpdateUserAsync(UpdateUserRequest request, CancellationToken cancellationToken = default) =>
await Result.Try((Func<Task<Result>>)(async () =>
{
var httpClient = httpClientFactory.CreateClient();
var httpClient = httpClientFactory.CreateClient(SkorubaHttpClient);
var response = await httpClient.PutAsJsonAsync("api/users", request, cancellationToken);
return Result.OkIf(response.IsSuccessStatusCode, UpdateError.Create("Failed to update user."));
@@ -43,7 +43,7 @@ public class SkorubaUserService([FromKeyedServices(SkorubaHttpClient)] IHttpClie
public async Task<Result> SetUserLockoutAsync(Guid userId, bool disabled, CancellationToken cancellationToken = default) =>
await Result.Try((Func<Task<Result>>)(async () =>
{
var httpClient = httpClientFactory.CreateClient();
var httpClient = httpClientFactory.CreateClient(SkorubaHttpClient);
var user = await httpClient.GetFromJsonAsync<UpdateUserRequest>($"api/users/{userId}", cancellationToken);
if (user is null)
@@ -63,7 +63,7 @@ public class SkorubaUserService([FromKeyedServices(SkorubaHttpClient)] IHttpClie
public async Task<Result> AddClaimAsync(Guid userId, string claimType, string claimValue, CancellationToken cancellationToken = default) =>
await Result.Try((Func<Task<Result>>)(async () =>
{
var httpClient = httpClientFactory.CreateClient();
var httpClient = httpClientFactory.CreateClient(SkorubaHttpClient);
var payload = new { UserId = userId, ClaimType = claimType, ClaimValue = claimValue };
var response = await httpClient.PostAsJsonAsync($"api/users/{userId}/claims", payload, cancellationToken);
@@ -74,7 +74,7 @@ public class SkorubaUserService([FromKeyedServices(SkorubaHttpClient)] IHttpClie
public async Task<Result> RemoveClaimAsync(Guid userId, int claimId, CancellationToken cancellationToken = default) =>
await Result.Try((Func<Task<Result>>)(async () =>
{
var httpClient = httpClientFactory.CreateClient();
var httpClient = httpClientFactory.CreateClient(SkorubaHttpClient);
var response = await httpClient.DeleteAsync($"api/users/{userId}/claims/{claimId}", cancellationToken);
return Result.OkIf(response.IsSuccessStatusCode, CreateError.Create("Failed to remove user claim."));
@@ -83,7 +83,7 @@ public class SkorubaUserService([FromKeyedServices(SkorubaHttpClient)] IHttpClie
public async Task<Result<Claim[]>> GetUserClaimsAsync(Guid userId, int page = 1, int pageSize = 50, CancellationToken cancellationToken = default) =>
await Result.Try((Func<Task<Result<Claim[]>>>)(async () =>
{
var httpClient = httpClientFactory.CreateClient();
var httpClient = httpClientFactory.CreateClient(SkorubaHttpClient);
var result = await httpClient.GetFromJsonAsync<ClaimsResponse>($"api/users/{userId}/claims?page={page}&pageSize={pageSize}", cancellationToken);
@@ -91,10 +91,10 @@ public class SkorubaUserService([FromKeyedServices(SkorubaHttpClient)] IHttpClie
.ToResult(result?.Claims.ToArray() ?? []);
}));
public async Task<Result> AddRoleAsync(Guid userId, string roleId, CancellationToken cancellationToken = default) =>
public async Task<Result> AddRoleAsync(Guid userId, Guid roleId, CancellationToken cancellationToken = default) =>
await Result.Try((Func<Task<Result>>)(async () =>
{
var httpClient = httpClientFactory.CreateClient();
var httpClient = httpClientFactory.CreateClient(SkorubaHttpClient);
var payload = new { UserId = userId, RoleId = roleId };
var response = await httpClient.PostAsJsonAsync($"api/users/{userId}/roles", payload, cancellationToken);
@@ -102,10 +102,10 @@ public class SkorubaUserService([FromKeyedServices(SkorubaHttpClient)] IHttpClie
return Result.OkIf(response.IsSuccessStatusCode, CreateError.Create("Failed to add user role."));
}));
public async Task<Result> RemoveRoleAsync(Guid userId, string roleId, CancellationToken cancellationToken = default) =>
public async Task<Result> RemoveRoleAsync(Guid userId, Guid roleId, CancellationToken cancellationToken = default) =>
await Result.Try((Func<Task<Result>>)(async () =>
{
var httpClient = httpClientFactory.CreateClient();
var httpClient = httpClientFactory.CreateClient(SkorubaHttpClient);
var response = await httpClient.DeleteAsync($"api/users/{userId}/roles/{roleId}", cancellationToken);
return Result.OkIf(response.IsSuccessStatusCode, CreateError.Create("Failed to remove user role."));
@@ -114,7 +114,7 @@ public class SkorubaUserService([FromKeyedServices(SkorubaHttpClient)] IHttpClie
public async Task<Result<Role[]>> GetUserRolesAsync(Guid userId, int page = 1, int pageSize = 50, CancellationToken cancellationToken = default) =>
await Result.Try((Func<Task<Result<Role[]>>>)(async () =>
{
var httpClient = httpClientFactory.CreateClient();
var httpClient = httpClientFactory.CreateClient(SkorubaHttpClient);
var result = await httpClient.GetFromJsonAsync<RolesResponse>($"api/users/{userId}/roles?page={page}&pageSize={pageSize}", cancellationToken);
@@ -122,10 +122,21 @@ public class SkorubaUserService([FromKeyedServices(SkorubaHttpClient)] IHttpClie
.ToResult(result?.Roles?.ToArray() ?? []);
}));
public async Task<Result<Claim[]>> GetRoleClaimsAsync(Guid roleId, int page = 1, int pageSize = 50, CancellationToken cancellationToken = default) =>
await Result.Try((Func<Task<Result<Claim[]>>>)(async () =>
{
var httpClient = httpClientFactory.CreateClient(SkorubaHttpClient);
var result = await httpClient.GetFromJsonAsync<ClaimsResponse>($"api/roles/{roleId}/claims?page={page}&pageSize={pageSize}", cancellationToken);
return Result.FailIf(result is null, NotFoundError.Create($"Claims for role {roleId} could not be retrieved."))
.ToResult(result?.Claims.ToArray() ?? []);
}));
public async Task<Result> InvalidateUserSessionAsync(Guid userId, CancellationToken cancellationToken = default) =>
await Result.Try((Func<Task<Result>>)(async () =>
{
var httpClient = httpClientFactory.CreateClient();
var httpClient = httpClientFactory.CreateClient(SkorubaHttpClient);
var user = await httpClient.GetFromJsonAsync<UserResponse>($"api/users/{userId}", cancellationToken);
if (user is null)
@@ -138,17 +149,17 @@ public class SkorubaUserService([FromKeyedServices(SkorubaHttpClient)] IHttpClie
public async Task<Result<Role[]>> GetAvailableRolesAsync(string? searchText = null, int page = 1, int pageSize = 50, CancellationToken cancellationToken = default) =>
await Result.Try((Func<Task<Result<Role[]>>>)(async () =>
{
var httpClient = httpClientFactory.CreateClient();
{
var httpClient = httpClientFactory.CreateClient(SkorubaHttpClient);
var query = $"api/roles?page={page}&pageSize={pageSize}";
var query = $"api/roles?page={page}&pageSize={pageSize}";
if (!string.IsNullOrWhiteSpace(searchText))
query += $"&searchText={Uri.EscapeDataString(searchText)}";
if (!string.IsNullOrWhiteSpace(searchText))
query += $"&searchText={Uri.EscapeDataString(searchText)}";
var result = await httpClient.GetFromJsonAsync<RolesResponse>(query, cancellationToken);
var result = await httpClient.GetFromJsonAsync<RolesResponse>(query, cancellationToken);
return Result.FailIf(result is null, NotFoundError.Create("Available roles could not be retrieved."))
.ToResult(result?.Roles?.ToArray() ?? []);
}));
return Result.FailIf(result is null, NotFoundError.Create("Available roles could not be retrieved."))
.ToResult(result?.Roles?.ToArray() ?? []);
}));
}