From c47ebedcfc79bbf722c819ade0e6490317fec46f Mon Sep 17 00:00:00 2001 From: Rui Tome Date: Thu, 26 Oct 2023 14:54:36 +0100 Subject: [PATCH] [AC-1139] Added unit tests for OrganizationService InviteUser and SaveUser with EditAssignedCollections = true --- .../Services/CollectionServiceTests.cs | 6 +- .../Services/OrganizationServiceTests.cs | 84 +++++++++++++++++++ 2 files changed, 89 insertions(+), 1 deletion(-) diff --git a/test/Core.Test/Services/CollectionServiceTests.cs b/test/Core.Test/Services/CollectionServiceTests.cs index 128f52ce57..8f3d16e70b 100644 --- a/test/Core.Test/Services/CollectionServiceTests.cs +++ b/test/Core.Test/Services/CollectionServiceTests.cs @@ -38,11 +38,15 @@ public class CollectionServiceTest } [Theory, BitAutoData] - public async Task SaveAsync_DefaultIdWithUsers_WithOneEditAssignedCollectionsUser_CreatesCollectionInTheRepository( + public async Task SaveAsync_DefaultIdWithUsers_WithOneEditAssignedCollectionsUser_WhileFCFlagDisabled_CreatesCollectionInTheRepository( Collection collection, Organization organization, [CollectionAccessSelectionCustomize] IEnumerable users, SutProvider sutProvider) { + sutProvider.GetDependency() + .IsEnabled(FeatureFlagKeys.FlexibleCollections, Arg.Any(), Arg.Any()) + .Returns(false); + collection.Id = default; collection.OrganizationId = organization.Id; sutProvider.GetDependency().GetByIdAsync(collection.OrganizationId).Returns(organization); diff --git a/test/Core.Test/Services/OrganizationServiceTests.cs b/test/Core.Test/Services/OrganizationServiceTests.cs index 62b6dda35b..6083c05bcd 100644 --- a/test/Core.Test/Services/OrganizationServiceTests.cs +++ b/test/Core.Test/Services/OrganizationServiceTests.cs @@ -19,6 +19,7 @@ using Bit.Core.OrganizationFeatures.OrganizationUsers.Interfaces; using Bit.Core.Repositories; using Bit.Core.Services; using Bit.Core.Settings; +using Bit.Core.Test.AutoFixture; using Bit.Core.Test.AutoFixture.OrganizationFixtures; using Bit.Core.Test.AutoFixture.OrganizationUserFixtures; using Bit.Core.Test.AutoFixture.PolicyFixtures; @@ -753,6 +754,53 @@ public class OrganizationServiceTests }); } + [Theory] + [OrganizationInviteCustomize( + InviteeUserType = OrganizationUserType.Custom, + InvitorUserType = OrganizationUserType.Owner + ), BitAutoData] + public async Task InviteUser_WithEditAssignedCollectionsTrue_WhileFCFlagDisabled_SetsCollectionsManageTrue(Organization organization, (OrganizationUserInvite invite, string externalId) invite, + OrganizationUser invitor, + [OrganizationUser(OrganizationUserStatusType.Confirmed, OrganizationUserType.Owner)] OrganizationUser owner, + SutProvider sutProvider) + { + invite.invite.Permissions = new Permissions { EditAssignedCollections = true }; + + sutProvider.GetDependency() + .IsEnabled(FeatureFlagKeys.FlexibleCollections, Arg.Any(), Arg.Any()) + .Returns(false); + + var organizationRepository = sutProvider.GetDependency(); + var organizationUserRepository = sutProvider.GetDependency(); + var currentContext = sutProvider.GetDependency(); + + organizationRepository.GetByIdAsync(organization.Id).Returns(organization); + organizationUserRepository.GetManyByOrganizationAsync(organization.Id, OrganizationUserType.Owner) + .Returns(new[] { owner }); + currentContext.ManageUsers(organization.Id).Returns(true); + currentContext.EditAssignedCollections(organization.Id).Returns(true); + currentContext.GetOrganization(organization.Id) + .Returns(new CurrentContextOrganization + { + Permissions = new Permissions + { + CreateNewCollections = true, + DeleteAnyCollection = true + } + }); + + await sutProvider.Sut.InviteUsersAsync(organization.Id, invitor.UserId, new[] { invite }); + + await sutProvider.GetDependency() + .Received(invite.invite.Emails.Count()) + .CreateAsync(Arg.Is(ou => + ou.OrganizationId == organization.Id && + ou.Type == invite.invite.Type && + invite.invite.Emails.Contains(ou.Email)), + Arg.Is>(collections => + collections.All(c => c.Manage))); + } + private void InviteUserHelper_ArrangeValidPermissions(Organization organization, OrganizationUser savingUser, SutProvider sutProvider) { @@ -814,6 +862,42 @@ public class OrganizationServiceTests await sutProvider.Sut.SaveUserAsync(newUserData, savingUser.UserId, collections, groups); } + [Theory, BitAutoData] + public async Task SaveUser_WithEditAssignedCollections_WhileFCFlagDisabled_SetsCollectionsManageTrue( + Organization organization, + OrganizationUser oldUserData, + OrganizationUser newUserData, + [CollectionAccessSelectionCustomize] IEnumerable collections, + IEnumerable groups, + [OrganizationUser(type: OrganizationUserType.Owner)] OrganizationUser savingUser, + SutProvider sutProvider) + { + sutProvider.GetDependency() + .IsEnabled(FeatureFlagKeys.FlexibleCollections, Arg.Any(), Arg.Any()) + .Returns(false); + + var organizationRepository = sutProvider.GetDependency(); + var organizationUserRepository = sutProvider.GetDependency(); + var currentContext = sutProvider.GetDependency(); + + organizationRepository.GetByIdAsync(organization.Id).Returns(organization); + + newUserData.Id = oldUserData.Id; + newUserData.UserId = oldUserData.UserId; + newUserData.OrganizationId = savingUser.OrganizationId = oldUserData.OrganizationId = organization.Id; + newUserData.Permissions = CoreHelpers.ClassToJsonData(new Permissions { EditAssignedCollections = true }); + organizationUserRepository.GetByIdAsync(oldUserData.Id).Returns(oldUserData); + organizationUserRepository.GetManyByOrganizationAsync(savingUser.OrganizationId, OrganizationUserType.Owner) + .Returns(new List { savingUser }); + currentContext.OrganizationOwner(savingUser.OrganizationId).Returns(true); + + await sutProvider.Sut.SaveUserAsync(newUserData, savingUser.UserId, collections, groups); + + await sutProvider.GetDependency().Received(1).ReplaceAsync( + Arg.Is(ou => ou.Id == newUserData.Id), + Arg.Is>(i => i.All(c => c.Manage))); + } + [Theory, BitAutoData] public async Task SaveUser_WithCustomType_WhenUseCustomPermissionsIsFalse_Throws( Organization organization,