From 021eaa444c0e1a5ef4ab7bb505402f67256584a6 Mon Sep 17 00:00:00 2001 From: Rui Tome Date: Thu, 26 Oct 2023 12:22:56 +0100 Subject: [PATCH] [AC-1139] Added unit test to test setting users with EditAssignedCollections with Manage permission when saving a collection --- .../Implementations/CollectionService.cs | 2 +- .../Services/CollectionServiceTests.cs | 34 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/Core/Services/Implementations/CollectionService.cs b/src/Core/Services/Implementations/CollectionService.cs index 9c3eefd8f8..bf2a5a510f 100644 --- a/src/Core/Services/Implementations/CollectionService.cs +++ b/src/Core/Services/Implementations/CollectionService.cs @@ -69,7 +69,7 @@ public class CollectionService : ICollectionService else { // If not using Flexible Collections - // all users with EditAssignedCollections permission should have Manage permission for the collection + // all Organization users with EditAssignedCollections permission should have Manage permission for the collection var organizationUsers = await _organizationUserRepository .GetManyByOrganizationAsync(collection.OrganizationId, null); foreach (var orgUser in organizationUsers.Where(ou => ou.GetPermissions()?.EditAssignedCollections ?? false)) diff --git a/test/Core.Test/Services/CollectionServiceTests.cs b/test/Core.Test/Services/CollectionServiceTests.cs index 97565bba4b..128f52ce57 100644 --- a/test/Core.Test/Services/CollectionServiceTests.cs +++ b/test/Core.Test/Services/CollectionServiceTests.cs @@ -7,6 +7,7 @@ using Bit.Core.Repositories; using Bit.Core.Services; using Bit.Core.Test.AutoFixture; using Bit.Core.Test.AutoFixture.OrganizationFixtures; +using Bit.Core.Utilities; using Bit.Test.Common.AutoFixture; using Bit.Test.Common.AutoFixture.Attributes; using NSubstitute; @@ -36,6 +37,39 @@ public class CollectionServiceTest Assert.True(collection.RevisionDate - utcNow < TimeSpan.FromSeconds(1)); } + [Theory, BitAutoData] + public async Task SaveAsync_DefaultIdWithUsers_WithOneEditAssignedCollectionsUser_CreatesCollectionInTheRepository( + Collection collection, Organization organization, + [CollectionAccessSelectionCustomize] IEnumerable users, + SutProvider sutProvider) + { + collection.Id = default; + collection.OrganizationId = organization.Id; + sutProvider.GetDependency().GetByIdAsync(collection.OrganizationId).Returns(organization); + sutProvider.GetDependency() + .GetManyByOrganizationAsync(collection.OrganizationId, Arg.Any()) + .Returns(new List + { + users.Select(x => new OrganizationUser + { + Id = x.Id, + Type = OrganizationUserType.Custom, + Permissions = CoreHelpers.ClassToJsonData(new Permissions { EditAssignedCollections = true }) + }).First() + }); + var utcNow = DateTime.UtcNow; + + await sutProvider.Sut.SaveAsync(collection, null, users); + + await sutProvider.GetDependency().Received() + .CreateAsync(collection, Arg.Is>(l => l == null), + Arg.Is>(l => l.Count(i => i.Manage == true) == 1)); + await sutProvider.GetDependency().Received() + .LogCollectionEventAsync(collection, EventType.Collection_Created); + Assert.True(collection.CreationDate - utcNow < TimeSpan.FromSeconds(1)); + Assert.True(collection.RevisionDate - utcNow < TimeSpan.FromSeconds(1)); + } + [Theory, BitAutoData] public async Task SaveAsync_DefaultIdWithGroupsAndUsers_CreateCollectionWithGroupsAndUsersInRepository(Collection collection, [CollectionAccessSelectionCustomize(true)] IEnumerable groups, IEnumerable users, Organization organization, SutProvider sutProvider)