diff --git a/Core/Database/SqlOperations.cs b/Core/Database/SqlOperations.cs index c0aa6cc..1a1e4d1 100644 --- a/Core/Database/SqlOperations.cs +++ b/Core/Database/SqlOperations.cs @@ -1,4 +1,4 @@ -using System.Data; +using System.Data; using Microsoft.ApplicationInsights; using Microsoft.ApplicationInsights.DataContracts; using SWP.Core.Database.ConnectionFactory; @@ -10,10 +10,10 @@ public class SqlOperations : IDatabaseOperations private readonly IDbConnectionFactory _connectionFactory; private readonly TelemetryClient _telemetryClient; - public SqlOperations(IDbConnectionFactory connectionFactory, TelemetryClient telemetryClient) + public SqlOperations(IDbConnectionFactory connectionFactory, TelemetryClient telemetryClient = null) { - _connectionFactory = connectionFactory; - _telemetryClient = telemetryClient; + _connectionFactory = connectionFactory; + _telemetryClient = telemetryClient ?? new TelemetryClient(); } public DatabaseScope CreateScope(string operationName) @@ -54,4 +54,4 @@ public class SqlOperations : IDatabaseOperations throw; } } -} \ No newline at end of file +} diff --git a/Tests/SWP.Core.X.TDD.csproj b/Tests/SWP.Core.X.TDD.csproj index 5dc2c79..8555fba 100644 --- a/Tests/SWP.Core.X.TDD.csproj +++ b/Tests/SWP.Core.X.TDD.csproj @@ -27,7 +27,7 @@ - Always + Never Always diff --git a/Tests/TestFixture.cs b/Tests/TestFixture.cs index 101f8b7..87e66c0 100644 --- a/Tests/TestFixture.cs +++ b/Tests/TestFixture.cs @@ -1,87 +1,92 @@ -using System.Diagnostics; -using Autofac; -using Microsoft.ApplicationInsights; -using Microsoft.Extensions.Logging; -using SWP.Core.Configurations; -using SWP.Core.Configurations.JsonConfigProvider; -using SWP.Core.Database.ModuleRegistry; -using SWP.Core.ModuleRegistry; -using SWP.Core.SeqLogging; - -namespace SWP.Core.X.TDD; - -/// -/// Act as base class for tests. Avoids duplication of test setup code -/// -[TestClass] -public abstract class TestFixture -{ - private readonly string _configurationFilePath; - - protected TestFixture() : this(null) - { - } - - public TestFixture(string configurationFilePath) - { - if (configurationFilePath is not null) - _configurationFilePath = configurationFilePath?.TrimEnd('/') + "/"; - - CreateContainerBuilder(); - Container = ContainerBuilder.Build(); - } - - protected IContainer Container { get; private set; } - protected ContainerBuilder ContainerBuilder { get; private set; } - - public virtual IConfigurationRoot Configuration() - { - var configuration = new ConfigurationBuilder() - .AddJsonFile($"{_configurationFilePath}appconfiguration.dev.json") - .Build(); - - return configuration; - } - - protected virtual void CreateContainerBuilder() - { - var configuration = Configuration(); - var builder = new ContainerBuilder(); - - builder.RegisterGeneric(typeof(Logger<>)) - .As(typeof(ILogger<>)) - .SingleInstance(); - - - builder.RegisterModule(new DbPostgreSqlModule - { - ConnectionString = configuration.GetConnectionString("DefaultConnection") - }); - - builder.RegisterModule(new TelemetryModule - { - TelemetryConfig = configuration.GetSection("ApplicationInsights").ToObject() - }); - builder.RegisterModule(new SeqLoggingModule - { - SeqConfiguration = configuration.GetSection("SeqConfiguration").ToObject() - }); - +using System.Diagnostics; +using Autofac; +using Microsoft.ApplicationInsights; +using Microsoft.Extensions.Logging; +using SWP.Core.Configurations; +using SWP.Core.Configurations.JsonConfigProvider; +using SWP.Core.Database.ModuleRegistry; +using SWP.Core.ModuleRegistry; +using SWP.Core.SeqLogging; + +namespace SWP.Core.X.TDD; + +/// +/// Act as base class for tests. Avoids duplication of test setup code +/// +[TestClass] +public abstract class TestFixture +{ + private readonly string _configurationFilePath; + + protected TestFixture() : this(null) + { + } + + public TestFixture(string configurationFilePath) + { + if (configurationFilePath is not null) + _configurationFilePath = configurationFilePath?.TrimEnd('/') + "/"; + + CreateContainerBuilder(); + Container = ContainerBuilder.Build(); + } + + protected IContainer Container { get; private set; } + protected ContainerBuilder ContainerBuilder { get; private set; } + + public virtual IConfigurationRoot Configuration() + { + var configuration = new ConfigurationBuilder() + .AddJsonFile($"{_configurationFilePath}appconfiguration.dev.json") + .Build(); + + return configuration; + } + + protected virtual void CreateContainerBuilder() + { + var configuration = Configuration(); + var builder = new ContainerBuilder(); + + builder.RegisterGeneric(typeof(Logger<>)) + .As(typeof(ILogger<>)) + .SingleInstance(); + + + builder.RegisterModule(new DbPostgreSqlModule + { + ConnectionString = configuration.GetConnectionString("DefaultConnection") + }); + + if (!string.IsNullOrEmpty(configuration.GetSection("ApplicationInsights").ToObject().ConnectionString)) + builder.RegisterModule(new TelemetryModule + { + TelemetryConfig = configuration.GetSection("ApplicationInsights").ToObject() + }); + + if (!string.IsNullOrEmpty(configuration.GetSection("SeqConfiguration").ToObject().IngestionEndpoint)) + builder.RegisterModule(new SeqLoggingModule + { + SeqConfiguration = configuration.GetSection("SeqConfiguration").ToObject() + }); + builder.RegisterModule(); - ContainerBuilder = builder; - } - - [TestCleanup] - public void CleanUp() - { - Trace.Flush(); - var telemetryClient = Container.Resolve(); - telemetryClient.Flush(); - - if (Container is null) return; - - Container.Dispose(); - Container = null; - } -} \ No newline at end of file + ContainerBuilder = builder; + } + + [TestCleanup] + public void CleanUp() + { + Trace.Flush(); + if (Container.IsRegistered()) + { + var telemetryClient = Container.Resolve(); + telemetryClient.Flush(); + } + if (Container is null) return; + + Container.Dispose(); + Container = null; + } +}