|
|
|
|
@ -225,130 +225,6 @@ public class CipherServiceTests
@@ -225,130 +225,6 @@ public class CipherServiceTests
|
|
|
|
|
Assert.NotNull(result.uploadUrl); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Theory, BitAutoData] |
|
|
|
|
public async Task UploadFileForExistingAttachmentAsync_WrongRevisionDate_Throws(SutProvider<CipherService> sutProvider, |
|
|
|
|
Cipher cipher) |
|
|
|
|
{ |
|
|
|
|
var lastKnownRevisionDate = cipher.RevisionDate.AddDays(-1); |
|
|
|
|
var stream = new MemoryStream(); |
|
|
|
|
var attachment = new CipherAttachment.MetaData |
|
|
|
|
{ |
|
|
|
|
AttachmentId = "test-attachment-id", |
|
|
|
|
Size = 100, |
|
|
|
|
FileName = "test.txt", |
|
|
|
|
Key = "test-key" |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
var exception = await Assert.ThrowsAsync<BadRequestException>( |
|
|
|
|
() => sutProvider.Sut.UploadFileForExistingAttachmentAsync(stream, cipher, attachment, lastKnownRevisionDate)); |
|
|
|
|
Assert.Contains("out of date", exception.Message); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Theory] |
|
|
|
|
[BitAutoData("")] |
|
|
|
|
[BitAutoData("Correct Time")] |
|
|
|
|
public async Task UploadFileForExistingAttachmentAsync_CorrectRevisionDate_DoesNotThrow(string revisionDateString, |
|
|
|
|
SutProvider<CipherService> sutProvider, CipherDetails cipher) |
|
|
|
|
{ |
|
|
|
|
var lastKnownRevisionDate = string.IsNullOrEmpty(revisionDateString) ? (DateTime?)null : cipher.RevisionDate; |
|
|
|
|
var stream = new MemoryStream(new byte[100]); |
|
|
|
|
var attachmentId = "test-attachment-id"; |
|
|
|
|
var attachment = new CipherAttachment.MetaData |
|
|
|
|
{ |
|
|
|
|
AttachmentId = attachmentId, |
|
|
|
|
Size = 100, |
|
|
|
|
FileName = "test.txt", |
|
|
|
|
Key = "test-key" |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
// Set the attachment on the cipher so ValidateCipherAttachmentFile can find it |
|
|
|
|
cipher.SetAttachments(new Dictionary<string, CipherAttachment.MetaData> |
|
|
|
|
{ |
|
|
|
|
[attachmentId] = attachment |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
sutProvider.GetDependency<IAttachmentStorageService>() |
|
|
|
|
.UploadNewAttachmentAsync(stream, cipher, attachment) |
|
|
|
|
.Returns(Task.CompletedTask); |
|
|
|
|
|
|
|
|
|
sutProvider.GetDependency<IAttachmentStorageService>() |
|
|
|
|
.ValidateFileAsync(cipher, attachment, Arg.Any<long>()) |
|
|
|
|
.Returns((true, 100L)); |
|
|
|
|
|
|
|
|
|
sutProvider.GetDependency<ICipherRepository>() |
|
|
|
|
.UpdateAttachmentAsync(Arg.Any<CipherAttachment>()) |
|
|
|
|
.Returns(Task.CompletedTask); |
|
|
|
|
|
|
|
|
|
await sutProvider.Sut.UploadFileForExistingAttachmentAsync(stream, cipher, attachment, lastKnownRevisionDate); |
|
|
|
|
|
|
|
|
|
await sutProvider.GetDependency<IAttachmentStorageService>().Received(1) |
|
|
|
|
.UploadNewAttachmentAsync(stream, cipher, attachment); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Theory, BitAutoData] |
|
|
|
|
public async Task CreateAttachmentShareAsync_WrongRevisionDate_Throws(SutProvider<CipherService> sutProvider, |
|
|
|
|
Cipher cipher, Guid organizationId) |
|
|
|
|
{ |
|
|
|
|
var lastKnownRevisionDate = cipher.RevisionDate.AddDays(-1); |
|
|
|
|
var stream = new MemoryStream(); |
|
|
|
|
var fileName = "test.txt"; |
|
|
|
|
var key = "test-key"; |
|
|
|
|
var attachmentId = "attachment-id"; |
|
|
|
|
|
|
|
|
|
var exception = await Assert.ThrowsAsync<BadRequestException>( |
|
|
|
|
() => sutProvider.Sut.CreateAttachmentShareAsync(cipher, stream, fileName, key, 100, attachmentId, organizationId, lastKnownRevisionDate)); |
|
|
|
|
Assert.Contains("out of date", exception.Message); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Theory] |
|
|
|
|
[BitAutoData("")] |
|
|
|
|
[BitAutoData("Correct Time")] |
|
|
|
|
public async Task CreateAttachmentShareAsync_CorrectRevisionDate_DoesNotThrow(string revisionDateString, |
|
|
|
|
SutProvider<CipherService> sutProvider, CipherDetails cipher, Guid organizationId) |
|
|
|
|
{ |
|
|
|
|
var lastKnownRevisionDate = string.IsNullOrEmpty(revisionDateString) ? (DateTime?)null : cipher.RevisionDate; |
|
|
|
|
var stream = new MemoryStream(new byte[100]); |
|
|
|
|
var fileName = "test.txt"; |
|
|
|
|
var key = "test-key"; |
|
|
|
|
var attachmentId = "attachment-id"; |
|
|
|
|
|
|
|
|
|
// Setup cipher with existing attachment (no TempMetadata) |
|
|
|
|
cipher.OrganizationId = null; |
|
|
|
|
cipher.SetAttachments(new Dictionary<string, CipherAttachment.MetaData> |
|
|
|
|
{ |
|
|
|
|
[attachmentId] = new CipherAttachment.MetaData |
|
|
|
|
{ |
|
|
|
|
AttachmentId = attachmentId, |
|
|
|
|
Size = 100, |
|
|
|
|
FileName = "existing.txt", |
|
|
|
|
Key = "existing-key" |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
// Mock organization |
|
|
|
|
var organization = new Organization |
|
|
|
|
{ |
|
|
|
|
Id = organizationId, |
|
|
|
|
MaxStorageGb = 1 |
|
|
|
|
}; |
|
|
|
|
sutProvider.GetDependency<IOrganizationRepository>() |
|
|
|
|
.GetByIdAsync(organizationId) |
|
|
|
|
.Returns(organization); |
|
|
|
|
|
|
|
|
|
sutProvider.GetDependency<IAttachmentStorageService>() |
|
|
|
|
.UploadShareAttachmentAsync(stream, cipher.Id, organizationId, Arg.Any<CipherAttachment.MetaData>()) |
|
|
|
|
.Returns(Task.CompletedTask); |
|
|
|
|
|
|
|
|
|
sutProvider.GetDependency<ICipherRepository>() |
|
|
|
|
.UpdateAttachmentAsync(Arg.Any<CipherAttachment>()) |
|
|
|
|
.Returns(Task.CompletedTask); |
|
|
|
|
|
|
|
|
|
await sutProvider.Sut.CreateAttachmentShareAsync(cipher, stream, fileName, key, 100, attachmentId, organizationId, lastKnownRevisionDate); |
|
|
|
|
|
|
|
|
|
await sutProvider.GetDependency<IAttachmentStorageService>().Received(1) |
|
|
|
|
.UploadShareAttachmentAsync(stream, cipher.Id, organizationId, Arg.Any<CipherAttachment.MetaData>()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Theory] |
|
|
|
|
[BitAutoData] |
|
|
|
|
public async Task SaveDetailsAsync_PersonalVault_WithOrganizationDataOwnershipPolicyEnabled_Throws( |
|
|
|
|
|