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.FiscalMonths; using Strata.ContinuousImprovement.JazzEntityFrameworkStub; using Strata.SqlTools.Configuration.Common.AsyncFactory; using System; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace Strata.ContinuousImprovement.Biz.Test.Unit.Configuration { [TestFixture, Category("Unit")] public class ConfigurationServiceTest { private Mock _configurationServiceMock; private Mock> _dbContextFactoryMock; private Mock _jazzDbContextMock; private Mock _fiscalMonthResolverMock; [SetUp] public void TestSetUp() { _configurationServiceMock = new Mock(); _dbContextFactoryMock = new Mock>(); _jazzDbContextMock = new Mock(); _fiscalMonthResolverMock = new Mock(); } [TestCaseSource(typeof(JazzEntityFrameworkFactory), nameof(JazzEntityFrameworkFactory.GetFrameworksWithCancellation))] public async Task TestGetDefaultConfigurationMock(JazzEntityFrameworkFactory framework, CancellationToken cancellationToken) { // arrange await framework.CreateDbContextAsync(CancellationToken.None); var dfltConfiguration = framework.Configurations.OrderBy(c => c.DisplayOrder).First(); _configurationServiceMock .Setup(vos => vos .GetDefaultConfigurationAsync(It.IsAny())) .ReturnsAsync(dfltConfiguration); var logger = Mock.Of>(); var _configurationService = new ConfigurationService(framework, null, null, logger, _fiscalMonthResolverMock.Object); try { // act var taskResult = await _configurationService.GetDefaultConfigurationAsync(cancellationToken); // assert if (taskResult == null) { framework.JazzDbContext.Should().BeNull(); return; } taskResult.Should().BeOfType(); taskResult.Name.Should().Be(dfltConfiguration.Name); taskResult.DisplayOrder.Should().Be(dfltConfiguration.DisplayOrder); } catch (OperationCanceledException) { cancellationToken.Should().NotBe(CancellationToken.None); } catch (Exception) { // Intentionally left empty } } [TestCaseSource(typeof(JazzEntityFrameworkFactory), nameof(JazzEntityFrameworkFactory.GetFrameworksWithCancellation))] public async Task TestGetDefaultConfiguration(JazzEntityFrameworkFactory jazzEntityFrameworkFactory, CancellationToken cancellationToken) { try { // arrange var logger = Mock.Of>(); await jazzEntityFrameworkFactory.CreateDbContextAsync(CancellationToken.None); var configurationService = new ConfigurationService(jazzEntityFrameworkFactory, null, null, logger, _fiscalMonthResolverMock.Object); // act var taskResult = await configurationService.GetDefaultConfigurationAsync(cancellationToken); // assert if (string.IsNullOrEmpty(jazzEntityFrameworkFactory.TestName)) { taskResult.Should().BeNull(); } else { taskResult.Should().NotBeNull() .And.BeOfType(); taskResult.QVIOpportunityBreakdownName.Should().NotBeNullOrEmpty(); taskResult.QVIOpportunityBreakdownNamePlural.Should().NotBeNullOrEmpty(); taskResult.QVIOpportunityBreakdownEnum.Should() .Be((int)taskResult.QVIOpportunityBreakdown); } } catch (AggregateException ae) { ae.Should().NotBeOfType(); } catch (InvalidOperationException ioe) { ioe.Should().NotBeOfType(); } catch (OperationCanceledException) { cancellationToken.Should().NotBe(CancellationToken.None); } catch (Exception) { // Intentionally left blank } } [TearDown] public void TestTearDown() { // Method intentionally left empty. } } }