using Bit.Api.KeyManagement.Validators; using Bit.Api.Vault.Models.Request; using Bit.Core.Entities; using Bit.Core.Exceptions; using Bit.Core.Vault.Entities; using Bit.Core.Vault.Repositories; using Bit.Test.Common.AutoFixture; using Bit.Test.Common.AutoFixture.Attributes; using NSubstitute; using Xunit; namespace Bit.Api.Test.KeyManagement.Validators; [SutProviderCustomize] public class FolderRotationValidatorTests { [Theory] [BitAutoData] public async Task ValidateAsync_MissingFolder_Throws(SutProvider sutProvider, User user, IEnumerable folders) { var userFolders = folders.Select(f => f.ToFolder(new Folder())).ToList(); userFolders.Add(new Folder { Id = Guid.NewGuid(), Name = "Missing Folder" }); sutProvider.GetDependency().GetManyByUserIdAsync(user.Id).Returns(userFolders); await Assert.ThrowsAsync(async () => await sutProvider.Sut.ValidateAsync(user, folders)); } [Theory] [BitAutoData] public async Task ValidateAsync_FolderDoesNotBelongToUser_NotReturned( SutProvider sutProvider, User user, IEnumerable folders) { var userFolders = folders.Select(f => f.ToFolder(new Folder())).ToList(); userFolders.RemoveAt(0); sutProvider.GetDependency().GetManyByUserIdAsync(user.Id).Returns(userFolders); var result = await sutProvider.Sut.ValidateAsync(user, folders); Assert.DoesNotContain(result, c => c.Id == folders.First().Id); } [Theory, BitAutoData] public async Task ValidateAsync_SentFoldersAreEmptyButDatabaseFoldersAreNot_Throws( SutProvider sutProvider, User user, IEnumerable folders) { var userFolders = folders.Select(f => f.ToFolder(new Folder())).ToList(); sutProvider.GetDependency().GetManyByUserIdAsync(user.Id).Returns(userFolders); await Assert.ThrowsAsync(async () => await sutProvider.Sut.ValidateAsync(user, Enumerable.Empty())); } }