mirror of
https://github.com/tgstation/tgstation-server.git
synced 2026-07-15 01:52:54 +01:00
Add TestDatabaseContextFactory
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user