0
0

Add happy-path tests

This commit is contained in:
Rhys Ickeringill
2026-03-17 18:55:29 +11:00
parent 18c389d3c9
commit d2054dda29
12 changed files with 693 additions and 0 deletions

View File

@@ -0,0 +1,73 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using RAIC.Extensions.Configuration.EntityFrameworkCore.Extensions;
using RAIC.Extensions.Configuration.EntityFrameworkCore.PostgreSQL.Extensions;
using TUnit.Core.Interfaces;
namespace RAIC.Extensions.Configuration.EntityFrameworkCore.PostgreSQL.Tests;
[Table("settings")]
public record Setting : ISetting
{
[Key]
[Column("key")]
public required string Key { get; set; }
[Required]
[Column("value")]
public required string Value { get; set; }
}
public class FixtureDbContext(DbContextOptions<FixtureDbContext> options) : DbContext(options), ISettingsDbContext<DbSet<Setting>>, ISettingsDbContextFactory<FixtureDbContext>
{
public DbSet<Setting> Settings { get; set; }
public static FixtureDbContext Create(DbContextOptions<FixtureDbContext> options) => new(options);
}
public record FixtureOptions
{
public required string SomeOption { get; set; }
}
public class HostFixture : IAsyncInitializer, IServiceScopeFactory
{
private IHost? _host;
public IServiceScope CreateScope() => _host!.Services.CreateScope();
public async Task InitializeAsync()
{
var builder = Host.CreateApplicationBuilder();
// build a initial configuration
builder.Configuration
.AddInMemoryCollection(new Dictionary<string, string?>() { { nameof(FixtureOptions.SomeOption), "Memory value" }, { "ChannelName", "setting_channel" } })
.AddUserSecrets<SingleSettingTests>() // for connection string
.AddEnvironmentVariables(prefix: "ASPNETCORE_");
// add DbContext based configuration using connection string sourced from initial config
builder.Configuration.AddDbContext<FixtureDbContext>(dbContextOptions => dbContextOptions.UseNpgsql(builder.Configuration.GetConnectionString("Default")));
builder.Services
.AddDbContext<FixtureDbContext>(opt => opt.UseNpgsql(builder.Configuration.GetConnectionString("Default")))
.AddPostgreSQLNotificationConfigurationReloadService<FixtureDbContext>(opts => opts.Bind(builder.Configuration))
.AddOptions<FixtureOptions>().Bind(builder.Configuration);
builder.Logging.AddDebug();
_host = builder.Build();
await _host.StartAsync();
_ = _host.WaitForShutdownAsync();
}
}