< Summary

Information
Class: MRA.Infrastructure.Storage.AzureStorageProvider
Assembly: MRA.Infrastructure
File(s): D:\a\MiguelRomerART\MiguelRomerART\MRA.Infrastructure\Storage\AzureStorageProvider.cs
Line coverage
79%
Covered lines: 31
Uncovered lines: 8
Coverable lines: 39
Total lines: 87
Line coverage: 79.4%
Branch coverage
50%
Covered branches: 1
Total branches: 2
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
ListBlobFilesAsync()100%210%
GetBlobURL()100%11100%
ConvertToModel(...)100%210%
ExistsBlob()100%11100%
ResizeAndSave()100%11100%
ResizeAndSave()100%11100%
UploadImageToBlob()100%11100%
Save()100%11100%
CrearThumbnailName(...)50%22100%

File(s)

D:\a\MiguelRomerART\MiguelRomerART\MRA.Infrastructure\Storage\AzureStorageProvider.cs

#LineLine coverage
 1using Azure.Storage.Blobs.Models;
 2using Azure.Storage.Blobs;
 3using MRA.Infrastructure.Settings;
 4using SixLabors.ImageSharp;
 5using MRA.Infrastructure.Storage.Connection;
 6
 7namespace MRA.Infrastructure.Storage;
 8
 9public class AzureStorageProvider : IStorageProvider
 10{
 11    private readonly string blobContainer;
 12    private readonly string blobPath;
 13    private readonly IAzureStorageConnection _connection;
 14
 15
 816    public AzureStorageProvider(AppSettings config, IAzureStorageConnection connection)
 17    {
 818        blobContainer = config.AzureStorage.BlobStorageContainer;
 819        blobPath = config.AzureStorage.BlobPath;
 820        _connection = connection;
 821    }
 22
 23    public async Task<List<BlobFileInfo>> ListBlobFilesAsync()
 24    {
 025        var containerClient = _connection.GetContainer(blobContainer);
 026        return await _connection.GetListBlobsAsync(blobContainer).Select(model => ConvertToModel(containerClient, model)
 027    }
 28
 129    public string GetBlobURL() => blobPath;
 30
 31    private BlobFileInfo ConvertToModel(BlobContainerClient containerClient, BlobItem blobItem)
 32    {
 033        return new BlobFileInfo
 034        {
 035            Name = blobItem.Name,
 036            Url = $"{containerClient.Uri}/{blobItem.Name}"
 037        };
 38    }
 39
 40    public async Task<bool> ExistsBlob(string rutaBlob)
 41    {
 242        return await _connection.BlobExists(blobContainer, rutaBlob);
 243    }
 44
 45    public async Task<bool> ResizeAndSave(string path, string blobName, int width)
 46    {
 147        using var imagenOriginal = await path.LoadImageAsync();
 148        imagenOriginal.ResizeImageIfNecessary(width);
 149        return await UploadImageToBlob(blobName, imagenOriginal);
 150    }
 51
 52    public async Task<bool> ResizeAndSave(MemoryStream inputStream, string blobName, int width)
 53    {
 154        using var imagenOriginal = await inputStream.LoadImageAsync();
 155        imagenOriginal.ResizeImageIfNecessary(width);
 156        return await UploadImageToBlob(blobName, imagenOriginal);
 157    }
 58
 59    private async Task<bool> UploadImageToBlob(string blobPath, Image image)
 60    {
 261        using var memoryStream = new MemoryStream();
 262        await image.SaveAsPngAsync(memoryStream);
 63
 264        memoryStream.Seek(0, SeekOrigin.Begin);
 65
 266        return await _connection.UploadImageAsync(blobContainer, blobPath, memoryStream) is not null;
 267    }
 68
 69    public async Task<bool> Save(Stream stream, string blobLocation, string blobName)
 70    {
 171        return await _connection.UploadAsync(
 172            containerName: blobContainer,
 173            blobPath: Path.Combine(blobLocation, blobName),
 174            stream) is not null;
 175    }
 76
 77    public string CrearThumbnailName(string imagePath)
 78    {
 179        string fileName = Path.GetFileNameWithoutExtension(imagePath);
 180        string thumbnailFileName = $"{fileName}_tn.png";
 81
 182        string folder = Path.GetDirectoryName(imagePath) ?? string.Empty;
 183        string newPath = Path.Combine(folder, thumbnailFileName).Replace('\\', '/');
 84
 185        return newPath;
 86    }
 87}