From fd173e81b6fb720494984d642f845036f49f835f Mon Sep 17 00:00:00 2001 From: Alex Morask <144709477+amorask-bitwarden@users.noreply.github.com> Date: Tue, 14 May 2024 11:26:08 -0400 Subject: [PATCH] [AC-2426] Allow editing of client organization name (#4072) * Allow editing of client organization name * Removing unnecessary using for linter --- .../Controllers/ProviderClientsController.cs | 15 ++++-- .../UpdateClientOrganizationRequestBody.cs | 3 ++ .../ProviderClientsControllerTests.cs | 46 ++++++++++++++++++- 3 files changed, 59 insertions(+), 5 deletions(-) diff --git a/src/Api/Billing/Controllers/ProviderClientsController.cs b/src/Api/Billing/Controllers/ProviderClientsController.cs index 6f7bd809fd12..a47ab568bc42 100644 --- a/src/Api/Billing/Controllers/ProviderClientsController.cs +++ b/src/Api/Billing/Controllers/ProviderClientsController.cs @@ -133,10 +133,17 @@ public class ProviderClientsController( return TypedResults.Problem(); } - await assignSeatsToClientOrganizationCommand.AssignSeatsToClientOrganization( - provider, - clientOrganization, - requestBody.AssignedSeats); + if (clientOrganization.Seats != requestBody.AssignedSeats) + { + await assignSeatsToClientOrganizationCommand.AssignSeatsToClientOrganization( + provider, + clientOrganization, + requestBody.AssignedSeats); + } + + clientOrganization.Name = requestBody.Name; + + await organizationRepository.ReplaceAsync(clientOrganization); return TypedResults.Ok(); } diff --git a/src/Api/Billing/Models/Requests/UpdateClientOrganizationRequestBody.cs b/src/Api/Billing/Models/Requests/UpdateClientOrganizationRequestBody.cs index c6e04aa7989d..6ed1083b42ce 100644 --- a/src/Api/Billing/Models/Requests/UpdateClientOrganizationRequestBody.cs +++ b/src/Api/Billing/Models/Requests/UpdateClientOrganizationRequestBody.cs @@ -7,4 +7,7 @@ public class UpdateClientOrganizationRequestBody [Required] [Range(0, int.MaxValue, ErrorMessage = "You cannot assign negative seats to a client organization.")] public int AssignedSeats { get; set; } + + [Required] + public string Name { get; set; } } diff --git a/test/Api.Test/Billing/Controllers/ProviderClientsControllerTests.cs b/test/Api.Test/Billing/Controllers/ProviderClientsControllerTests.cs index b6acb73e4827..e0c9a27a6215 100644 --- a/test/Api.Test/Billing/Controllers/ProviderClientsControllerTests.cs +++ b/test/Api.Test/Billing/Controllers/ProviderClientsControllerTests.cs @@ -301,7 +301,7 @@ public class ProviderClientsControllerTests } [Theory, BitAutoData] - public async Task UpdateAsync_NoContent( + public async Task UpdateAsync_AssignedSeats_NoContent( Guid providerId, Guid providerOrganizationId, UpdateClientOrganizationRequestBody requestBody, @@ -333,6 +333,50 @@ await sutProvider.GetDependency().Recei organization, requestBody.AssignedSeats); + await sutProvider.GetDependency().Received(1) + .ReplaceAsync(Arg.Is(org => org.Name == requestBody.Name)); + + Assert.IsType(result); + } + + [Theory, BitAutoData] + public async Task UpdateAsync_Name_NoContent( + Guid providerId, + Guid providerOrganizationId, + UpdateClientOrganizationRequestBody requestBody, + Provider provider, + ProviderOrganization providerOrganization, + Organization organization, + SutProvider sutProvider) + { + sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.EnableConsolidatedBilling) + .Returns(true); + + sutProvider.GetDependency().ProviderProviderAdmin(providerId) + .Returns(true); + + sutProvider.GetDependency().GetByIdAsync(providerId) + .Returns(provider); + + sutProvider.GetDependency().GetByIdAsync(providerOrganizationId) + .Returns(providerOrganization); + + sutProvider.GetDependency().GetByIdAsync(providerOrganization.OrganizationId) + .Returns(organization); + + requestBody.AssignedSeats = organization.Seats!.Value; + + var result = await sutProvider.Sut.UpdateAsync(providerId, providerOrganizationId, requestBody); + + await sutProvider.GetDependency().DidNotReceiveWithAnyArgs() + .AssignSeatsToClientOrganization( + Arg.Any(), + Arg.Any(), + Arg.Any()); + + await sutProvider.GetDependency().Received(1) + .ReplaceAsync(Arg.Is(org => org.Name == requestBody.Name)); + Assert.IsType(result); } #endregion