diff --git a/src/Admin/AdminConsole/Views/Organizations/_ViewInformation.cshtml b/src/Admin/AdminConsole/Views/Organizations/_ViewInformation.cshtml
index f3853e16a9..a0d421235d 100644
--- a/src/Admin/AdminConsole/Views/Organizations/_ViewInformation.cshtml
+++ b/src/Admin/AdminConsole/Views/Organizations/_ViewInformation.cshtml
@@ -55,19 +55,11 @@
Administrators manage all collections
@(Model.Organization.AllowAdminAccessToAllCollectionItems ? "On" : "Off")
- @if (!FeatureService.IsEnabled(Bit.Core.FeatureFlagKeys.LimitCollectionCreationDeletionSplit))
- {
- Limit collection creation to administrators
- @(Model.Organization.LimitCollectionCreationDeletion ? "On" : "Off")
- }
- else
- {
- Limit collection creation to administrators
- @(Model.Organization.LimitCollectionCreation ? "On" : "Off")
+ Limit collection creation to administrators
+ @(Model.Organization.LimitCollectionCreation ? "On" : "Off")
- Limit collection deletion to administrators
- @(Model.Organization.LimitCollectionDeletion ? "On" : "Off")
- }
+ Limit collection deletion to administrators
+ @(Model.Organization.LimitCollectionDeletion ? "On" : "Off")
Secrets Manager
diff --git a/src/Api/AdminConsole/Controllers/OrganizationsController.cs b/src/Api/AdminConsole/Controllers/OrganizationsController.cs
index 6ffd60e425..4421af3a9a 100644
--- a/src/Api/AdminConsole/Controllers/OrganizationsController.cs
+++ b/src/Api/AdminConsole/Controllers/OrganizationsController.cs
@@ -526,14 +526,6 @@ public class OrganizationsController : Controller
[HttpPut("{id}/collection-management")]
public async Task PutCollectionManagement(Guid id, [FromBody] OrganizationCollectionManagementUpdateRequestModel model)
{
- if (
- _globalSettings.SelfHosted &&
- !_featureService.IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit)
- )
- {
- throw new BadRequestException("Only allowed when not self hosted.");
- }
-
var organization = await _organizationRepository.GetByIdAsync(id);
if (organization == null)
{
diff --git a/src/Api/AdminConsole/Models/Response/Organizations/OrganizationResponseModel.cs b/src/Api/AdminConsole/Models/Response/Organizations/OrganizationResponseModel.cs
index 908a3a9385..116b4b1238 100644
--- a/src/Api/AdminConsole/Models/Response/Organizations/OrganizationResponseModel.cs
+++ b/src/Api/AdminConsole/Models/Response/Organizations/OrganizationResponseModel.cs
@@ -57,8 +57,6 @@ public class OrganizationResponseModel : ResponseModel
MaxAutoscaleSmServiceAccounts = organization.MaxAutoscaleSmServiceAccounts;
LimitCollectionCreation = organization.LimitCollectionCreation;
LimitCollectionDeletion = organization.LimitCollectionDeletion;
- // Deprecated: https://bitwarden.atlassian.net/browse/PM-10863
- LimitCollectionCreationDeletion = organization.LimitCollectionCreationDeletion;
AllowAdminAccessToAllCollectionItems = organization.AllowAdminAccessToAllCollectionItems;
UseRiskInsights = organization.UseRiskInsights;
}
@@ -104,8 +102,6 @@ public class OrganizationResponseModel : ResponseModel
public int? MaxAutoscaleSmServiceAccounts { get; set; }
public bool LimitCollectionCreation { get; set; }
public bool LimitCollectionDeletion { get; set; }
- // Deperectated: https://bitwarden.atlassian.net/browse/PM-10863
- public bool LimitCollectionCreationDeletion { get; set; }
public bool AllowAdminAccessToAllCollectionItems { get; set; }
public bool UseRiskInsights { get; set; }
}
diff --git a/src/Api/AdminConsole/Models/Response/ProfileOrganizationResponseModel.cs b/src/Api/AdminConsole/Models/Response/ProfileOrganizationResponseModel.cs
index 96b86de164..75e4c44a6d 100644
--- a/src/Api/AdminConsole/Models/Response/ProfileOrganizationResponseModel.cs
+++ b/src/Api/AdminConsole/Models/Response/ProfileOrganizationResponseModel.cs
@@ -67,8 +67,6 @@ public class ProfileOrganizationResponseModel : ResponseModel
AccessSecretsManager = organization.AccessSecretsManager;
LimitCollectionCreation = organization.LimitCollectionCreation;
LimitCollectionDeletion = organization.LimitCollectionDeletion;
- // Deprecated: https://bitwarden.atlassian.net/browse/PM-10863
- LimitCollectionCreationDeletion = organization.LimitCollectionCreationDeletion;
AllowAdminAccessToAllCollectionItems = organization.AllowAdminAccessToAllCollectionItems;
UserIsManagedByOrganization = organizationIdsManagingUser.Contains(organization.OrganizationId);
UseRiskInsights = organization.UseRiskInsights;
@@ -130,8 +128,6 @@ public class ProfileOrganizationResponseModel : ResponseModel
public bool AccessSecretsManager { get; set; }
public bool LimitCollectionCreation { get; set; }
public bool LimitCollectionDeletion { get; set; }
- // Deprecated: https://bitwarden.atlassian.net/browse/PM-10863
- public bool LimitCollectionCreationDeletion { get; set; }
public bool AllowAdminAccessToAllCollectionItems { get; set; }
///
/// Indicates if the organization manages the user.
diff --git a/src/Api/AdminConsole/Models/Response/ProfileProviderOrganizationResponseModel.cs b/src/Api/AdminConsole/Models/Response/ProfileProviderOrganizationResponseModel.cs
index 4ec86a29a4..7227d7a11a 100644
--- a/src/Api/AdminConsole/Models/Response/ProfileProviderOrganizationResponseModel.cs
+++ b/src/Api/AdminConsole/Models/Response/ProfileProviderOrganizationResponseModel.cs
@@ -46,8 +46,6 @@ public class ProfileProviderOrganizationResponseModel : ProfileOrganizationRespo
ProductTierType = StaticStore.GetPlan(organization.PlanType).ProductTier;
LimitCollectionCreation = organization.LimitCollectionCreation;
LimitCollectionDeletion = organization.LimitCollectionDeletion;
- // https://bitwarden.atlassian.net/browse/PM-10863
- LimitCollectionCreationDeletion = organization.LimitCollectionCreationDeletion;
AllowAdminAccessToAllCollectionItems = organization.AllowAdminAccessToAllCollectionItems;
UseRiskInsights = organization.UseRiskInsights;
}
diff --git a/src/Api/Models/Request/Organizations/OrganizationCollectionManagementUpdateRequestModel.cs b/src/Api/Models/Request/Organizations/OrganizationCollectionManagementUpdateRequestModel.cs
index a5a6f1f74f..94f842ca1e 100644
--- a/src/Api/Models/Request/Organizations/OrganizationCollectionManagementUpdateRequestModel.cs
+++ b/src/Api/Models/Request/Organizations/OrganizationCollectionManagementUpdateRequestModel.cs
@@ -1,5 +1,4 @@
-using Bit.Core;
-using Bit.Core.AdminConsole.Entities;
+using Bit.Core.AdminConsole.Entities;
using Bit.Core.Services;
namespace Bit.Api.Models.Request.Organizations;
@@ -8,22 +7,12 @@ public class OrganizationCollectionManagementUpdateRequestModel
{
public bool LimitCollectionCreation { get; set; }
public bool LimitCollectionDeletion { get; set; }
- // Deprecated: https://bitwarden.atlassian.net/browse/PM-10863
- public bool LimitCreateDeleteOwnerAdmin { get; set; }
public bool AllowAdminAccessToAllCollectionItems { get; set; }
public virtual Organization ToOrganization(Organization existingOrganization, IFeatureService featureService)
{
- if (featureService.IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit))
- {
- existingOrganization.LimitCollectionCreation = LimitCollectionCreation;
- existingOrganization.LimitCollectionDeletion = LimitCollectionDeletion;
- }
- else
- {
- existingOrganization.LimitCollectionCreationDeletion = LimitCreateDeleteOwnerAdmin || LimitCollectionCreation || LimitCollectionDeletion;
- }
-
+ existingOrganization.LimitCollectionCreation = LimitCollectionCreation;
+ existingOrganization.LimitCollectionDeletion = LimitCollectionDeletion;
existingOrganization.AllowAdminAccessToAllCollectionItems = AllowAdminAccessToAllCollectionItems;
return existingOrganization;
}
diff --git a/src/Api/Vault/AuthorizationHandlers/Collections/BulkCollectionAuthorizationHandler.cs b/src/Api/Vault/AuthorizationHandlers/Collections/BulkCollectionAuthorizationHandler.cs
index c26d5b5952..909064c522 100644
--- a/src/Api/Vault/AuthorizationHandlers/Collections/BulkCollectionAuthorizationHandler.cs
+++ b/src/Api/Vault/AuthorizationHandlers/Collections/BulkCollectionAuthorizationHandler.cs
@@ -1,6 +1,5 @@
#nullable enable
using System.Diagnostics;
-using Bit.Core;
using Bit.Core.Context;
using Bit.Core.Entities;
using Bit.Core.Enums;
@@ -124,24 +123,15 @@ public class BulkCollectionAuthorizationHandler : BulkAuthorizationHandler, IStorableSubscriber, IRevisable,
///
public bool LimitCollectionCreation { get; set; }
public bool LimitCollectionDeletion { get; set; }
- // Deprecated by https://bitwarden.atlassian.net/browse/PM-10863. This
- // was replaced with `LimitCollectionCreation` and
- // `LimitCollectionDeletion`.
- public bool LimitCollectionCreationDeletion
- {
- get => LimitCollectionCreation || LimitCollectionDeletion;
- set
- {
- LimitCollectionCreation = value;
- LimitCollectionDeletion = value;
- }
- }
///
/// If set to true, admins, owners, and some custom users can read/write all collections and items in the Admin Console.
@@ -319,11 +307,5 @@ public class Organization : ITableObject, IStorableSubscriber, IRevisable,
UseSecretsManager = license.UseSecretsManager;
SmSeats = license.SmSeats;
SmServiceAccounts = license.SmServiceAccounts;
-
- if (!featureService.IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit))
- {
- LimitCollectionCreationDeletion = license.LimitCollectionCreationDeletion;
- AllowAdminAccessToAllCollectionItems = license.AllowAdminAccessToAllCollectionItems;
- }
}
}
diff --git a/src/Core/AdminConsole/Models/Data/Organizations/OrganizationAbility.cs b/src/Core/AdminConsole/Models/Data/Organizations/OrganizationAbility.cs
index 0da0928dbe..6392e483ce 100644
--- a/src/Core/AdminConsole/Models/Data/Organizations/OrganizationAbility.cs
+++ b/src/Core/AdminConsole/Models/Data/Organizations/OrganizationAbility.cs
@@ -23,8 +23,6 @@ public class OrganizationAbility
UsePolicies = organization.UsePolicies;
LimitCollectionCreation = organization.LimitCollectionCreation;
LimitCollectionDeletion = organization.LimitCollectionDeletion;
- // Deprecated: https://bitwarden.atlassian.net/browse/PM-10863
- LimitCollectionCreationDeletion = organization.LimitCollectionCreationDeletion;
AllowAdminAccessToAllCollectionItems = organization.AllowAdminAccessToAllCollectionItems;
UseRiskInsights = organization.UseRiskInsights;
}
@@ -43,8 +41,6 @@ public class OrganizationAbility
public bool UsePolicies { get; set; }
public bool LimitCollectionCreation { get; set; }
public bool LimitCollectionDeletion { get; set; }
- // Deprecated: https://bitwarden.atlassian.net/browse/PM-10863
- public bool LimitCollectionCreationDeletion { get; set; }
public bool AllowAdminAccessToAllCollectionItems { get; set; }
public bool UseRiskInsights { get; set; }
}
diff --git a/src/Core/AdminConsole/Models/Data/Organizations/OrganizationUsers/OrganizationUserOrganizationDetails.cs b/src/Core/AdminConsole/Models/Data/Organizations/OrganizationUsers/OrganizationUserOrganizationDetails.cs
index 7b9ea971d3..e06b6bd66a 100644
--- a/src/Core/AdminConsole/Models/Data/Organizations/OrganizationUsers/OrganizationUserOrganizationDetails.cs
+++ b/src/Core/AdminConsole/Models/Data/Organizations/OrganizationUsers/OrganizationUserOrganizationDetails.cs
@@ -56,8 +56,6 @@ public class OrganizationUserOrganizationDetails
public int? SmServiceAccounts { get; set; }
public bool LimitCollectionCreation { get; set; }
public bool LimitCollectionDeletion { get; set; }
- // Deprecated: https://bitwarden.atlassian.net/browse/PM-10863
- public bool LimitCollectionCreationDeletion { get; set; }
public bool AllowAdminAccessToAllCollectionItems { get; set; }
public bool UseRiskInsights { get; set; }
}
diff --git a/src/Core/AdminConsole/Models/Data/Organizations/SelfHostedOrganizationDetails.cs b/src/Core/AdminConsole/Models/Data/Organizations/SelfHostedOrganizationDetails.cs
index 1fa547d98b..bd727f707b 100644
--- a/src/Core/AdminConsole/Models/Data/Organizations/SelfHostedOrganizationDetails.cs
+++ b/src/Core/AdminConsole/Models/Data/Organizations/SelfHostedOrganizationDetails.cs
@@ -146,8 +146,6 @@ public class SelfHostedOrganizationDetails : Organization
OwnersNotifiedOfAutoscaling = OwnersNotifiedOfAutoscaling,
LimitCollectionCreation = LimitCollectionCreation,
LimitCollectionDeletion = LimitCollectionDeletion,
- // Deprecated: https://bitwarden.atlassian.net/browse/PM-10863
- LimitCollectionCreationDeletion = LimitCollectionCreationDeletion,
AllowAdminAccessToAllCollectionItems = AllowAdminAccessToAllCollectionItems,
Status = Status
};
diff --git a/src/Core/AdminConsole/Models/Data/Provider/ProviderUserOrganizationDetails.cs b/src/Core/AdminConsole/Models/Data/Provider/ProviderUserOrganizationDetails.cs
index c2880b543f..f37cc644d4 100644
--- a/src/Core/AdminConsole/Models/Data/Provider/ProviderUserOrganizationDetails.cs
+++ b/src/Core/AdminConsole/Models/Data/Provider/ProviderUserOrganizationDetails.cs
@@ -42,7 +42,6 @@ public class ProviderUserOrganizationDetails
public PlanType PlanType { get; set; }
public bool LimitCollectionCreation { get; set; }
public bool LimitCollectionDeletion { get; set; }
- public bool LimitCollectionCreationDeletion { get; set; }
public bool AllowAdminAccessToAllCollectionItems { get; set; }
public bool UseRiskInsights { get; set; }
}
diff --git a/src/Core/AdminConsole/Services/Implementations/OrganizationService.cs b/src/Core/AdminConsole/Services/Implementations/OrganizationService.cs
index 1ca047aa47..eebe76baef 100644
--- a/src/Core/AdminConsole/Services/Implementations/OrganizationService.cs
+++ b/src/Core/AdminConsole/Services/Implementations/OrganizationService.cs
@@ -581,14 +581,6 @@ public class OrganizationService : IOrganizationService
SmServiceAccounts = license.SmServiceAccounts,
};
- // These fields are being removed from consideration when processing
- // licenses.
- if (!_featureService.IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit))
- {
- organization.LimitCollectionCreationDeletion = license.LimitCollectionCreationDeletion;
- organization.AllowAdminAccessToAllCollectionItems = license.AllowAdminAccessToAllCollectionItems;
- }
-
var result = await SignUpAsync(organization, owner.Id, ownerKey, collectionName, false);
var dir = $"{_globalSettings.LicenseDirectory}/organization";
diff --git a/src/Core/Billing/Licenses/Services/Implementations/OrganizationLicenseClaimsFactory.cs b/src/Core/Billing/Licenses/Services/Implementations/OrganizationLicenseClaimsFactory.cs
index 300b87dcca..1aac7bb1d8 100644
--- a/src/Core/Billing/Licenses/Services/Implementations/OrganizationLicenseClaimsFactory.cs
+++ b/src/Core/Billing/Licenses/Services/Implementations/OrganizationLicenseClaimsFactory.cs
@@ -52,7 +52,11 @@ public class OrganizationLicenseClaimsFactory : ILicenseClaimsFactory Ciphers { get; set; }
public virtual ICollection OrganizationUsers { get; set; }
public virtual ICollection Groups { get; set; }
@@ -38,6 +43,7 @@ public class OrganizationMapperProfile : Profile
.ForMember(org => org.ApiKeys, opt => opt.Ignore())
.ForMember(org => org.Connections, opt => opt.Ignore())
.ForMember(org => org.Domains, opt => opt.Ignore())
+ .ForMember(org => org.LimitCollectionCreationDeletion, opt => opt.Ignore())
.ReverseMap();
CreateProjection()
diff --git a/src/Infrastructure.EntityFramework/AdminConsole/Repositories/OrganizationRepository.cs b/src/Infrastructure.EntityFramework/AdminConsole/Repositories/OrganizationRepository.cs
index 7a667db8f5..fb3766c6c7 100644
--- a/src/Infrastructure.EntityFramework/AdminConsole/Repositories/OrganizationRepository.cs
+++ b/src/Infrastructure.EntityFramework/AdminConsole/Repositories/OrganizationRepository.cs
@@ -101,10 +101,8 @@ public class OrganizationRepository : Repository().DidNotReceiveWithAnyArgs().IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
Assert.True(context.HasSucceeded);
}
[Theory, BitAutoData, CollectionCustomization]
- public async Task CanCreateAsync_WhenUser_WithLimitCollectionCreationFalse_WithLimitCollectionCreationDeletionSplitFeatureDisabled_Success(
+ public async Task CanCreateAsync_WhenUser_WithLimitCollectionCreationFalse_Success(
SutProvider sutProvider,
ICollection collections,
CurrentContextOrganization organization)
@@ -62,7 +57,7 @@ public class BulkCollectionAuthorizationHandlerTests
organization.Type = OrganizationUserType.User;
- ArrangeOrganizationAbility_WithLimitCollectionCreationDeletionSplitFeatureDisabled(sutProvider, organization, false, false);
+ ArrangeOrganizationAbility(sutProvider, organization, false, false);
var context = new AuthorizationHandlerContext(
new[] { BulkCollectionOperations.Create },
@@ -71,49 +66,16 @@ public class BulkCollectionAuthorizationHandlerTests
sutProvider.GetDependency().UserId.Returns(actingUserId);
sutProvider.GetDependency().GetOrganization(organization.Id).Returns(organization);
- sutProvider.GetDependency()
- .IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit)
- .Returns(false);
await sutProvider.Sut.HandleAsync(context);
- sutProvider.GetDependency().Received(1).IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
- Assert.True(context.HasSucceeded);
- }
-
- [Theory, BitAutoData, CollectionCustomization]
- public async Task CanCreateAsync_WhenUser_WithLimitCollectionCreationFalse_WithLimitCollectionCreationDeletionSplitFeatureEnabled_Success(
- SutProvider sutProvider,
- ICollection collections,
- CurrentContextOrganization organization)
- {
- var actingUserId = Guid.NewGuid();
-
- organization.Type = OrganizationUserType.User;
-
- ArrangeOrganizationAbility_WithLimitCollectionCreationDeletionSplitFeatureEnabled(sutProvider, organization, false, false);
-
- var context = new AuthorizationHandlerContext(
- new[] { BulkCollectionOperations.Create },
- new ClaimsPrincipal(),
- collections);
-
- sutProvider.GetDependency().UserId.Returns(actingUserId);
- sutProvider.GetDependency().GetOrganization(organization.Id).Returns(organization);
- sutProvider.GetDependency()
- .IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit)
- .Returns(true);
-
- await sutProvider.Sut.HandleAsync(context);
-
- sutProvider.GetDependency().Received(1).IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
Assert.True(context.HasSucceeded);
}
[Theory, CollectionCustomization]
[BitAutoData(OrganizationUserType.User)]
[BitAutoData(OrganizationUserType.Custom)]
- public async Task CanCreateAsync_WhenMissingPermissions_WithLimitCollectionCreationDeletionSplitFeatureDisabled_NoSuccess(
+ public async Task CanCreateAsync_WhenMissingPermissions_NoSuccess(
OrganizationUserType userType,
SutProvider sutProvider,
ICollection collections,
@@ -130,7 +92,7 @@ public class BulkCollectionAuthorizationHandlerTests
ManageUsers = false
};
- ArrangeOrganizationAbility_WithLimitCollectionCreationDeletionSplitFeatureDisabled(sutProvider, organization, true, true);
+ ArrangeOrganizationAbility(sutProvider, organization, true, true);
var context = new AuthorizationHandlerContext(
new[] { BulkCollectionOperations.Create },
@@ -140,61 +102,21 @@ public class BulkCollectionAuthorizationHandlerTests
sutProvider.GetDependency().UserId.Returns(actingUserId);
sutProvider.GetDependency().GetOrganization(organization.Id).Returns(organization);
sutProvider.GetDependency().ProviderUserForOrgAsync(Arg.Any()).Returns(false);
- sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit).Returns(false);
await sutProvider.Sut.HandleAsync(context);
- sutProvider.GetDependency().Received(1).IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
- Assert.False(context.HasSucceeded);
- }
-
- [Theory, CollectionCustomization]
- [BitAutoData(OrganizationUserType.User)]
- [BitAutoData(OrganizationUserType.Custom)]
- public async Task CanCreateAsync_WhenMissingPermissions_WithLimitCollectionCreationDeletionSplitFeatureEnabled_NoSuccess(
- OrganizationUserType userType,
- SutProvider sutProvider,
- ICollection collections,
- CurrentContextOrganization organization)
- {
- var actingUserId = Guid.NewGuid();
-
- organization.Type = userType;
- organization.Permissions = new Permissions
- {
- EditAnyCollection = false,
- DeleteAnyCollection = false,
- ManageGroups = false,
- ManageUsers = false
- };
-
- ArrangeOrganizationAbility_WithLimitCollectionCreationDeletionSplitFeatureEnabled(sutProvider, organization, true, true);
-
- var context = new AuthorizationHandlerContext(
- new[] { BulkCollectionOperations.Create },
- new ClaimsPrincipal(),
- collections);
-
- sutProvider.GetDependency().UserId.Returns(actingUserId);
- sutProvider.GetDependency().GetOrganization(organization.Id).Returns(organization);
- sutProvider.GetDependency().ProviderUserForOrgAsync(Arg.Any()).Returns(false);
- sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit).Returns(true);
-
- await sutProvider.Sut.HandleAsync(context);
-
- sutProvider.GetDependency().Received(1).IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
Assert.False(context.HasSucceeded);
}
[Theory, BitAutoData, CollectionCustomization]
- public async Task CanCreateAsync_WhenMissingOrgAccess_WithLimitCollectionCreationDeletionSplitDisabled_NoSuccess(
+ public async Task CanCreateAsync_WhenMissingOrgAccess_NoSuccess(
Guid userId,
CurrentContextOrganization organization,
List collections,
SutProvider sutProvider)
{
collections.ForEach(c => c.OrganizationId = organization.Id);
- ArrangeOrganizationAbility_WithLimitCollectionCreationDeletionSplitFeatureDisabled(sutProvider, organization, true, true);
+ ArrangeOrganizationAbility(sutProvider, organization, true, true);
var context = new AuthorizationHandlerContext(
new[] { BulkCollectionOperations.Create },
@@ -205,38 +127,9 @@ public class BulkCollectionAuthorizationHandlerTests
sutProvider.GetDependency().UserId.Returns(userId);
sutProvider.GetDependency().GetOrganization(Arg.Any()).Returns((CurrentContextOrganization)null);
sutProvider.GetDependency().ProviderUserForOrgAsync(Arg.Any()).Returns(false);
- sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit).Returns(false);
await sutProvider.Sut.HandleAsync(context);
- sutProvider.GetDependency().Received(1).IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
- Assert.False(context.HasSucceeded);
- }
-
- [Theory, BitAutoData, CollectionCustomization]
- public async Task CanCreateAsync_WhenMissingOrgAccess_WithLimitCollectionCreationDeletionSplitEnabled_NoSuccess(
- Guid userId,
- CurrentContextOrganization organization,
- List collections,
- SutProvider sutProvider)
- {
- collections.ForEach(c => c.OrganizationId = organization.Id);
- ArrangeOrganizationAbility_WithLimitCollectionCreationDeletionSplitFeatureEnabled(sutProvider, organization, true, true);
-
- var context = new AuthorizationHandlerContext(
- new[] { BulkCollectionOperations.Create },
- new ClaimsPrincipal(),
- collections
- );
-
- sutProvider.GetDependency().UserId.Returns(userId);
- sutProvider.GetDependency().GetOrganization(Arg.Any()).Returns((CurrentContextOrganization)null);
- sutProvider.GetDependency().ProviderUserForOrgAsync(Arg.Any()).Returns(false);
- sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit).Returns(true);
-
- await sutProvider.Sut.HandleAsync(context);
-
- sutProvider.GetDependency().Received(1).IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
Assert.False(context.HasSucceeded);
}
@@ -1015,7 +908,7 @@ public class BulkCollectionAuthorizationHandlerTests
// `LimitCollectonCreationDeletionSplit` feature flag state isn't
// relevant for this test. The flag is never checked for in this
// test. This is asserted below.
- ArrangeOrganizationAbility_WithLimitCollectionCreationDeletionSplitFeatureEnabled(sutProvider, organization, true, true);
+ ArrangeOrganizationAbility(sutProvider, organization, true, true);
var context = new AuthorizationHandlerContext(
new[] { BulkCollectionOperations.Delete },
@@ -1027,7 +920,6 @@ public class BulkCollectionAuthorizationHandlerTests
await sutProvider.Sut.HandleAsync(context);
- sutProvider.GetDependency().DidNotReceiveWithAnyArgs().IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
Assert.True(context.HasSucceeded);
}
@@ -1046,7 +938,7 @@ public class BulkCollectionAuthorizationHandlerTests
// `LimitCollectonCreationDeletionSplit` feature flag state isn't
// relevant for this test. The flag is never checked for in this
// test. This is asserted below.
- ArrangeOrganizationAbility_WithLimitCollectionCreationDeletionSplitFeatureEnabled(sutProvider, organization, true, true);
+ ArrangeOrganizationAbility(sutProvider, organization, true, true);
var context = new AuthorizationHandlerContext(
new[] { BulkCollectionOperations.Delete },
@@ -1058,12 +950,11 @@ public class BulkCollectionAuthorizationHandlerTests
await sutProvider.Sut.HandleAsync(context);
- sutProvider.GetDependency().DidNotReceiveWithAnyArgs().IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
Assert.True(context.HasSucceeded);
}
[Theory, BitAutoData, CollectionCustomization]
- public async Task CanDeleteAsync_WhenUser_LimitCollectionDeletionFalse_WithCanManagePermission_WithLimitCollectionCreationDeletionSplitFeatureDisabled_Success(
+ public async Task CanDeleteAsync_WhenUser_LimitCollectionDeletionFalse_WithCanManagePermission_Success(
SutProvider sutProvider,
ICollection collections,
CurrentContextOrganization organization)
@@ -1073,12 +964,11 @@ public class BulkCollectionAuthorizationHandlerTests
organization.Type = OrganizationUserType.User;
organization.Permissions = new Permissions();
- ArrangeOrganizationAbility_WithLimitCollectionCreationDeletionSplitFeatureDisabled(sutProvider, organization, false, false);
+ ArrangeOrganizationAbility(sutProvider, organization, false, false);
sutProvider.GetDependency().UserId.Returns(actingUserId);
sutProvider.GetDependency().GetOrganization(organization.Id).Returns(organization);
sutProvider.GetDependency().GetManyByUserIdAsync(actingUserId).Returns(collections);
- sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit).Returns(false);
foreach (var c in collections)
{
@@ -1092,41 +982,6 @@ public class BulkCollectionAuthorizationHandlerTests
await sutProvider.Sut.HandleAsync(context);
- sutProvider.GetDependency().Received(1).IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
- Assert.True(context.HasSucceeded);
- }
-
- [Theory, BitAutoData, CollectionCustomization]
- public async Task CanDeleteAsync_WhenUser_LimitCollectionDeletionFalse_WithCanManagePermission_WithLimitCollectionCreationDeletionSplitFeatureEnabled_Success(
- SutProvider sutProvider,
- ICollection collections,
- CurrentContextOrganization organization)
- {
- var actingUserId = Guid.NewGuid();
-
- organization.Type = OrganizationUserType.User;
- organization.Permissions = new Permissions();
-
- ArrangeOrganizationAbility_WithLimitCollectionCreationDeletionSplitFeatureEnabled(sutProvider, organization, false, false);
-
- sutProvider.GetDependency().UserId.Returns(actingUserId);
- sutProvider.GetDependency().GetOrganization(organization.Id).Returns(organization);
- sutProvider.GetDependency().GetManyByUserIdAsync(actingUserId).Returns(collections);
- sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit).Returns(true);
-
- foreach (var c in collections)
- {
- c.Manage = true;
- }
-
- var context = new AuthorizationHandlerContext(
- new[] { BulkCollectionOperations.Delete },
- new ClaimsPrincipal(),
- collections);
-
- await sutProvider.Sut.HandleAsync(context);
-
- sutProvider.GetDependency().Received(1).IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
Assert.True(context.HasSucceeded);
}
@@ -1134,7 +989,7 @@ public class BulkCollectionAuthorizationHandlerTests
[BitAutoData(OrganizationUserType.Admin)]
[BitAutoData(OrganizationUserType.Owner)]
[BitAutoData(OrganizationUserType.User)]
- public async Task CanDeleteAsync_LimitCollectionDeletionFalse_AllowAdminAccessToAllCollectionItemsFalse_WithCanManagePermission_WithLimitCollectionCreationDeletionSplitFeatureDisabled_Success(
+ public async Task CanDeleteAsync_LimitCollectionDeletionFalse_AllowAdminAccessToAllCollectionItemsFalse_WithCanManagePermission_Success(
OrganizationUserType userType,
SutProvider sutProvider,
ICollection collections,
@@ -1145,12 +1000,11 @@ public class BulkCollectionAuthorizationHandlerTests
organization.Type = userType;
organization.Permissions = new Permissions();
- ArrangeOrganizationAbility_WithLimitCollectionCreationDeletionSplitFeatureDisabled(sutProvider, organization, false, false, false);
+ ArrangeOrganizationAbility(sutProvider, organization, false, false, false);
sutProvider.GetDependency().UserId.Returns(actingUserId);
sutProvider.GetDependency().GetOrganization(organization.Id).Returns(organization);
sutProvider.GetDependency().GetManyByUserIdAsync(actingUserId).Returns(collections);
- sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit).Returns(false);
foreach (var c in collections)
{
@@ -1164,15 +1018,13 @@ public class BulkCollectionAuthorizationHandlerTests
await sutProvider.Sut.HandleAsync(context);
- sutProvider.GetDependency().Received(1).IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
Assert.True(context.HasSucceeded);
}
[Theory, CollectionCustomization]
[BitAutoData(OrganizationUserType.Admin)]
[BitAutoData(OrganizationUserType.Owner)]
- [BitAutoData(OrganizationUserType.User)]
- public async Task CanDeleteAsync_LimitCollectionDeletionFalse_AllowAdminAccessToAllCollectionItemsFalse_WithCanManagePermission_WithLimitCollectionCreationDeletionSplitFeatureEnabled_Success(
+ public async Task CanDeleteAsync_WhenAdminOrOwner_LimitCollectionDeletionTrue_AllowAdminAccessToAllCollectionItemsFalse_WithCanManagePermission_Success(
OrganizationUserType userType,
SutProvider sutProvider,
ICollection collections,
@@ -1183,12 +1035,11 @@ public class BulkCollectionAuthorizationHandlerTests
organization.Type = userType;
organization.Permissions = new Permissions();
- ArrangeOrganizationAbility_WithLimitCollectionCreationDeletionSplitFeatureEnabled(sutProvider, organization, false, false, false);
+ ArrangeOrganizationAbility(sutProvider, organization, true, true, false);
sutProvider.GetDependency().UserId.Returns(actingUserId);
sutProvider.GetDependency().GetOrganization(organization.Id).Returns(organization);
sutProvider.GetDependency().GetManyByUserIdAsync(actingUserId).Returns(collections);
- sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit).Returns(true);
foreach (var c in collections)
{
@@ -1202,14 +1053,13 @@ public class BulkCollectionAuthorizationHandlerTests
await sutProvider.Sut.HandleAsync(context);
- sutProvider.GetDependency().Received(1).IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
Assert.True(context.HasSucceeded);
}
[Theory, CollectionCustomization]
[BitAutoData(OrganizationUserType.Admin)]
[BitAutoData(OrganizationUserType.Owner)]
- public async Task CanDeleteAsync_WhenAdminOrOwner_LimitCollectionDeletionTrue_AllowAdminAccessToAllCollectionItemsFalse_WithCanManagePermission_WithLimitCollectionCreationDeletionSplitFeatureDisabled_Success(
+ public async Task CanDeleteAsync_WhenAdminOrOwner_LimitCollectionDeletionTrue_AllowAdminAccessToAllCollectionItemsFalse_WithoutCanManagePermission_Failure(
OrganizationUserType userType,
SutProvider sutProvider,
ICollection collections,
@@ -1220,87 +1070,12 @@ public class BulkCollectionAuthorizationHandlerTests
organization.Type = userType;
organization.Permissions = new Permissions();
- ArrangeOrganizationAbility_WithLimitCollectionCreationDeletionSplitFeatureDisabled(sutProvider, organization, true, true, false);
-
- sutProvider.GetDependency().UserId.Returns(actingUserId);
- sutProvider.GetDependency().GetOrganization(organization.Id).Returns(organization);
- sutProvider.GetDependency().GetManyByUserIdAsync(actingUserId).Returns(collections);
- sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit).Returns(false);
-
- foreach (var c in collections)
- {
- c.Manage = true;
- }
-
- var context = new AuthorizationHandlerContext(
- new[] { BulkCollectionOperations.Delete },
- new ClaimsPrincipal(),
- collections);
-
- await sutProvider.Sut.HandleAsync(context);
-
- sutProvider.GetDependency().Received(1).IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
- Assert.True(context.HasSucceeded);
- }
-
- [Theory, CollectionCustomization]
- [BitAutoData(OrganizationUserType.Admin)]
- [BitAutoData(OrganizationUserType.Owner)]
- public async Task CanDeleteAsync_WhenAdminOrOwner_LimitCollectionDeletionTrue_AllowAdminAccessToAllCollectionItemsFalse_WithCanManagePermission_WithLimitCollectionCreationDeletionSplitFeatureEnabled_Success(
- OrganizationUserType userType,
- SutProvider sutProvider,
- ICollection collections,
- CurrentContextOrganization organization)
- {
- var actingUserId = Guid.NewGuid();
-
- organization.Type = userType;
- organization.Permissions = new Permissions();
-
- ArrangeOrganizationAbility_WithLimitCollectionCreationDeletionSplitFeatureEnabled(sutProvider, organization, true, true, false);
-
- sutProvider.GetDependency().UserId.Returns(actingUserId);
- sutProvider.GetDependency().GetOrganization(organization.Id).Returns(organization);
- sutProvider.GetDependency().GetManyByUserIdAsync(actingUserId).Returns(collections);
- sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit).Returns(true);
-
- foreach (var c in collections)
- {
- c.Manage = true;
- }
-
- var context = new AuthorizationHandlerContext(
- new[] { BulkCollectionOperations.Delete },
- new ClaimsPrincipal(),
- collections);
-
- await sutProvider.Sut.HandleAsync(context);
-
- sutProvider.GetDependency().Received(1).IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
- Assert.True(context.HasSucceeded);
- }
-
- [Theory, CollectionCustomization]
- [BitAutoData(OrganizationUserType.Admin)]
- [BitAutoData(OrganizationUserType.Owner)]
- public async Task CanDeleteAsync_WhenAdminOrOwner_LimitCollectionDeletionTrue_AllowAdminAccessToAllCollectionItemsFalse_WithoutCanManagePermission_WithLimitCollectionCreationDeletionSplitFeatureDisabled_Failure(
- OrganizationUserType userType,
- SutProvider sutProvider,
- ICollection collections,
- CurrentContextOrganization organization)
- {
- var actingUserId = Guid.NewGuid();
-
- organization.Type = userType;
- organization.Permissions = new Permissions();
-
- ArrangeOrganizationAbility_WithLimitCollectionCreationDeletionSplitFeatureDisabled(sutProvider, organization, true, true, false);
+ ArrangeOrganizationAbility(sutProvider, organization, true, true, false);
sutProvider.GetDependency().UserId.Returns(actingUserId);
sutProvider.GetDependency().GetOrganization(organization.Id).Returns(organization);
sutProvider.GetDependency().GetManyByUserIdAsync(actingUserId).Returns(collections);
sutProvider.GetDependency().ProviderUserForOrgAsync(Arg.Any()).Returns(false);
- sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit).Returns(false);
foreach (var c in collections)
{
@@ -1314,50 +1089,11 @@ public class BulkCollectionAuthorizationHandlerTests
await sutProvider.Sut.HandleAsync(context);
- sutProvider.GetDependency().Received(1).IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
- Assert.False(context.HasSucceeded);
- }
-
- [Theory, CollectionCustomization]
- [BitAutoData(OrganizationUserType.Admin)]
- [BitAutoData(OrganizationUserType.Owner)]
- public async Task CanDeleteAsync_WhenAdminOrOwner_LimitCollectionDeletionTrue_AllowAdminAccessToAllCollectionItemsFalse_WithoutCanManagePermission_WithLimitCollectionCreationDeletionSplitFeatureEnabled_Failure(
- OrganizationUserType userType,
- SutProvider sutProvider,
- ICollection collections,
- CurrentContextOrganization organization)
- {
- var actingUserId = Guid.NewGuid();
-
- organization.Type = userType;
- organization.Permissions = new Permissions();
-
- ArrangeOrganizationAbility_WithLimitCollectionCreationDeletionSplitFeatureEnabled(sutProvider, organization, true, true, false);
-
- sutProvider.GetDependency().UserId.Returns(actingUserId);
- sutProvider.GetDependency().GetOrganization(organization.Id).Returns(organization);
- sutProvider.GetDependency().GetManyByUserIdAsync(actingUserId).Returns(collections);
- sutProvider.GetDependency().ProviderUserForOrgAsync(Arg.Any()).Returns(false);
- sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit).Returns(true);
-
- foreach (var c in collections)
- {
- c.Manage = false;
- }
-
- var context = new AuthorizationHandlerContext(
- new[] { BulkCollectionOperations.Delete },
- new ClaimsPrincipal(),
- collections);
-
- await sutProvider.Sut.HandleAsync(context);
-
- sutProvider.GetDependency().Received(1).IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
Assert.False(context.HasSucceeded);
}
[Theory, BitAutoData, CollectionCustomization]
- public async Task CanDeleteAsync_WhenUser_LimitCollectionDeletionTrue_AllowAdminAccessToAllCollectionItemsTrue_WithLimitCollectionCreationDeletionSplitFeatureDisabled_Failure(
+ public async Task CanDeleteAsync_WhenUser_LimitCollectionDeletionTrue_AllowAdminAccessToAllCollectionItemsTrue_Failure(
SutProvider sutProvider,
ICollection collections,
CurrentContextOrganization organization)
@@ -1367,13 +1103,12 @@ public class BulkCollectionAuthorizationHandlerTests
organization.Type = OrganizationUserType.User;
organization.Permissions = new Permissions();
- ArrangeOrganizationAbility_WithLimitCollectionCreationDeletionSplitFeatureDisabled(sutProvider, organization, true, true);
+ ArrangeOrganizationAbility(sutProvider, organization, true, true);
sutProvider.GetDependency().UserId.Returns(actingUserId);
sutProvider.GetDependency().GetOrganization(organization.Id).Returns(organization);
sutProvider.GetDependency().GetManyByUserIdAsync(actingUserId).Returns(collections);
sutProvider.GetDependency().ProviderUserForOrgAsync(Arg.Any()).Returns(false);
- sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit).Returns(false);
foreach (var c in collections)
{
@@ -1387,12 +1122,11 @@ public class BulkCollectionAuthorizationHandlerTests
await sutProvider.Sut.HandleAsync(context);
- sutProvider.GetDependency().Received(1).IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
Assert.False(context.HasSucceeded);
}
[Theory, BitAutoData, CollectionCustomization]
- public async Task CanDeleteAsync_WhenUser_LimitCollectionDeletionTrue_AllowAdminAccessToAllCollectionItemsTrue_WithLimitCollectionCreationDeletionSplitFeatureEnabled_Failure(
+ public async Task CanDeleteAsync_WhenUser_LimitCollectionDeletionTrue_AllowAdminAccessToAllCollectionItemsFalse_Failure(
SutProvider sutProvider,
ICollection collections,
CurrentContextOrganization organization)
@@ -1402,13 +1136,12 @@ public class BulkCollectionAuthorizationHandlerTests
organization.Type = OrganizationUserType.User;
organization.Permissions = new Permissions();
- ArrangeOrganizationAbility_WithLimitCollectionCreationDeletionSplitFeatureEnabled(sutProvider, organization, true, true);
+ ArrangeOrganizationAbility(sutProvider, organization, true, true, false);
sutProvider.GetDependency().UserId.Returns(actingUserId);
sutProvider.GetDependency().GetOrganization(organization.Id).Returns(organization);
sutProvider.GetDependency().GetManyByUserIdAsync(actingUserId).Returns(collections);
sutProvider.GetDependency().ProviderUserForOrgAsync(Arg.Any()).Returns(false);
- sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit).Returns(true);
foreach (var c in collections)
{
@@ -1422,88 +1155,13 @@ public class BulkCollectionAuthorizationHandlerTests
await sutProvider.Sut.HandleAsync(context);
- sutProvider.GetDependency().Received(1).IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
- Assert.False(context.HasSucceeded);
- }
-
- [Theory, BitAutoData, CollectionCustomization]
- public async Task CanDeleteAsync_WhenUser_LimitCollectionDeletionTrue_AllowAdminAccessToAllCollectionItemsFalse_WithLimitCollectionCreationDeletionSplitFeatureDisabled_Failure(
- SutProvider sutProvider,
- ICollection collections,
- CurrentContextOrganization organization)
- {
- var actingUserId = Guid.NewGuid();
-
- organization.Type = OrganizationUserType.User;
- organization.Permissions = new Permissions();
-
- ArrangeOrganizationAbility_WithLimitCollectionCreationDeletionSplitFeatureDisabled(sutProvider, organization, true, true, false);
-
- sutProvider.GetDependency().UserId.Returns(actingUserId);
- sutProvider.GetDependency().GetOrganization(organization.Id).Returns(organization);
- sutProvider.GetDependency().GetManyByUserIdAsync(actingUserId).Returns(collections);
- sutProvider.GetDependency().ProviderUserForOrgAsync(Arg.Any()).Returns(false);
- sutProvider.GetDependency()
- .IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit)
- .Returns(false);
-
- foreach (var c in collections)
- {
- c.Manage = true;
- }
-
- var context = new AuthorizationHandlerContext(
- new[] { BulkCollectionOperations.Delete },
- new ClaimsPrincipal(),
- collections);
-
- await sutProvider.Sut.HandleAsync(context);
-
- sutProvider.GetDependency().Received(1).IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
- Assert.False(context.HasSucceeded);
- }
-
- [Theory, BitAutoData, CollectionCustomization]
- public async Task CanDeleteAsync_WhenUser_LimitCollectionDeletionTrue_AllowAdminAccessToAllCollectionItemsFalse_WithLimitCollectionCreationDeletionSplitFeatureEnabled_Failure(
- SutProvider sutProvider,
- ICollection collections,
- CurrentContextOrganization organization)
- {
- var actingUserId = Guid.NewGuid();
-
- organization.Type = OrganizationUserType.User;
- organization.Permissions = new Permissions();
-
- ArrangeOrganizationAbility_WithLimitCollectionCreationDeletionSplitFeatureEnabled(sutProvider, organization, true, true, false);
-
- sutProvider.GetDependency().UserId.Returns(actingUserId);
- sutProvider.GetDependency().GetOrganization(organization.Id).Returns(organization);
- sutProvider.GetDependency().GetManyByUserIdAsync(actingUserId).Returns(collections);
- sutProvider.GetDependency().ProviderUserForOrgAsync(Arg.Any()).Returns(false);
- sutProvider.GetDependency()
- .IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit)
- .Returns(true);
-
- foreach (var c in collections)
- {
- c.Manage = true;
- }
-
- var context = new AuthorizationHandlerContext(
- new[] { BulkCollectionOperations.Delete },
- new ClaimsPrincipal(),
- collections);
-
- await sutProvider.Sut.HandleAsync(context);
-
- sutProvider.GetDependency().Received(1).IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
Assert.False(context.HasSucceeded);
}
[Theory, CollectionCustomization]
[BitAutoData(OrganizationUserType.User)]
[BitAutoData(OrganizationUserType.Custom)]
- public async Task CanDeleteAsync_WhenMissingPermissions_WithLimitCollectionCreationDeletionSplitFeatureDisabled_NoSuccess(
+ public async Task CanDeleteAsync_WhenMissingPermissions_NoSuccess(
OrganizationUserType userType,
SutProvider sutProvider,
ICollection collections,
@@ -1520,7 +1178,7 @@ public class BulkCollectionAuthorizationHandlerTests
ManageUsers = false
};
- ArrangeOrganizationAbility_WithLimitCollectionCreationDeletionSplitFeatureDisabled(sutProvider, organization, true, true);
+ ArrangeOrganizationAbility(sutProvider, organization, true, true);
var context = new AuthorizationHandlerContext(
new[] { BulkCollectionOperations.Delete },
@@ -1530,54 +1188,14 @@ public class BulkCollectionAuthorizationHandlerTests
sutProvider.GetDependency().UserId.Returns(actingUserId);
sutProvider.GetDependency().GetOrganization(organization.Id).Returns(organization);
sutProvider.GetDependency().ProviderUserForOrgAsync(Arg.Any()).Returns(false);
- sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit).Returns(false);
await sutProvider.Sut.HandleAsync(context);
- sutProvider.GetDependency().Received(1).IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
- Assert.False(context.HasSucceeded);
- }
-
- [Theory, CollectionCustomization]
- [BitAutoData(OrganizationUserType.User)]
- [BitAutoData(OrganizationUserType.Custom)]
- public async Task CanDeleteAsync_WhenMissingPermissions_WithLimitCollectionCreationDeletionSplitFeatureEnabled_NoSuccess(
- OrganizationUserType userType,
- SutProvider sutProvider,
- ICollection collections,
- CurrentContextOrganization organization)
- {
- var actingUserId = Guid.NewGuid();
-
- organization.Type = userType;
- organization.Permissions = new Permissions
- {
- EditAnyCollection = false,
- DeleteAnyCollection = false,
- ManageGroups = false,
- ManageUsers = false
- };
-
- ArrangeOrganizationAbility_WithLimitCollectionCreationDeletionSplitFeatureEnabled(sutProvider, organization, true, true);
-
- var context = new AuthorizationHandlerContext(
- new[] { BulkCollectionOperations.Delete },
- new ClaimsPrincipal(),
- collections);
-
- sutProvider.GetDependency().UserId.Returns(actingUserId);
- sutProvider.GetDependency().GetOrganization(organization.Id).Returns(organization);
- sutProvider.GetDependency().ProviderUserForOrgAsync(Arg.Any()).Returns(false);
- sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit).Returns(true);
-
- await sutProvider.Sut.HandleAsync(context);
-
- sutProvider.GetDependency().Received(1).IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
Assert.False(context.HasSucceeded);
}
[Theory, BitAutoData, CollectionCustomization]
- public async Task CanDeleteAsync_WhenMissingOrgAccess_WithLimitCollectionCreationDeletionSplitFeatureDisabled_NoSuccess(
+ public async Task CanDeleteAsync_WhenMissingOrgAccess_NoSuccess(
Guid userId,
ICollection collections,
SutProvider sutProvider)
@@ -1591,34 +1209,9 @@ public class BulkCollectionAuthorizationHandlerTests
sutProvider.GetDependency().UserId.Returns(userId);
sutProvider.GetDependency().GetOrganization(Arg.Any()).Returns((CurrentContextOrganization)null);
sutProvider.GetDependency().ProviderUserForOrgAsync(Arg.Any()).Returns(false);
- sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit).Returns(false);
await sutProvider.Sut.HandleAsync(context);
- sutProvider.GetDependency().Received(1).IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
- Assert.False(context.HasSucceeded);
- }
-
- [Theory, BitAutoData, CollectionCustomization]
- public async Task CanDeleteAsync_WhenMissingOrgAccess_WithLimitCollectionCreationDeletionSplitFeatureEnabled_NoSuccess(
- Guid userId,
- ICollection collections,
- SutProvider sutProvider)
- {
- var context = new AuthorizationHandlerContext(
- new[] { BulkCollectionOperations.Delete },
- new ClaimsPrincipal(),
- collections
- );
-
- sutProvider.GetDependency().UserId.Returns(userId);
- sutProvider.GetDependency().GetOrganization(Arg.Any()).Returns((CurrentContextOrganization)null);
- sutProvider.GetDependency().ProviderUserForOrgAsync(Arg.Any()).Returns(false);
- sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit).Returns(true);
-
- await sutProvider.Sut.HandleAsync(context);
-
- sutProvider.GetDependency().Received(1).IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
Assert.False(context.HasSucceeded);
}
@@ -1639,7 +1232,6 @@ public class BulkCollectionAuthorizationHandlerTests
await sutProvider.Sut.HandleAsync(context);
Assert.True(context.HasFailed);
sutProvider.GetDependency().DidNotReceiveWithAnyArgs();
- sutProvider.GetDependency().DidNotReceiveWithAnyArgs().IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
}
[Theory, BitAutoData, CollectionCustomization]
@@ -1663,66 +1255,10 @@ public class BulkCollectionAuthorizationHandlerTests
var exception = await Assert.ThrowsAsync(() => sutProvider.Sut.HandleAsync(context));
Assert.Equal("Requested collections must belong to the same organization.", exception.Message);
sutProvider.GetDependency().DidNotReceiveWithAnyArgs().GetOrganization(default);
- sutProvider.GetDependency().DidNotReceiveWithAnyArgs().IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit);
}
[Theory, BitAutoData, CollectionCustomization]
- public async Task HandleRequirementAsync_Provider_WithLimitCollectionCreationDeletionSplitFeatureDisabled_Success(
- SutProvider sutProvider,
- ICollection collections)
- {
- var actingUserId = Guid.NewGuid();
- var orgId = collections.First().OrganizationId;
-
- var organizationAbilities = new Dictionary
- {
- { collections.First().OrganizationId,
- new OrganizationAbility
- {
- LimitCollectionCreationDeletion = true,
- AllowAdminAccessToAllCollectionItems = true
- }
- }
- };
-
- var operationsToTest = new[]
- {
- BulkCollectionOperations.Create,
- BulkCollectionOperations.Read,
- BulkCollectionOperations.ReadAccess,
- BulkCollectionOperations.Update,
- BulkCollectionOperations.ModifyUserAccess,
- BulkCollectionOperations.ModifyGroupAccess,
- BulkCollectionOperations.Delete,
- };
-
- foreach (var op in operationsToTest)
- {
- sutProvider.GetDependency().UserId.Returns(actingUserId);
- sutProvider.GetDependency().GetOrganization(orgId).Returns((CurrentContextOrganization)null);
- sutProvider.GetDependency().GetOrganizationAbilitiesAsync()
- .Returns(organizationAbilities);
- sutProvider.GetDependency().ProviderUserForOrgAsync(Arg.Any()).Returns(true);
- sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit).Returns(false);
-
- var context = new AuthorizationHandlerContext(
- new[] { op },
- new ClaimsPrincipal(),
- collections
- );
-
- await sutProvider.Sut.HandleAsync(context);
-
- Assert.True(context.HasSucceeded);
- await sutProvider.GetDependency().Received().ProviderUserForOrgAsync(orgId);
-
- // Recreate the SUT to reset the mocks/dependencies between tests
- sutProvider.Recreate();
- }
- }
-
- [Theory, BitAutoData, CollectionCustomization]
- public async Task HandleRequirementAsync_Provider_WithLimitCollectionCreationDeletionSplitFeatureEnabled_Success(
+ public async Task HandleRequirementAsync_Provider_Success(
SutProvider sutProvider,
ICollection collections)
{
@@ -1759,7 +1295,6 @@ public class BulkCollectionAuthorizationHandlerTests
sutProvider.GetDependency().GetOrganizationAbilitiesAsync()
.Returns(organizationAbilities);
sutProvider.GetDependency().ProviderUserForOrgAsync(Arg.Any()).Returns(true);
- sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.LimitCollectionCreationDeletionSplit).Returns(true);
var context = new AuthorizationHandlerContext(
new[] { op },
@@ -1810,30 +1345,12 @@ public class BulkCollectionAuthorizationHandlerTests
await sutProvider.GetDependency().Received(1).GetManyByUserIdAsync(Arg.Any());
}
- private static void ArrangeOrganizationAbility_WithLimitCollectionCreationDeletionSplitFeatureDisabled(
- SutProvider sutProvider,
- CurrentContextOrganization organization,
- bool limitCollectionCreation,
- bool limitCollectionDeletion,
- bool allowAdminAccessToAllCollectionItems = true)
- {
- var organizationAbility = new OrganizationAbility();
- organizationAbility.Id = organization.Id;
-
- organizationAbility.LimitCollectionCreationDeletion = limitCollectionCreation || limitCollectionDeletion;
-
- organizationAbility.AllowAdminAccessToAllCollectionItems = allowAdminAccessToAllCollectionItems;
-
- sutProvider.GetDependency().GetOrganizationAbilityAsync(organizationAbility.Id)
- .Returns(organizationAbility);
- }
-
- private static void ArrangeOrganizationAbility_WithLimitCollectionCreationDeletionSplitFeatureEnabled(
- SutProvider sutProvider,
- CurrentContextOrganization organization,
- bool limitCollectionCreation,
- bool limitCollectionDeletion,
- bool allowAdminAccessToAllCollectionItems = true)
+ private static void ArrangeOrganizationAbility(
+ SutProvider sutProvider,
+ CurrentContextOrganization organization,
+ bool limitCollectionCreation,
+ bool limitCollectionDeletion,
+ bool allowAdminAccessToAllCollectionItems = true)
{
var organizationAbility = new OrganizationAbility();
organizationAbility.Id = organization.Id;
diff --git a/test/Core.Test/Models/Business/OrganizationLicenseFileFixtures.cs b/test/Core.Test/Models/Business/OrganizationLicenseFileFixtures.cs
index 500c4475a9..de5fb25fca 100644
--- a/test/Core.Test/Models/Business/OrganizationLicenseFileFixtures.cs
+++ b/test/Core.Test/Models/Business/OrganizationLicenseFileFixtures.cs
@@ -111,7 +111,8 @@ public static class OrganizationLicenseFileFixtures
SmServiceAccounts = 8,
MaxAutoscaleSmSeats = 101,
MaxAutoscaleSmServiceAccounts = 102,
- LimitCollectionCreationDeletion = true,
+ LimitCollectionCreation = true,
+ LimitCollectionDeletion = true,
AllowAdminAccessToAllCollectionItems = true,
};
}
diff --git a/test/Core.Test/OrganizationFeatures/OrganizationLicenses/UpdateOrganizationLicenseCommandTests.cs b/test/Core.Test/OrganizationFeatures/OrganizationLicenses/UpdateOrganizationLicenseCommandTests.cs
index b8e677177c..420d330aaa 100644
--- a/test/Core.Test/OrganizationFeatures/OrganizationLicenses/UpdateOrganizationLicenseCommandTests.cs
+++ b/test/Core.Test/OrganizationFeatures/OrganizationLicenses/UpdateOrganizationLicenseCommandTests.cs
@@ -83,11 +83,12 @@ public class UpdateOrganizationLicenseCommandTests
.Received(1)
.ReplaceAndUpdateCacheAsync(Arg.Is(
org => AssertPropertyEqual(license, org,
- "Id", "MaxStorageGb", "Issued", "Refresh", "Version", "Trial", "LicenseType",
- "Hash", "Signature", "SignatureBytes", "InstallationId", "Expires",
- "ExpirationWithoutGracePeriod", "Token") &&
- // Same property but different name, use explicit mapping
- org.ExpirationDate == license.Expires));
+ "Id", "MaxStorageGb", "Issued", "Refresh", "Version", "Trial", "LicenseType",
+ "Hash", "Signature", "SignatureBytes", "InstallationId", "Expires",
+ "ExpirationWithoutGracePeriod", "Token", "LimitCollectionCreationDeletion",
+ "LimitCollectionCreation", "LimitCollectionDeletion", "AllowAdminAccessToAllCollectionItems") &&
+ // Same property but different name, use explicit mapping
+ org.ExpirationDate == license.Expires));
}
finally
{
diff --git a/test/Infrastructure.IntegrationTest/AdminConsole/Repositories/OrganizationUserRepositoryTests.cs b/test/Infrastructure.IntegrationTest/AdminConsole/Repositories/OrganizationUserRepositoryTests.cs
index 4732d8a474..aee4beb8ce 100644
--- a/test/Infrastructure.IntegrationTest/AdminConsole/Repositories/OrganizationUserRepositoryTests.cs
+++ b/test/Infrastructure.IntegrationTest/AdminConsole/Repositories/OrganizationUserRepositoryTests.cs
@@ -255,8 +255,6 @@ public class OrganizationUserRepositoryTests
Assert.Equal(organization.SmServiceAccounts, result.SmServiceAccounts);
Assert.Equal(organization.LimitCollectionCreation, result.LimitCollectionCreation);
Assert.Equal(organization.LimitCollectionDeletion, result.LimitCollectionDeletion);
- // Deprecated: https://bitwarden.atlassian.net/browse/PM-10863
- Assert.Equal(organization.LimitCollectionCreationDeletion, result.LimitCollectionCreationDeletion);
Assert.Equal(organization.AllowAdminAccessToAllCollectionItems, result.AllowAdminAccessToAllCollectionItems);
Assert.Equal(organization.UseRiskInsights, result.UseRiskInsights);
}