Add tests for RecActions.InvokeAsync method

Enhanced test coverage for the `InvokeAsync` method in the
`RecActions` client by adding three new test cases:

1. `InvokeAsync_returns_BatchRecActionViewResponse_on_success`:
   - Verifies successful invocation with valid data.
   - Includes checks for `TotalActionCount` and `ActionExceptionCount`.

2. `InvokeAsync_with_batchId_string_returns_BatchRecActionViewResponse`:
   - Tests invocation with a `batchId` string argument.
   - Handles scenarios where test data is unavailable.

3. `InvokeAsync_with_batchId_string_and_unknown_profile_throws_ReCApiException`:
   - Confirms that an unknown profile ID throws a `ReCApiException`.
   - Validates exception details like HTTP method and request URI.

These changes improve test robustness by covering success, edge,
and error scenarios for the `InvokeAsync` method.
This commit is contained in:
2026-08-04 14:12:01 +02:00
parent 99bdf77ead
commit 713e4f2a02

View File

@@ -201,4 +201,70 @@ public class RecActionApiTests : RecClientTestBase
Assert.That(ex, Is.Not.Null);
Assert.That(ex!.Method, Is.EqualTo("POST"));
}
[Test]
public async Task InvokeAsync_returns_BatchRecActionViewResponse_on_success()
{
var profileId = await TryResolveProfileIdAsync();
if (profileId is null or <= 0)
Assert.Ignore("No profile available in the database for this test (set FakeProfileId or insert a profile).");
var (client, scope) = CreateScopedClient();
using var _ = scope;
BatchRecActionViewResponse? result;
try
{
result = await client.RecActions.InvokeAsync(profileId!.Value, new ClientInvokeReferences { BatchId = "test-batch" });
}
catch (ReCApiException ex)
{
Assert.Pass($"API returned {ex.StatusCode} — acceptable when test data is unavailable.");
return;
}
Assert.That(result, Is.Not.Null);
Assert.That(result!.TotalActionCount, Is.GreaterThanOrEqualTo(0));
Assert.That(result.ActionExceptionCount, Is.GreaterThanOrEqualTo(0));
Assert.That(result.ActionExceptionCount, Is.LessThanOrEqualTo(result.TotalActionCount));
}
[Test]
public async Task InvokeAsync_with_batchId_string_returns_BatchRecActionViewResponse()
{
var profileId = await TryResolveProfileIdAsync();
if (profileId is null or <= 0)
Assert.Ignore("No profile available in the database for this test (set FakeProfileId or insert a profile).");
var (client, scope) = CreateScopedClient();
using var _ = scope;
BatchRecActionViewResponse? result;
try
{
result = await client.RecActions.InvokeAsync(profileId!.Value, "test-batch");
}
catch (ReCApiException ex)
{
Assert.Pass($"API returned {ex.StatusCode} — acceptable when test data is unavailable.");
return;
}
Assert.That(result, Is.Not.Null);
Assert.That(result!.TotalActionCount, Is.GreaterThanOrEqualTo(0));
}
[Test]
public void InvokeAsync_with_batchId_string_and_unknown_profile_throws_ReCApiException()
{
var (client, scope) = CreateScopedClient();
using var _ = scope;
var ex = Assert.ThrowsAsync<ReCApiException>(async () =>
await client.RecActions.InvokeAsync(long.MaxValue, "test-batch"));
Assert.That(ex, Is.Not.Null);
Assert.That(ex!.Method, Is.EqualTo("POST"));
Assert.That(ex.RequestUri!.AbsolutePath, Does.Contain("invoke"));
}
}