PlanTempusApp/Tests/TestFixture.cs

89 lines
2.5 KiB
C#
Raw Normal View History

2025-03-07 00:17:08 +01:00
using System.Diagnostics;
2025-01-03 16:21:03 +00:00
using Autofac;
using Microsoft.ApplicationInsights;
using Microsoft.Extensions.Logging;
2025-03-11 00:28:06 +01:00
using PlanTempus.Components.ModuleRegistry;
using PlanTempus.Core.Configurations;
using PlanTempus.Core.Configurations.JsonConfigProvider;
using PlanTempus.Core.ModuleRegistry;
2025-03-10 15:56:22 +01:00
using PlanTempus.Core.SeqLogging;
2025-03-07 00:17:08 +01:00
using PlanTempus.Database.ModuleRegistry;
namespace PlanTempus.X.TDD;
/// <summary>
/// Act as base class for tests. Avoids duplication of test setup code
/// </summary>
[TestClass]
public abstract class TestFixture
2025-01-03 16:21:03 +00:00
{
2025-03-07 00:17:08 +01:00
private readonly string _configurationFilePath;
protected TestFixture() : this(null)
{
2025-03-07 00:17:08 +01:00
}
2025-03-07 00:17:08 +01:00
public TestFixture(string configurationFilePath)
{
if (configurationFilePath is not null)
_configurationFilePath = configurationFilePath?.TrimEnd('/') + "/";
2025-03-07 00:17:08 +01:00
CreateContainerBuilder();
Container = ContainerBuilder.Build();
}
2025-03-07 00:17:08 +01:00
protected IContainer Container { get; private set; }
protected ContainerBuilder ContainerBuilder { get; private set; }
2025-03-07 00:17:08 +01:00
public virtual IConfigurationRoot Configuration()
{
var configuration = new ConfigurationBuilder()
.AddJsonFile($"{_configurationFilePath}appconfiguration.dev.json")
.Build();
2025-03-07 00:17:08 +01:00
return configuration;
}
2025-03-07 00:17:08 +01:00
protected virtual void CreateContainerBuilder()
{
var configuration = Configuration();
var builder = new ContainerBuilder();
2025-03-07 00:17:08 +01:00
builder.RegisterGeneric(typeof(Logger<>))
.As(typeof(ILogger<>))
.SingleInstance();
2025-03-07 00:17:08 +01:00
builder.RegisterModule(new DbPostgreSqlModule
{
ConnectionString = configuration.GetConnectionString("DefaultConnection")
});
2025-03-07 00:17:08 +01:00
builder.RegisterModule(new TelemetryModule
{
TelemetryConfig = configuration.GetSection("ApplicationInsights").ToObject<TelemetryConfig>()
});
builder.RegisterModule(new SeqLoggingModule
{
SeqConfiguration = configuration.GetSection("SeqConfiguration").ToObject<SeqConfiguration>()
});
2025-03-11 00:28:06 +01:00
builder.RegisterModule<CommandModule>();
builder.RegisterModule<SecurityModule>();
2025-03-07 00:17:08 +01:00
ContainerBuilder = builder;
}
2025-03-07 00:17:08 +01:00
[TestCleanup]
public void CleanUp()
{
Trace.Flush();
var telemetryClient = Container.Resolve<TelemetryClient>();
telemetryClient.Flush();
2025-03-07 16:17:30 +01:00
if (Container is null) return;
Container.Dispose();
Container = null;
}
2025-01-03 16:21:03 +00:00
}