From de07552c2521905d84c85dedee1d148310ac0575 Mon Sep 17 00:00:00 2001 From: frederikprijck Date: Mon, 9 Oct 2023 10:41:20 +0200 Subject: [PATCH 1/2] Add fields to Organizations Get All Members --- .../Clients/OrganizationsClient.cs | 19 +++++++++++++++++++ .../OrganizationGetAllMembersRequest.cs | 15 +++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 src/Auth0.ManagementApi/Models/OrganizationGetAllMembersRequest.cs diff --git a/src/Auth0.ManagementApi/Clients/OrganizationsClient.cs b/src/Auth0.ManagementApi/Clients/OrganizationsClient.cs index 42c03683f..ee1ecbfe7 100644 --- a/src/Auth0.ManagementApi/Clients/OrganizationsClient.cs +++ b/src/Auth0.ManagementApi/Clients/OrganizationsClient.cs @@ -218,6 +218,19 @@ public Task AddMembersAsync(string organizationId, OrganizationAddMembersRequest /// The cancellation token to cancel operation. /// An containing the organization members. public Task> GetAllMembersAsync(string organizationId, PaginationInfo pagination, CancellationToken cancellationToken = default) + { + return GetAllMembersAsync(organizationId, null, pagination, cancellationToken); + } + + /// + /// Retrieves a list of all organization members. + /// + /// The ID of the organization for which you want to retrieve the members. + /// Specifies criteria to use when querying clients. + /// Specifies pagination info to use when requesting paged results. + /// The cancellation token to cancel operation. + /// An containing the organization members. + public Task> GetAllMembersAsync(string organizationId, OrganizationGetAllMembersRequest request, PaginationInfo pagination, CancellationToken cancellationToken = default) { if (pagination == null) throw new ArgumentNullException(nameof(pagination)); @@ -229,6 +242,12 @@ public Task> GetAllMembersAsync(string organizati {"include_totals", pagination.IncludeTotals.ToString().ToLower()}, }; + if (request != null) + { + queryStrings.Add("fields", request.Fields); + queryStrings.Add("include_fields", request.IncludeFields?.ToString().ToLower()); + } + return Connection.GetAsync>(BuildUri($"organizations/{EncodePath(organizationId)}/members", queryStrings), DefaultHeaders, membersConverters, cancellationToken); } diff --git a/src/Auth0.ManagementApi/Models/OrganizationGetAllMembersRequest.cs b/src/Auth0.ManagementApi/Models/OrganizationGetAllMembersRequest.cs new file mode 100644 index 000000000..711f5cdd6 --- /dev/null +++ b/src/Auth0.ManagementApi/Models/OrganizationGetAllMembersRequest.cs @@ -0,0 +1,15 @@ +namespace Auth0.ManagementApi.Models +{ + public class OrganizationGetAllMembersRequest { + + /// + /// A comma separated list of fields to include or exclude (depending on ) from the result, empty to retrieve all fields. + /// + public string Fields { get; set; } = null; + + /// + /// Specifies whether the fields specified in should be included or excluded in the result. + /// + public bool? IncludeFields { get; set; } = null; + } +} \ No newline at end of file From 5888cfe922d016a997e16b26384beedb78654943 Mon Sep 17 00:00:00 2001 From: frederikprijck Date: Mon, 9 Oct 2023 10:50:07 +0200 Subject: [PATCH 2/2] update --- .../Clients/IOrganizationsClient.cs | 20 ++++++++++++++++++ .../Clients/OrganizationsClient.cs | 21 ++++++++++++++++++- .../OrganizationTests.cs | 8 +++++-- 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/src/Auth0.ManagementApi/Clients/IOrganizationsClient.cs b/src/Auth0.ManagementApi/Clients/IOrganizationsClient.cs index c4f72b2c3..10013babb 100644 --- a/src/Auth0.ManagementApi/Clients/IOrganizationsClient.cs +++ b/src/Auth0.ManagementApi/Clients/IOrganizationsClient.cs @@ -128,6 +128,16 @@ public interface IOrganizationsClient /// An containing the organization members. Task> GetAllMembersAsync(string organizationId, PaginationInfo pagination, CancellationToken cancellationToken = default); + /// + /// Retrieves a list of all organization members. + /// + /// The ID of the organization for which you want to retrieve the members. + /// Specifies criteria to use when querying organization members. + /// Specifies pagination info to use when requesting paged results. + /// The cancellation token to cancel operation. + /// An containing the organization members. + Task> GetAllMembersAsync(string organizationId, OrganizationGetAllMembersRequest request, PaginationInfo pagination, CancellationToken cancellationToken = default); + /// /// Retrieves a list of all organization members using checkpoint . /// @@ -137,6 +147,16 @@ public interface IOrganizationsClient /// An containing the organization members. Task> GetAllMembersAsync(string organizationId, CheckpointPaginationInfo pagination, CancellationToken cancellationToken = default); + /// + /// Retrieves a list of all organization members using checkpoint . + /// + /// The ID of the organization for which you want to retrieve the members. + /// Specifies criteria to use when querying organization members. + /// Specifies to use in requesting checkpoint-paginated results. + /// The cancellation token to cancel operation. + /// An containing the organization members. + Task> GetAllMembersAsync(string organizationId, OrganizationGetAllMembersRequest request, CheckpointPaginationInfo pagination, CancellationToken cancellationToken = default); + /// /// Deletes members from an organization. /// diff --git a/src/Auth0.ManagementApi/Clients/OrganizationsClient.cs b/src/Auth0.ManagementApi/Clients/OrganizationsClient.cs index ee1ecbfe7..098dd1fd3 100644 --- a/src/Auth0.ManagementApi/Clients/OrganizationsClient.cs +++ b/src/Auth0.ManagementApi/Clients/OrganizationsClient.cs @@ -226,7 +226,7 @@ public Task> GetAllMembersAsync(string organizati /// Retrieves a list of all organization members. /// /// The ID of the organization for which you want to retrieve the members. - /// Specifies criteria to use when querying clients. + /// Specifies criteria to use when querying organization members. /// Specifies pagination info to use when requesting paged results. /// The cancellation token to cancel operation. /// An containing the organization members. @@ -259,6 +259,19 @@ public Task> GetAllMembersAsync(string organizati /// The cancellation token to cancel operation. /// An containing the organization members. public Task> GetAllMembersAsync(string organizationId, CheckpointPaginationInfo pagination, CancellationToken cancellationToken = default) + { + return GetAllMembersAsync(organizationId, null, pagination, cancellationToken); + } + + /// + /// Retrieves a list of all organization members using checkpoint . + /// + /// The ID of the organization for which you want to retrieve the members. + /// Specifies criteria to use when querying organization members. + /// Specifies to use in requesting checkpoint-paginated results. + /// The cancellation token to cancel operation. + /// An containing the organization members. + public Task> GetAllMembersAsync(string organizationId, OrganizationGetAllMembersRequest request, CheckpointPaginationInfo pagination, CancellationToken cancellationToken = default) { if (pagination == null) throw new ArgumentNullException(nameof(pagination)); @@ -269,6 +282,12 @@ public Task> GetAllMembersAsync(string {"take", pagination.Take.ToString()}, }; + if (request != null) + { + queryStrings.Add("fields", request.Fields); + queryStrings.Add("include_fields", request.IncludeFields?.ToString().ToLower()); + } + return Connection.GetAsync>(BuildUri($"organizations/{EncodePath(organizationId)}/members", queryStrings), DefaultHeaders, membersCheckpointConverters, cancellationToken); } diff --git a/tests/Auth0.ManagementApi.IntegrationTests/OrganizationTests.cs b/tests/Auth0.ManagementApi.IntegrationTests/OrganizationTests.cs index 6b4618dd9..a15f91c18 100644 --- a/tests/Auth0.ManagementApi.IntegrationTests/OrganizationTests.cs +++ b/tests/Auth0.ManagementApi.IntegrationTests/OrganizationTests.cs @@ -219,9 +219,11 @@ public async Task Test_organization_members_crud_sequence() try { - var members = await RetryUtils.Retry(() => fixture.ApiClient.Organizations.GetAllMembersAsync(ExistingOrganizationId, new Paging.PaginationInfo()), members => members.Count != 2); + var members = await RetryUtils.Retry(() => fixture.ApiClient.Organizations.GetAllMembersAsync(ExistingOrganizationId, new OrganizationGetAllMembersRequest { Fields = "name", IncludeFields = false }, new Paging.PaginationInfo()), members => members.Count != 2); members.Count.Should().Be(2); + members[0].Name.Should().BeNull(); + members[1].Name.Should().BeNull(); await fixture.ApiClient.Organizations.DeleteMemberAsync(ExistingOrganizationId, new OrganizationDeleteMembersRequest { @@ -275,10 +277,12 @@ public async Task Test_organization_members_checkpoint_pagination() await RetryUtils.Retry(() => fixture.ApiClient.Organizations.GetAllMembersAsync(ExistingOrganizationId, new Paging.CheckpointPaginationInfo(2)), response => response.Count != 2); - var firstCheckPointPaginationRequest = await fixture.ApiClient.Organizations.GetAllMembersAsync(ExistingOrganizationId, new Paging.CheckpointPaginationInfo(1)); + var firstCheckPointPaginationRequest = await fixture.ApiClient.Organizations.GetAllMembersAsync(ExistingOrganizationId, new OrganizationGetAllMembersRequest { Fields = "name", IncludeFields = false }, new Paging.CheckpointPaginationInfo(1)); var secondCheckPointPaginationRequest = await fixture.ApiClient.Organizations.GetAllMembersAsync(ExistingOrganizationId, new Paging.CheckpointPaginationInfo(1, firstCheckPointPaginationRequest.Paging.Next)); + firstCheckPointPaginationRequest[0].Name.Should().BeNull(); secondCheckPointPaginationRequest.Count.Should().Be(1); + secondCheckPointPaginationRequest[0].Name.Should().NotBeNull(); secondCheckPointPaginationRequest.Paging.Next.Should().NotBeNullOrEmpty(); }