From 54c155d919e38ba6d902802c3c33e112767db868 Mon Sep 17 00:00:00 2001 From: Ron Amihai Date: Sun, 28 Sep 2025 17:02:08 +0300 Subject: [PATCH] PostCursorOptions - Support Additional Custom Options --- .../JsonNetApiClientSerializationTest.cs | 33 ++++++++++++++++++- .../CursorApi/Models/PostCursorOptions.cs | 15 +++++++-- 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/arangodb-net-standard.Test/Serialization/JsonNetApiClientSerializationTest.cs b/arangodb-net-standard.Test/Serialization/JsonNetApiClientSerializationTest.cs index bb146cb1..6c58a06c 100644 --- a/arangodb-net-standard.Test/Serialization/JsonNetApiClientSerializationTest.cs +++ b/arangodb-net-standard.Test/Serialization/JsonNetApiClientSerializationTest.cs @@ -308,6 +308,37 @@ public void DeserializeFromStream_ShouldSucceed() Assert.Equal("something", model.NullProperty); } + [Fact] + public void Serialize_ShouldIncludeAdditionalOptions_WhenSerializingPostCursorOptions() + { + var body = new PostCursorBody + { + Options = new PostCursorOptions + { + FullCount = true, + AdditionalOptions = new Dictionary + { + ["fullCount"] = false, + ["customFlag"] = false, + ["oneShardAttributeValue"] = "tenant-123" + } + } + }; + + var serialization = new JsonNetApiClientSerialization(); + byte[] jsonBytes = serialization.Serialize(body, new ApiClientSerializationOptions( + useCamelCasePropertyNames: true, ignoreNullValues: true)); + string jsonString = Encoding.UTF8.GetString(jsonBytes); + + // Ensure custom additional options are present + Assert.Contains("\"customFlag\":false", jsonString); + Assert.Matches("\"fullCount\":true.*\"fullCount\":false", jsonString); + Assert.Contains("\"oneShardAttributeValue\":\"tenant-123\"", jsonString); + + // Ensure the AdditionalOptions property itself is not present + Assert.DoesNotContain("\"additionalOptions\"", jsonString); + } + private void AssertDefaultOptions(ApiClientSerializationOptions options) { Assert.False(options.UseCamelCasePropertyNames); @@ -315,4 +346,4 @@ private void AssertDefaultOptions(ApiClientSerializationOptions options) Assert.False(options.UseStringEnumConversion); } } -} +} \ No newline at end of file diff --git a/arangodb-net-standard/CursorApi/Models/PostCursorOptions.cs b/arangodb-net-standard/CursorApi/Models/PostCursorOptions.cs index 19f4bf20..a2d5e4cc 100644 --- a/arangodb-net-standard/CursorApi/Models/PostCursorOptions.cs +++ b/arangodb-net-standard/CursorApi/Models/PostCursorOptions.cs @@ -1,7 +1,11 @@ -namespace ArangoDBNetStandard.CursorApi.Models +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace ArangoDBNetStandard.CursorApi.Models { /// /// Represents extra options for the AQL query. + /// AdditionalOptions can hold arbitrary server options (flattened via JsonExtensionData). /// public class PostCursorOptions { @@ -119,5 +123,12 @@ public class PostCursorOptions /// This feature is only available in the Enterprise Edition. /// public bool? SkipInaccessibleCollections { get; set; } + + /// + /// Arbitrary additional options not (yet) modeled as strongly typed properties. + /// Entries are serialized at the same level as known properties (flattened). + /// + [JsonExtensionData] + public IDictionary AdditionalOptions { get; set; } } -} +} \ No newline at end of file