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);
+ }
+}