From b92f06b7fa74cba020461c75813c24aa8fa69869 Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Tue, 2 Oct 2018 12:04:42 -0400 Subject: [PATCH] Add TestDatabaseContextFactory --- .../Core/TestDatabaseContextFactory.cs | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 tests/Tgstation.Server.Host.Tests/Core/TestDatabaseContextFactory.cs diff --git a/tests/Tgstation.Server.Host.Tests/Core/TestDatabaseContextFactory.cs b/tests/Tgstation.Server.Host.Tests/Core/TestDatabaseContextFactory.cs new file mode 100644 index 0000000000..7585c8a300 --- /dev/null +++ b/tests/Tgstation.Server.Host.Tests/Core/TestDatabaseContextFactory.cs @@ -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(() => new DatabaseContextFactory(null)); + var mockProvider = new Mock(); + mockProvider.Setup(x => x.GetService(typeof(IDatabaseContext))).Verifiable(); + var mockScope = new Mock(); + mockScope.SetupGet(x => x.ServiceProvider).Returns(mockProvider.Object).Verifiable(); + var mockScopeFactory = new Mock(); + mockScopeFactory.Setup(x => x.CreateScope()).Returns(mockScope.Object).Verifiable(); + Assert.ThrowsException(() => new DatabaseContextFactory(mockScopeFactory.Object)); + mockScopeFactory.VerifyAll(); + mockScope.VerifyAll(); + mockProvider.VerifyAll(); + } + + [TestMethod] + public async Task TestWorks() + { + var mockDatabase = new Mock(); + var mockProvider = new Mock(); + var mockDbo = mockDatabase.Object; + mockProvider.Setup(x => x.GetService(typeof(IDatabaseContext))).Returns(mockDbo).Verifiable(); + var mockScope = new Mock(); + mockScope.SetupGet(x => x.ServiceProvider).Returns(mockProvider.Object).Verifiable(); + var mockScopeFactory = new Mock(); + mockScopeFactory.Setup(x => x.CreateScope()).Returns(mockScope.Object).Verifiable(); + + var factory = new DatabaseContextFactory(mockScopeFactory.Object); + + await Assert.ThrowsExceptionAsync(() => factory.UseContext(null)).ConfigureAwait(false); + + await factory.UseContext(context => + { + Assert.AreSame(mockDbo, context); + return Task.CompletedTask; + }); + + mockScopeFactory.VerifyAll(); + mockScope.VerifyAll(); + mockProvider.VerifyAll(); + } + } +}