Files
ReC/tests/ReC.Tests/Client/ProfileApiTests.cs
TekH d34af1ac86 Refactor tests to use async/await and improve naming
Updated all test methods to use asynchronous programming with
`async` and `await`, replacing synchronous calls with
`.GetAwaiter().GetResult()`. This improves readability and
aligns with modern C# practices.

Renamed test methods to reflect their asynchronous nature and
better describe their behavior. Updated exception handling to
validate HTTP methods and request URIs while maintaining
original assertions.

Applied changes consistently across multiple test classes,
including `CommonApiTests`, `EndpointAuthApiTests`,
`EndpointParamsApiTests`, `EndpointsApiTests`,
`ProfileApiTests`, `RecActionApiTests`, and `ResultApiTests`.
2026-05-20 13:18:13 +02:00

119 lines
3.4 KiB
C#

using System.Net;
using System.Text.Json;
using Microsoft.Extensions.Configuration;
using ReC.Application.Common.Dto;
using ReC.Application.Common.Procedures.UpdateProcedure.Dto;
using ReC.Application.Profile.Commands;
using ReC.Client;
namespace ReC.Tests.Client;
[TestFixture]
public class ProfileApiTests : RecClientTestBase
{
[Test]
public void ReCClient_profiles_api_is_resolvable_through_dependency_injection()
{
var (client, scope) = CreateScopedClient();
using var _ = scope;
Assert.That(client, Is.Not.Null);
Assert.That(client.Profiles, Is.Not.Null);
}
[Test]
public void GetAsync_with_unknown_id_throws_not_found()
{
var (client, scope) = CreateScopedClient();
using var _ = scope;
var ex = Assert.ThrowsAsync<ReCApiException>(async () =>
await client.Profiles.GetAsync<ProfileViewDto[]>(id: long.MaxValue));
Assert.That(ex, Is.Not.Null);
Assert.That(ex!.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
Assert.That(ex.Method, Is.EqualTo("GET"));
}
[Test]
public void GetDynamicAsync_with_unknown_id_throws_not_found()
{
var (client, scope) = CreateScopedClient();
using var _ = scope;
var ex = Assert.ThrowsAsync<ReCApiException>(async () =>
await client.Profiles.GetDynamicAsync(id: long.MaxValue));
Assert.That(ex, Is.Not.Null);
Assert.That(ex!.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
Assert.That(ex.Method, Is.EqualTo("GET"));
}
[Test]
public async Task GetDynamicAsync_without_filters_returns_dynamic_payload_or_throws_not_found()
{
var (client, scope) = CreateScopedClient();
using var _ = scope;
try
{
dynamic profiles = await client.Profiles.GetDynamicAsync();
Assert.That(profiles, Is.Not.Null);
Assert.That(profiles, Is.TypeOf<JsonElement>());
}
catch (ReCApiException ex)
{
Assert.That(ex.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
Assert.That(ex.Method, Is.EqualTo("GET"));
}
}
[Test]
public async Task UpdateAsync_with_unknown_id_throws_or_completes()
{
var (client, scope) = CreateScopedClient();
using var _ = scope;
var payload = new UpdateProfileDto
{
Active = false,
Name = "test-profile"
};
try
{
await client.Profiles.UpdateAsync(long.MaxValue, payload);
Assert.Pass("Update completed.");
}
catch (ReCApiException ex)
{
Assert.That(ex.Method, Is.EqualTo("PUT"));
Assert.That(ex.RequestUri!.AbsolutePath, Does.EndWith($"api/Profile/{long.MaxValue}"));
}
}
[Test]
public async Task DeleteAsync_sends_payload_as_query_string()
{
var (client, scope) = CreateScopedClient();
using var _ = scope;
var payload = new DeleteProfileCommand
{
Start = long.MaxValue - 1,
End = long.MaxValue,
Force = false
};
try
{
await client.Profiles.DeleteAsync(payload);
}
catch (ReCApiException ex)
{
Assert.That(ex.Method, Is.EqualTo("DELETE"));
Assert.That(ex.RequestUri!.Query, Does.Contain("Start=").And.Contains("End=").And.Contains("Force="));
}
}
}