using Elwig.Helpers;
using Microsoft.Data.Sqlite;
using System.Reflection;

namespace Tests {
    [SetUpFixture]
    public class DatabaseSetup {

        private SqliteConnection? Connection;

        [OneTimeSetUp]
        public async Task SetupDatabase() {
            AppDbContext.ConnectionStringOverride = $"Data Source=ElwigTestDB; Mode=Memory; Foreign Keys=True; Cache=Shared";
            Connection = await AppDbContext.ConnectAsync();
            await AppDbContext.ExecuteEmbeddedScript(Connection, Assembly.GetExecutingAssembly(), "Tests.Resources.Create.sql");
            await AppDbContext.ExecuteEmbeddedScript(Connection, Assembly.GetExecutingAssembly(), "Tests.Resources.Insert.sql");
        }

        [OneTimeTearDown]
        public async Task TeardownDatabase() {
            AppDbContext.ConnectionStringOverride = null;
            if (Connection == null) return;
            await Connection.DisposeAsync();
            Connection = null;
            // The in-memory database will be dropped if all connections to it are closed
        }
    }
}