Files
monorepo/LCU.API.Internal.Document/LCU.API.Internal.DocumentTest/DataAccess/BlobApiDaoTest.cs
T
2026-03-13 09:11:35 -05:00

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();
}
}