Renamed `GetDynamicAsync` to `GetAsync` across `ProfileApi.cs`, `RecActionApi.cs`, and `ResultApi.cs` to improve consistency and align with naming conventions for asynchronous methods. Updated XML documentation to clarify that the non-generic `GetAsync` overload returns a dynamically deserialized payload, typically a `System.Text.Json.JsonElement`. Highlighted its relation to the generic `GetAsync<T>` method. Adjusted method signatures for both `NETFRAMEWORK` and non-`NETFRAMEWORK` code paths. Updated test files (`ProfileApiTests.cs`, `RecActionApiTests.cs`, and `ResultApiTests.cs`) to reflect the renaming, including test method names and assertions. These changes enhance code readability, maintainability, and consistency.
119 lines
3.4 KiB
C#
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 GetAsync_non_generic_with_unknown_id_throws_not_found()
|
|
{
|
|
var (client, scope) = CreateScopedClient();
|
|
using var _ = scope;
|
|
|
|
var ex = Assert.ThrowsAsync<ReCApiException>(async () =>
|
|
await client.Profiles.GetAsync(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 GetAsync_non_generic_returns_dynamic_payload_or_throws_not_found()
|
|
{
|
|
var (client, scope) = CreateScopedClient();
|
|
using var _ = scope;
|
|
|
|
try
|
|
{
|
|
dynamic? profiles = await client.Profiles.GetAsync();
|
|
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="));
|
|
}
|
|
}
|
|
}
|