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 _mockClient; [SetUp] public void Setup() { var mockBlobClient = new Mock(); var mockBlobContainerClient = new Mock(); mockBlobClient.Setup(client => client.GetClient()).Returns(mockBlobContainerClient.Object); _dao = new BlobApiDao(mockBlobClient.Object); _mockClient = new Mock(); mockBlobContainerClient.Setup(client => client.GetBlobClient(It.IsAny())).Returns(_mockClient.Object); } [Test] public async Task SaveDocumentToBlob_Success() { var fileData = Encoding.UTF8.GetBytes("test"); _mockClient.Setup( mock => mock.UploadAsync(It.IsAny())).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())).ThrowsAsync(new Exception("Exception thrown from unit test.")).Verifiable(); Assert.ThrowsAsync(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(), 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(), true, CancellationToken.None)).ThrowsAsync(new Exception("Exception thrown from unit test.")).Verifiable(); Assert.ThrowsAsync(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(), 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(), CancellationToken.None)).ThrowsAsync(new Exception("Exception thrown from unit test.")).Verifiable(); Assert.ThrowsAsync(async () => await _dao.RemoveDocumentFromBlob(blobDocId)); _mockClient.Verify(); } [Test] public async Task GetDocumentFromBlob_Success() { var blobDocId = Guid.NewGuid(); _mockClient.Setup(mock => mock.DownloadStreamingAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny>(),It.IsAny())).Verifiable(); await _dao.GetDocumentFromBlob(blobDocId); _mockClient.Verify(); } [Test] public void GetDocumentFromBlob_Exception_ThrowsException() { var blobDocId = Guid.NewGuid(); _mockClient.Setup( mock => mock.DownloadStreamingAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny>(), It.IsAny())).ThrowsAsync(new Exception("Exception thrown from unit test.")).Verifiable(); Assert.ThrowsAsync(async () => await _dao.GetDocumentFromBlob(blobDocId)); _mockClient.Verify(); } }