119 lines
4.3 KiB
C#
119 lines
4.3 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using Azure;
|
|
using Azure.Storage.Blobs;
|
|
using Azure.Storage.Blobs.Models;
|
|
using LCU.API.Internal.DocumentLib.DataAccess;
|
|
using Moq;
|
|
using NUnit.Framework;
|
|
|
|
namespace LCU.API.Internal.DocumentTest.DataAccess;
|
|
|
|
public class BlobApiDaoTest
|
|
{
|
|
|
|
private BlobApiDao _dao;
|
|
private Mock<BlobClient> _mockClient;
|
|
|
|
[SetUp]
|
|
public void Setup()
|
|
{
|
|
var mockBlobClient = new Mock<IBlobStorageClient>();
|
|
var mockBlobContainerClient = new Mock<BlobContainerClient>();
|
|
mockBlobClient.Setup(client => client.GetClient()).Returns(mockBlobContainerClient.Object);
|
|
|
|
_dao = new BlobApiDao(mockBlobClient.Object);
|
|
_mockClient = new Mock<BlobClient>();
|
|
mockBlobContainerClient.Setup(client => client.GetBlobClient(It.IsAny<string>())).Returns(_mockClient.Object);
|
|
}
|
|
|
|
[Test]
|
|
public async Task SaveDocumentToBlob_Success()
|
|
{
|
|
var fileData = Encoding.UTF8.GetBytes("test");
|
|
_mockClient.Setup( mock => mock.UploadAsync(It.IsAny<Stream>())).Verifiable();
|
|
|
|
var result = await _dao.SaveDocumentToBlob(fileData);
|
|
|
|
Assert.NotNull(result);
|
|
_mockClient.Verify();
|
|
}
|
|
|
|
[Test]
|
|
public void SaveDocumentToBlob_Exception_ThrowsException()
|
|
{
|
|
var fileData = Encoding.UTF8.GetBytes("test");
|
|
_mockClient.Setup( mock => mock.UploadAsync(It.IsAny<Stream>())).ThrowsAsync(new Exception("Exception thrown from unit test.")).Verifiable();
|
|
|
|
Assert.ThrowsAsync<Exception>(async () => await _dao.SaveDocumentToBlob(fileData));
|
|
_mockClient.Verify();
|
|
}
|
|
|
|
[Test]
|
|
public async Task UpdateDocumentInBlob_Success()
|
|
{
|
|
var blobDocId = Guid.NewGuid();
|
|
var fileData = Encoding.UTF8.GetBytes("test");
|
|
_mockClient.Setup( mock => mock.UploadAsync(It.IsAny<Stream>(), true, CancellationToken.None)).Verifiable();
|
|
|
|
await _dao.UpdateDocumentInBlob(blobDocId, fileData);
|
|
|
|
_mockClient.Verify();
|
|
}
|
|
|
|
[Test]
|
|
public void UpdateDocumentInBlob_Exception_ThrowsException()
|
|
{
|
|
var blobDocId = Guid.NewGuid();
|
|
var fileData = Encoding.UTF8.GetBytes("test");
|
|
_mockClient.Setup( mock => mock.UploadAsync(It.IsAny<Stream>(), true, CancellationToken.None)).ThrowsAsync(new Exception("Exception thrown from unit test.")).Verifiable();
|
|
|
|
Assert.ThrowsAsync<Exception>(async () => await _dao.UpdateDocumentInBlob(blobDocId, fileData));
|
|
_mockClient.Verify();
|
|
}
|
|
|
|
[Test]
|
|
public async Task RemoveDocumentFromBlob_Success()
|
|
{
|
|
var blobDocId = Guid.NewGuid();
|
|
_mockClient.Setup(mock => mock.DeleteAsync(DeleteSnapshotsOption.IncludeSnapshots, It.IsAny<BlobRequestConditions>(), CancellationToken.None)).Verifiable();
|
|
|
|
await _dao.RemoveDocumentFromBlob(blobDocId);
|
|
|
|
_mockClient.Verify();
|
|
}
|
|
|
|
[Test]
|
|
public void RemoveDocumentFromBlob_Exception_ThrowsException()
|
|
{
|
|
var blobDocId = Guid.NewGuid();
|
|
_mockClient.Setup( mock => mock.DeleteAsync(DeleteSnapshotsOption.IncludeSnapshots, It.IsAny<BlobRequestConditions>(), CancellationToken.None)).ThrowsAsync(new Exception("Exception thrown from unit test.")).Verifiable();
|
|
|
|
Assert.ThrowsAsync<Exception>(async () => await _dao.RemoveDocumentFromBlob(blobDocId));
|
|
_mockClient.Verify();
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetDocumentFromBlob_Success()
|
|
{
|
|
var blobDocId = Guid.NewGuid();
|
|
_mockClient.Setup(mock => mock.DownloadStreamingAsync(It.IsAny<HttpRange>(), It.IsAny<BlobRequestConditions>(), It.IsAny<bool>(), It.IsAny<IProgress<long>>(),It.IsAny<CancellationToken>())).Verifiable();
|
|
|
|
await _dao.GetDocumentFromBlob(blobDocId);
|
|
|
|
_mockClient.Verify();
|
|
}
|
|
|
|
[Test]
|
|
public void GetDocumentFromBlob_Exception_ThrowsException()
|
|
{
|
|
var blobDocId = Guid.NewGuid();
|
|
_mockClient.Setup( mock => mock.DownloadStreamingAsync(It.IsAny<HttpRange>(), It.IsAny<BlobRequestConditions>(), It.IsAny<bool>(), It.IsAny<IProgress<long>>(), It.IsAny<CancellationToken>())).ThrowsAsync(new Exception("Exception thrown from unit test.")).Verifiable();
|
|
|
|
Assert.ThrowsAsync<Exception>(async () => await _dao.GetDocumentFromBlob(blobDocId));
|
|
_mockClient.Verify();
|
|
}
|
|
} |