forked from dotnet-architecture/eShopOnWeb
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request dotnet-architecture#6 from dotnet-architecture/ard…
…alis/tests Adding unit tests
- Loading branch information
Showing
13 changed files
with
241 additions
and
21 deletions.
There are no files selected for viewing
18 changes: 18 additions & 0 deletions
18
src/ApplicationCore/Exceptions/CatalogImageMissingException.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
using System; | ||
|
||
namespace ApplicationCore.Exceptions | ||
{ | ||
public class CatalogImageMissingException : Exception | ||
{ | ||
public CatalogImageMissingException(string message, | ||
Exception innerException = null) | ||
: base(message, innerException: innerException) | ||
{ | ||
} | ||
public CatalogImageMissingException(Exception innerException) | ||
: base("No catalog image found for the provided id.", | ||
innerException: innerException) | ||
{ | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
namespace ApplicationCore.Interfaces | ||
{ | ||
public interface IAppLogger<T> | ||
{ | ||
void LogWarning(string message, params object[] args); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -14,5 +14,4 @@ public interface IIdentityParser<T> | |
{ | ||
T Parse(IPrincipal principal); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
namespace ApplicationCore.Interfaces | ||
{ | ||
public interface IImageService | ||
{ | ||
byte[] GetImageBytesById(int id); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
using ApplicationCore.Exceptions; | ||
using ApplicationCore.Interfaces; | ||
using Microsoft.AspNetCore.Hosting; | ||
using System.IO; | ||
|
||
namespace Infrastructure.FileSystem | ||
{ | ||
public class LocalFileImageService : IImageService | ||
{ | ||
private readonly IHostingEnvironment _env; | ||
|
||
public LocalFileImageService(IHostingEnvironment env) | ||
{ | ||
_env = env; | ||
} | ||
public byte[] GetImageBytesById(int id) | ||
{ | ||
try | ||
{ | ||
var contentRoot = _env.ContentRootPath + "//Pics"; | ||
var path = Path.Combine(contentRoot, id + ".png"); | ||
return File.ReadAllBytes(path); | ||
} | ||
catch (FileNotFoundException ex) | ||
{ | ||
throw new CatalogImageMissingException(ex); | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
using ApplicationCore.Interfaces; | ||
using Microsoft.Extensions.Logging; | ||
|
||
namespace Infrastructure.Logging | ||
{ | ||
public class LoggerAdapter<T> : IAppLogger<T> | ||
{ | ||
private readonly ILogger<T> _logger; | ||
public LoggerAdapter(ILoggerFactory loggerFactory) | ||
{ | ||
_logger = loggerFactory.CreateLogger<T>(); | ||
} | ||
public void LogWarning(string message, params object[] args) | ||
{ | ||
_logger.LogWarning(message, args); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
17 changes: 17 additions & 0 deletions
17
tests/IntegrationTests/Web/Controllers/CatalogControllerGetImage.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
using Microsoft.eShopWeb.Controllers; | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Text; | ||
using Xunit; | ||
|
||
namespace IntegrationTests.Web.Controllers | ||
{ | ||
public class CatalogControllerGetImage | ||
{ | ||
[Fact] | ||
public void ReturnsFileContentResultGivenValidId() | ||
{ | ||
//var controller = new CatalogController() | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,25 @@ | ||
<Project Sdk="Microsoft.NET.Sdk"> | ||
<Project Sdk="Microsoft.NET.Sdk"> | ||
|
||
<PropertyGroup> | ||
<TargetFramework>netcoreapp1.1</TargetFramework> | ||
</PropertyGroup> | ||
|
||
<ItemGroup> | ||
<PackageReference Include="Microsoft.AspNetCore" Version="1.1.0" /> | ||
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.0" /> | ||
|
||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" /> | ||
<PackageReference Include="Moq" Version="4.7.8" /> | ||
<PackageReference Include="xunit" Version="2.2.0" /> | ||
<PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" /> | ||
</ItemGroup> | ||
|
||
<ItemGroup> | ||
<ProjectReference Include="..\..\src\Web\Web.csproj" /> | ||
</ItemGroup> | ||
|
||
<ItemGroup> | ||
<Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" /> | ||
</ItemGroup> | ||
|
||
</Project> |
83 changes: 83 additions & 0 deletions
83
tests/UnitTests/Web/Controllers/CatalogControllerGetImage.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
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<IAppLogger<CatalogController>> _mockLogger = new Mock<IAppLogger<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(); | ||
} | ||
} | ||
} |