-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBaseControllerTests.cs
More file actions
55 lines (46 loc) · 1.75 KB
/
Copy pathBaseControllerTests.cs
File metadata and controls
55 lines (46 loc) · 1.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Vulthil.xUnit;
namespace Vulthil.SharedKernel.Api.Tests;
public sealed class BaseControllerTests : BaseUnitTestCase<BaseControllerTests.TestController>
{
private readonly Mock<ILoggerFactory> _loggerFactoryMock = new();
private readonly ILogger _logger = Mock.Of<ILogger>();
private string? _capturedCategoryName;
protected override TestController CreateInstance()
{
_loggerFactoryMock
.Setup(factory => factory.CreateLogger(It.IsAny<string>()))
.Callback<string>(categoryName => _capturedCategoryName = categoryName)
.Returns(_logger);
var services = new ServiceCollection();
services.AddSingleton(_loggerFactoryMock.Object);
var provider = services.BuildServiceProvider();
return new TestController
{
ControllerContext = new ControllerContext
{
HttpContext = new DefaultHttpContext { RequestServices = provider }
}
};
}
[Fact]
public void LoggerResolvesCategoryForTheConcreteControllerTypeAndCachesTheInstance()
{
// Arrange
// Act
var first = Target.ExposeLogger();
var second = Target.ExposeLogger();
// Assert
Assert.Same(_logger, first);
Assert.Same(first, second);
Assert.Contains(nameof(TestController), _capturedCategoryName, StringComparison.Ordinal);
_loggerFactoryMock.Verify(factory => factory.CreateLogger(It.IsAny<string>()), Times.Once);
}
public sealed class TestController : BaseController
{
public ILogger ExposeLogger() => Logger;
}
}