mirror of
https://github.com/bitwarden/server
synced 2026-01-12 21:44:13 +00:00
* add Archives column to ciphers table * add archives column * update cipher archive/unarchive and cipher deatils query * add migrations * add missing migrations * fixes * update tests. cleanup * syntax fix * fix sql syntax * fix sql * fix CreateWithCollections * fix sql * fix migration file * fix migration * add go * add missing go * fix migrations * add missing proc * fix migrations * implement claude suggestions * fix test * update cipher service and tests * updates to soft delete * update UserCipherDetailsQuery and migration * update migration * update archive ciphers command to allow org ciphers to be archived * updates to archivedDate * revert change to UserCipherDetails * updates to migration and procs * remove archivedDate from Cipher_CreateWithCollections * remove trailing comma * fix syntax errors * fix migration * add double quotes around datetime * fix syntax error * remove archivedDate from cipher entity * re-add ArchivedDate into cipher * fix migration * do not set Cipher.ArchivedDate in CipherRepository * re-add ArchivedDate until removed from the db * set defaults * change to CREATE OR ALTER * fix migration * fix migration file * quote datetime * fix existing archiveAsync test. add additional test * quote datetime * update migration * do not wrap datetime in quotes * do not wrap datetime in quotes * fix migration * clean up archives and archivedDate from procs * fix UserCipherDetailsQuery * fix setting date in JSON_MODIFY * prefer cast over convert * fix cipher response model * re-add ArchivedDate * add new keyword * remove ArchivedDate from entity * use custom parameters for CipherDetails_CreateWithCollections * remove reference to archivedDate * add missing param * add missing param * fix params * fix cipher repository * fix migration file * update request/response models * update migration * remove Archives from Cipher_CreateWithCollections * revert last change * clean up * remove comment * remove column in migration * change language in drop * wrap in brackets * put drop column in separate migration * remove archivedDate column * re-add archivedDate * add refresh module * bump migration name * fix proc and migration * do not require edit permission for archiving ciphers * do not require edit permission for unarchiving ciphers
78 lines
2.7 KiB
C#
78 lines
2.7 KiB
C#
using Bit.Core.Entities;
|
|
using Bit.Core.Platform.Push;
|
|
using Bit.Core.Test.AutoFixture.CipherFixtures;
|
|
using Bit.Core.Vault.Commands;
|
|
using Bit.Core.Vault.Models.Data;
|
|
using Bit.Core.Vault.Repositories;
|
|
using Bit.Test.Common.AutoFixture;
|
|
using Bit.Test.Common.AutoFixture.Attributes;
|
|
using NSubstitute;
|
|
using Xunit;
|
|
|
|
namespace Bit.Core.Test.Vault.Commands;
|
|
|
|
[UserCipherCustomize]
|
|
[SutProviderCustomize]
|
|
public class UnarchiveCiphersCommandTest
|
|
{
|
|
[Theory]
|
|
[BitAutoData(true, 1, 1, 1)]
|
|
[BitAutoData(false, 1, 0, 1)]
|
|
[BitAutoData(false, 1, 0, 1)]
|
|
[BitAutoData(true, 1, 1, 1)]
|
|
public async Task UnarchiveAsync_Works(
|
|
bool hasOrganizationId,
|
|
int cipherRepoCalls, int resultCountFromQuery, int pushNotificationsCalls,
|
|
SutProvider<UnarchiveCiphersCommand> sutProvider, CipherDetails cipher, User user)
|
|
{
|
|
cipher.OrganizationId = hasOrganizationId ? Guid.NewGuid() : null;
|
|
|
|
var cipherList = new List<CipherDetails> { cipher };
|
|
|
|
sutProvider.GetDependency<ICipherRepository>()
|
|
.GetManyByUserIdAsync(user.Id).Returns(cipherList);
|
|
|
|
// Act
|
|
await sutProvider.Sut.UnarchiveManyAsync([cipher.Id], user.Id);
|
|
|
|
// Assert
|
|
await sutProvider.GetDependency<ICipherRepository>().Received(cipherRepoCalls).UnarchiveAsync(
|
|
Arg.Is<IEnumerable<Guid>>(ids => ids.Count() == resultCountFromQuery
|
|
&& ids.Count() >= 1
|
|
? true
|
|
: ids.All(id => cipherList.Contains(cipher))),
|
|
user.Id);
|
|
await sutProvider.GetDependency<IPushNotificationService>().Received(pushNotificationsCalls)
|
|
.PushSyncCiphersAsync(user.Id);
|
|
}
|
|
|
|
[Theory]
|
|
[BitAutoData]
|
|
public async Task UnarchiveAsync_ClearsArchivedDateOnReturnedCiphers(
|
|
SutProvider<UnarchiveCiphersCommand> sutProvider,
|
|
CipherDetails cipher,
|
|
User user)
|
|
{
|
|
cipher.OrganizationId = null;
|
|
cipher.ArchivedDate = DateTime.UtcNow;
|
|
|
|
sutProvider.GetDependency<ICipherRepository>()
|
|
.GetManyByUserIdAsync(user.Id)
|
|
.Returns(new List<CipherDetails> { cipher });
|
|
|
|
var repoRevisionDate = DateTime.UtcNow.AddMinutes(1);
|
|
|
|
sutProvider.GetDependency<ICipherRepository>()
|
|
.UnarchiveAsync(Arg.Any<IEnumerable<Guid>>(), user.Id)
|
|
.Returns(repoRevisionDate);
|
|
|
|
// Act
|
|
var result = await sutProvider.Sut.UnarchiveManyAsync(new[] { cipher.Id }, user.Id);
|
|
|
|
// Assert
|
|
var unarchivedCipher = Assert.Single(result);
|
|
Assert.Equal(repoRevisionDate, unarchivedCipher.RevisionDate);
|
|
Assert.Null(unarchivedCipher.ArchivedDate);
|
|
}
|
|
}
|