From 3fe75f511d6c6adae7971b6402353c7408b6d513 Mon Sep 17 00:00:00 2001 From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com> Date: Sun, 5 Jan 2025 21:55:53 -0600 Subject: [PATCH] fix: only allow afterId or beforeId to be set. not both at same time. --- src/AnthropicClient/Models/PagingRequest.cs | 6 ++++++ .../Integration/AnthropicApiClientTests.cs | 3 +-- .../Unit/Models/PagingRequestTests.cs | 18 ++++++++---------- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/AnthropicClient/Models/PagingRequest.cs b/src/AnthropicClient/Models/PagingRequest.cs index f8b415a..52746df 100644 --- a/src/AnthropicClient/Models/PagingRequest.cs +++ b/src/AnthropicClient/Models/PagingRequest.cs @@ -34,6 +34,7 @@ public class PagingRequest /// The ID of the item before which to start the page. /// The ID of the item after which to start the page. /// The maximum number of items to return in the page. + /// Thrown when both and are specified. /// Thrown when is less than 1 or greater than 1000. /// A new instance of the class. public PagingRequest( @@ -47,6 +48,11 @@ public class PagingRequest throw new ArgumentOutOfRangeException(nameof(limit), $"{nameof(limit)} must be between {LimitMinimum} and {LimitMaximum}."); } + if (string.IsNullOrEmpty(beforeId) is false && string.IsNullOrEmpty(afterId) is false) + { + throw new ArgumentException($"Only one of {nameof(beforeId)} or {nameof(afterId)} can be set."); + } + BeforeId = beforeId; AfterId = afterId; Limit = limit; diff --git a/tests/AnthropicClient.Tests/Integration/AnthropicApiClientTests.cs b/tests/AnthropicClient.Tests/Integration/AnthropicApiClientTests.cs index 8c8f0b3..eaef353 100644 --- a/tests/AnthropicClient.Tests/Integration/AnthropicApiClientTests.cs +++ b/tests/AnthropicClient.Tests/Integration/AnthropicApiClientTests.cs @@ -549,13 +549,12 @@ public class AnthropicApiClientTests : IntegrationTest [Fact] public async Task ListModelsAsync_WhenCalledWithPagingRequestUsingCustomValues_ItShouldReturnListOfModels() { - var pagingRequest = new PagingRequest("prev_id", "next_id", 10); + var pagingRequest = new PagingRequest(afterId: "next_id", limit: 10); _mockHttpMessageHandler .WhenListModelsRequest() .WithQueryString(new Dictionary { - { "before_id", pagingRequest.BeforeId }, { "after_id", pagingRequest.AfterId }, { "limit", pagingRequest.Limit.ToString() }, }) diff --git a/tests/AnthropicClient.Tests/Unit/Models/PagingRequestTests.cs b/tests/AnthropicClient.Tests/Unit/Models/PagingRequestTests.cs index 069120c..b63599b 100644 --- a/tests/AnthropicClient.Tests/Unit/Models/PagingRequestTests.cs +++ b/tests/AnthropicClient.Tests/Unit/Models/PagingRequestTests.cs @@ -18,6 +18,14 @@ public class PagingRequestTests : SerializationTest act.Should().Throw().WithMessage("limit must be between 1 and 1000. (Parameter 'limit')"); } + [Fact] + public void Constructor_WhenBothBeforeIdAndAfterIdAreSet_ItShouldThrowArgumentException() + { + var act = () => new PagingRequest(beforeId: "before-id", afterId: "after-id"); + + act.Should().Throw().WithMessage("Only one of beforeId or afterId can be set."); + } + [Fact] public void ToQueryParameters_WhenNoPropertiesSet_ItShouldReturnEmptyString() { @@ -57,14 +65,4 @@ public class PagingRequestTests : SerializationTest result.Should().Be("limit=10"); } - - [Fact] - public void ToQueryParameters_WhenAllPropertiesAreSet_ItShouldReturnAllProperties() - { - var pagingRequest = new PagingRequest(beforeId: "before-id", afterId: "after-id", limit: 10); - - var result = pagingRequest.ToQueryParameters(); - - result.Should().Be("before_id=before-id&after_id=after-id&limit=10"); - } } \ No newline at end of file