From 19a7aa500d8ce444675db152518cb103eb085a65 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Thu, 18 Apr 2024 17:04:04 -0500 Subject: [PATCH] Properly handle new policy enrollments in the public API (#4003) * Test the use case * Properly instantiate model from null * Rename query parameter --- .../Public/Controllers/PoliciesController.cs | 4 +-- .../Request/PolicyUpdateRequestModel.cs | 8 +++-- .../Controllers/PoliciesControllerTests.cs | 33 +++++++++++++++++++ 3 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 test/Api.Test/AdminConsole/Public/Controllers/PoliciesControllerTests.cs diff --git a/src/Api/AdminConsole/Public/Controllers/PoliciesController.cs b/src/Api/AdminConsole/Public/Controllers/PoliciesController.cs index 1d7eb65185..6af83e57db 100644 --- a/src/Api/AdminConsole/Public/Controllers/PoliciesController.cs +++ b/src/Api/AdminConsole/Public/Controllers/PoliciesController.cs @@ -83,7 +83,7 @@ public class PoliciesController : Controller /// /// The type of policy to be updated. /// The request model. - [HttpPut("{id}")] + [HttpPut("{type}")] [ProducesResponseType(typeof(PolicyResponseModel), (int)HttpStatusCode.OK)] [ProducesResponseType(typeof(ErrorResponseModel), (int)HttpStatusCode.BadRequest)] [ProducesResponseType((int)HttpStatusCode.NotFound)] @@ -93,7 +93,7 @@ public class PoliciesController : Controller _currentContext.OrganizationId.Value, type); if (policy == null) { - policy = model.ToPolicy(_currentContext.OrganizationId.Value); + policy = model.ToPolicy(_currentContext.OrganizationId.Value, type); } else { diff --git a/src/Api/AdminConsole/Public/Models/Request/PolicyUpdateRequestModel.cs b/src/Api/AdminConsole/Public/Models/Request/PolicyUpdateRequestModel.cs index 80b7874a0b..f859686b81 100644 --- a/src/Api/AdminConsole/Public/Models/Request/PolicyUpdateRequestModel.cs +++ b/src/Api/AdminConsole/Public/Models/Request/PolicyUpdateRequestModel.cs @@ -1,15 +1,19 @@ using System.Text.Json; using Bit.Core.AdminConsole.Entities; +using Bit.Core.AdminConsole.Enums; namespace Bit.Api.AdminConsole.Public.Models.Request; public class PolicyUpdateRequestModel : PolicyBaseModel { - public Policy ToPolicy(Guid orgId) + public Policy ToPolicy(Guid orgId, PolicyType type) { return ToPolicy(new Policy { - OrganizationId = orgId + OrganizationId = orgId, + Enabled = Enabled.GetValueOrDefault(), + Data = Data != null ? JsonSerializer.Serialize(Data) : null, + Type = type }); } diff --git a/test/Api.Test/AdminConsole/Public/Controllers/PoliciesControllerTests.cs b/test/Api.Test/AdminConsole/Public/Controllers/PoliciesControllerTests.cs new file mode 100644 index 0000000000..71d04cae33 --- /dev/null +++ b/test/Api.Test/AdminConsole/Public/Controllers/PoliciesControllerTests.cs @@ -0,0 +1,33 @@ +using Bit.Api.AdminConsole.Public.Controllers; +using Bit.Api.AdminConsole.Public.Models.Request; +using Bit.Api.AdminConsole.Public.Models.Response; +using Bit.Core.AdminConsole.Entities; +using Bit.Core.AdminConsole.Enums; +using Bit.Core.AdminConsole.Repositories; +using Bit.Core.Context; +using Bit.Test.Common.AutoFixture; +using Bit.Test.Common.AutoFixture.Attributes; +using Microsoft.AspNetCore.Mvc; +using NSubstitute; +using Xunit; + +namespace Bit.Api.Test.AdminConsole.Public.Controllers; + +[ControllerCustomize(typeof(PoliciesController))] +[SutProviderCustomize] +public class PoliciesControllerTests +{ + [Theory] + [BitAutoData] + [BitAutoData(PolicyType.SendOptions)] + public async Task Put_NewPolicy_AppliesCorrectType(PolicyType type, Organization organization, PolicyUpdateRequestModel model, SutProvider sutProvider) + { + sutProvider.GetDependency().OrganizationId.Returns(organization.Id); + sutProvider.GetDependency().GetByOrganizationIdTypeAsync(organization.Id, type).Returns((Policy)null); + + var response = await sutProvider.Sut.Put(type, model) as JsonResult; + var responseValue = response.Value as PolicyResponseModel; + + Assert.Equal(type, responseValue.Type); + } +}