Add TestDatabaseContextFactory

This commit is contained in:
Cyberboss
2018-10-02 12:04:42 -04:00
parent 85f4b700f3
commit b92f06b7fa
@@ -0,0 +1,56 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;
using System;
using System.Threading.Tasks;
using Tgstation.Server.Host.Models;
namespace Tgstation.Server.Host.Core.Tests
{
[TestClass]
public sealed class TestDatabaseContextFactory
{
[TestMethod]
public void TestConstructionThrows()
{
Assert.ThrowsException<ArgumentNullException>(() => new DatabaseContextFactory(null));
var mockProvider = new Mock<IServiceProvider>();
mockProvider.Setup(x => x.GetService(typeof(IDatabaseContext))).Verifiable();
var mockScope = new Mock<IServiceScope>();
mockScope.SetupGet(x => x.ServiceProvider).Returns(mockProvider.Object).Verifiable();
var mockScopeFactory = new Mock<IServiceScopeFactory>();
mockScopeFactory.Setup(x => x.CreateScope()).Returns(mockScope.Object).Verifiable();
Assert.ThrowsException<InvalidOperationException>(() => new DatabaseContextFactory(mockScopeFactory.Object));
mockScopeFactory.VerifyAll();
mockScope.VerifyAll();
mockProvider.VerifyAll();
}
[TestMethod]
public async Task TestWorks()
{
var mockDatabase = new Mock<IDatabaseContext>();
var mockProvider = new Mock<IServiceProvider>();
var mockDbo = mockDatabase.Object;
mockProvider.Setup(x => x.GetService(typeof(IDatabaseContext))).Returns(mockDbo).Verifiable();
var mockScope = new Mock<IServiceScope>();
mockScope.SetupGet(x => x.ServiceProvider).Returns(mockProvider.Object).Verifiable();
var mockScopeFactory = new Mock<IServiceScopeFactory>();
mockScopeFactory.Setup(x => x.CreateScope()).Returns(mockScope.Object).Verifiable();
var factory = new DatabaseContextFactory(mockScopeFactory.Object);
await Assert.ThrowsExceptionAsync<ArgumentNullException>(() => factory.UseContext(null)).ConfigureAwait(false);
await factory.UseContext(context =>
{
Assert.AreSame(mockDbo, context);
return Task.CompletedTask;
});
mockScopeFactory.VerifyAll();
mockScope.VerifyAll();
mockProvider.VerifyAll();
}
}
}