diff --git a/tests/ReC.Tests/Client/CommonApiTests.cs b/tests/ReC.Tests/Client/CommonApiTests.cs new file mode 100644 index 0000000..794d42e --- /dev/null +++ b/tests/ReC.Tests/Client/CommonApiTests.cs @@ -0,0 +1,101 @@ +using ReC.Application.Common.Procedures; +using ReC.Application.Common.Procedures.DeleteProcedure; +using ReC.Application.Common.Procedures.InsertProcedure; +using ReC.Application.Common.Procedures.UpdateProcedure; +using ReC.Application.RecActions.Commands; +using ReC.Client; + +namespace ReC.Tests.Client; + +[TestFixture] +public class CommonApiTests : RecClientTestBase +{ + [Test] + public void ReCClient_common_api_is_resolvable_through_dependency_injection() + { + var (client, scope) = CreateScopedClient(); + using var _ = scope; + + Assert.That(client, Is.Not.Null); + Assert.That(client.Common, Is.Not.Null); + } + + [Test] + public void CreateAsync_with_invalid_action_payload_throws_or_completes() + { + var (client, scope) = CreateScopedClient(); + using var _ = scope; + + var payload = new InsertObjectProcedure + { + Entity = EntityType.Action, + Action = new InsertActionCommand + { + ProfileId = long.MaxValue, + EndpointId = long.MaxValue, + Active = true, + Sequence = 1 + } + }; + + try + { + client.Common.CreateAsync(payload).GetAwaiter().GetResult(); + Assert.Pass("Create completed."); + } + catch (ReCApiException ex) + { + Assert.That(ex.Method, Is.EqualTo("POST")); + Assert.That(ex.RequestUri!.AbsolutePath, Does.EndWith("api/Common")); + } + } + + [Test] + public void UpdateAsync_with_body_payload_throws_or_completes() + { + var (client, scope) = CreateScopedClient(); + using var _ = scope; + + var payload = new UpdateObjectProcedure + { + Entity = EntityType.Action, + Id = long.MaxValue, + }; + + try + { + client.Common.UpdateAsync(payload).GetAwaiter().GetResult(); + Assert.Pass("Update completed."); + } + catch (ReCApiException ex) + { + Assert.That(ex.Method, Is.EqualTo("PUT")); + Assert.That(ex.RequestUri!.AbsolutePath, Does.EndWith("api/Common")); + } + } + + [Test] + public void DeleteAsync_sends_payload_as_query_string() + { + var (client, scope) = CreateScopedClient(); + using var _ = scope; + + var payload = new DeleteObjectProcedure + { + Entity = EntityType.Action, + Start = long.MaxValue - 1, + End = long.MaxValue, + Force = false + }; + + try + { + client.Common.DeleteAsync(payload).GetAwaiter().GetResult(); + } + catch (ReCApiException ex) + { + Assert.That(ex.Method, Is.EqualTo("DELETE")); + Assert.That(ex.RequestUri!.Query, Does.Contain("Entity=").And.Contains("Start=").And.Contains("End=").And.Contains("Force=")); + } + } +}