using Microsoft.Data.Sqlite; using Microsoft.EntityFrameworkCore; using TakeoutSaaS.Infrastructure.App.Persistence; namespace TakeoutSaaS.Integration.Tests.Fixtures; public sealed class SqliteTestDatabase : IDisposable { private readonly SqliteConnection _connection; private bool _initialized; public SqliteTestDatabase() { _connection = new SqliteConnection("Filename=:memory:"); _connection.Open(); Options = new DbContextOptionsBuilder() .UseSqlite(_connection) .EnableSensitiveDataLogging() .Options; } public DbContextOptions Options { get; } public TakeoutAppDbContext CreateContext(long tenantId, long userId = 0) { EnsureCreated(); return new TakeoutAppDbContext(Options, new TestTenantProvider(tenantId), new TestCurrentUserAccessor(userId)); } public void EnsureCreated() { if (_initialized) { return; } using var context = new TakeoutAppDbContext(Options, new TestTenantProvider(1)); context.Database.EnsureCreated(); _initialized = true; } public void Dispose() { _connection.Dispose(); } }