Template
97 lines
4.2 KiB
C#
97 lines
4.2 KiB
C#
using FluentAssertions;
|
|
using Microsoft.Extensions.Logging;
|
|
using Moq;
|
|
using NUnit.Framework;
|
|
using Strata.ContinuousImprovement.Biz.Configuration;
|
|
using Strata.ContinuousImprovement.Biz.DbContexts;
|
|
using Strata.ContinuousImprovement.Biz.DbContexts.Snowflake;
|
|
using Strata.ContinuousImprovement.Biz.QualityVariation.QVI;
|
|
using Strata.SqlTools.Configuration.Common.AsyncFactory;
|
|
using CIConfiguration = Strata.ContinuousImprovement.Biz.Configuration.Configuration;
|
|
using System;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Strata.ContinuousImprovement.Biz.Test.Unit.QualityVariation.QVI
|
|
{
|
|
[TestFixture, Category("Unit")]
|
|
public class QviEncounterServiceTest
|
|
{
|
|
private Mock<ISnowflakeDatabaseContext> _snowflakeDatabaseContextMock;
|
|
private Mock<IConfigurationService> _configurationServiceMock;
|
|
private Mock<IAsyncDbContextFactory<JazzDbContext>> _dbContextFactoryMock;
|
|
private Mock<ILogger<QviEncounterService>> _loggerMock;
|
|
private QviEncounterService _service;
|
|
|
|
[SetUp]
|
|
public void SetUp()
|
|
{
|
|
_snowflakeDatabaseContextMock = new Mock<ISnowflakeDatabaseContext>();
|
|
_configurationServiceMock = new Mock<IConfigurationService>();
|
|
_dbContextFactoryMock = new Mock<IAsyncDbContextFactory<JazzDbContext>>();
|
|
_loggerMock = new Mock<ILogger<QviEncounterService>>();
|
|
|
|
_service = new QviEncounterService(
|
|
_snowflakeDatabaseContextMock.Object,
|
|
_configurationServiceMock.Object,
|
|
_dbContextFactoryMock.Object,
|
|
_loggerMock.Object);
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetEncounterInfoAsync_WhenNoEntityIds_ReturnsEmptyAndSkipsDatabase()
|
|
{
|
|
var configurationGuid = Guid.NewGuid();
|
|
_configurationServiceMock
|
|
.Setup(s => s.GetConfigurationAsync(configurationGuid, It.IsAny<CancellationToken>()))
|
|
.ReturnsAsync(new CIConfiguration { EntityIdsCSV = string.Empty, SourceSystemIdsCSV = "1" });
|
|
|
|
var result = await _service.GetEncounterInfoAsync(configurationGuid, DateTime.UtcNow, DateTime.UtcNow, CancellationToken.None);
|
|
|
|
result.Should().BeEmpty();
|
|
_dbContextFactoryMock.Verify(f => f.CreateDbContextAsync(It.IsAny<CancellationToken>()), Times.Never);
|
|
_snowflakeDatabaseContextMock.Verify(
|
|
s => s.QueryAsync<EncounterInfo>(
|
|
It.IsAny<string>(),
|
|
It.IsAny<string>(),
|
|
It.IsAny<object>(),
|
|
It.IsAny<TimeSpan>()),
|
|
Times.Never);
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetEncounterInfoAsync_WhenNoSourceSystemIds_ReturnsEmptyAndSkipsDatabase()
|
|
{
|
|
var configurationGuid = Guid.NewGuid();
|
|
_configurationServiceMock
|
|
.Setup(s => s.GetConfigurationAsync(configurationGuid, It.IsAny<CancellationToken>()))
|
|
.ReturnsAsync(new CIConfiguration { EntityIdsCSV = "1", SourceSystemIdsCSV = string.Empty });
|
|
|
|
var result = await _service.GetEncounterInfoAsync(configurationGuid, DateTime.UtcNow, DateTime.UtcNow, CancellationToken.None);
|
|
|
|
result.Should().BeEmpty();
|
|
_dbContextFactoryMock.Verify(f => f.CreateDbContextAsync(It.IsAny<CancellationToken>()), Times.Never);
|
|
_snowflakeDatabaseContextMock.Verify(
|
|
s => s.QueryAsync<EncounterInfo>(
|
|
It.IsAny<string>(),
|
|
It.IsAny<string>(),
|
|
It.IsAny<object>(),
|
|
It.IsAny<TimeSpan>()),
|
|
Times.Never);
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetEncounterInfoAsync_WhenConfigurationThrows_Rethrows()
|
|
{
|
|
var configurationGuid = Guid.NewGuid();
|
|
_configurationServiceMock
|
|
.Setup(s => s.GetConfigurationAsync(configurationGuid, It.IsAny<CancellationToken>()))
|
|
.ThrowsAsync(new InvalidOperationException("boom"));
|
|
|
|
var action = async () => await _service.GetEncounterInfoAsync(configurationGuid, DateTime.UtcNow, DateTime.UtcNow, CancellationToken.None);
|
|
|
|
await action.Should().ThrowAsync<InvalidOperationException>();
|
|
}
|
|
}
|
|
}
|