diff --git a/src/WorkOS.net/Client/Utilities/RequestUtilities.cs b/src/WorkOS.net/Client/Utilities/RequestUtilities.cs index fc17b598..51fe2d91 100644 --- a/src/WorkOS.net/Client/Utilities/RequestUtilities.cs +++ b/src/WorkOS.net/Client/Utilities/RequestUtilities.cs @@ -12,6 +12,7 @@ namespace WorkOS using System.Net.Http; using System.Net.Http.Headers; using System.Reflection; + using System.Runtime.Serialization; using System.Text; using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -353,7 +354,7 @@ private static void AddScalar(string key, object? value, List(key, rendered)); } + /// + /// Return the wire value for an enum member by reading its + /// . Falls back to + /// ToString() when the attribute is absent. + /// + private static string ResolveEnumWireValue(Enum value) + { + var member = value.GetType().GetField(value.ToString()); + if (member != null) + { + var attr = member.GetCustomAttribute(); + if (attr != null && attr.Value != null) + { + return attr.Value; + } + } + + return value.ToString(); + } + /// /// Contract resolver that includes internal properties so that /// service-injected fields (grant_type, client_id, client_secret) diff --git a/src/WorkOS.net/Services/_common/_interfaces/ListOptions.cs b/src/WorkOS.net/Services/_common/_interfaces/ListOptions.cs index ee488fd0..49e96a6c 100644 --- a/src/WorkOS.net/Services/_common/_interfaces/ListOptions.cs +++ b/src/WorkOS.net/Services/_common/_interfaces/ListOptions.cs @@ -35,6 +35,6 @@ public class ListOptions : BaseOptions /// [JsonProperty("order")] [STJS.JsonPropertyName("order")] - public PaginationOrder Order { get; set; } = PaginationOrder.Desc; + public PaginationOrder? Order { get; set; } = PaginationOrder.Desc; } } diff --git a/test/WorkOSTests/Client/NonGetQueryParamsTest.cs b/test/WorkOSTests/Client/NonGetQueryParamsTest.cs index f57f945c..d80024aa 100644 --- a/test/WorkOSTests/Client/NonGetQueryParamsTest.cs +++ b/test/WorkOSTests/Client/NonGetQueryParamsTest.cs @@ -27,15 +27,13 @@ public async Task DeleteWithBoolQueryParam_IncludesCascadeDeleteOnUri() httpMock.MockResponse( HttpMethod.Delete, - "/authorization/organizations/org_1/resources/file/ext_42", + "/authorization/resources/res_1", HttpStatusCode.NoContent, "{}"); - await client.Authorization.DeleteResourceByExternalId( - "org_1", - "file", - "ext_42", - new AuthorizationDeleteResourceByExternalIdOptions { CascadeDelete = true }); + await client.Authorization.DeleteResource( + "res_1", + new AuthorizationDeleteResourceOptions { CascadeDelete = true }); var last = Assert.Single(httpMock.CapturedRequests); Assert.Equal(HttpMethod.Delete, last.Method); @@ -56,15 +54,13 @@ public async Task DeleteWithBoolFalse_SerializesAsFalse() httpMock.MockResponse( HttpMethod.Delete, - "/authorization/organizations/org_1/resources/file/ext_42", + "/authorization/resources/res_1", HttpStatusCode.NoContent, "{}"); - await client.Authorization.DeleteResourceByExternalId( - "org_1", - "file", - "ext_42", - new AuthorizationDeleteResourceByExternalIdOptions { CascadeDelete = false }); + await client.Authorization.DeleteResource( + "res_1", + new AuthorizationDeleteResourceOptions { CascadeDelete = false }); var last = Assert.Single(httpMock.CapturedRequests); Assert.Contains("cascade_delete=false", last.RequestUri!.Query);