Sample ASP.NET Core 6.0 reference application, powered by Microsoft, demonstrating a layered application architecture with monolithic deployment model. Download the eBook PDF from docs folder.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

83 lines
2.4 KiB

using ApplicationCore.Exceptions;
using ApplicationCore.Interfaces;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.eShopWeb.Controllers;
using Microsoft.Extensions.Logging;
using Moq;
using Xunit;
namespace UnitTests
{
public class CatalogControllerGetImage
{
private Mock<IImageService> _mockImageService = new Mock<IImageService>();
private Mock<ILogger<CatalogController>> _mockLogger = new Mock<ILogger<CatalogController>>();
private CatalogController _controller;
private int _testImageId = 123;
private byte[] _testBytes = { 0x01, 0x02, 0x03 };
public CatalogControllerGetImage()
{
_controller = new CatalogController(null, null, _mockImageService.Object,
_mockLogger.Object);
}
[Fact]
public void CallsImageServiceWithId()
{
SetupImageWithTestBytes();
_controller.GetImage(_testImageId);
_mockImageService.Verify();
}
[Fact]
public void ReturnsFileResultWithBytesGivenSuccess()
{
SetupImageWithTestBytes();
var result = _controller.GetImage(_testImageId);
var fileResult = Assert.IsType<FileContentResult>(result);
var bytes = Assert.IsType<byte[]>(fileResult.FileContents);
}
[Fact]
public void ReturnsNotFoundResultGivenImageMissingException()
{
SetupMissingImage();
var result = _controller.GetImage(_testImageId);
var actionResult = Assert.IsType<NotFoundResult>(result);
}
[Fact]
public void LogsWarningGivenImageMissingException()
{
SetupMissingImage();
_mockLogger.Setup(l => l.LogWarning(It.IsAny<string>()))
.Verifiable();
_controller.GetImage(_testImageId);
_mockLogger.Verify();
}
private void SetupMissingImage()
{
_mockImageService
.Setup(i => i.GetImageBytesById(_testImageId))
.Throws(new CatalogImageMissingException("missing image"));
}
private void SetupImageWithTestBytes()
{
_mockImageService
.Setup(i => i.GetImageBytesById(_testImageId))
.Returns(_testBytes)
.Verifiable();
}
}
}