diff --git a/.gitignore b/.gitignore index cbefbbf..809c7ad 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ bin/ *.user .vs .idea +Tests/Resources/Create.sql diff --git a/Elwig/Helpers/AppDbContext.cs b/Elwig/Helpers/AppDbContext.cs index ad3e144..30d9099 100644 --- a/Elwig/Helpers/AppDbContext.cs +++ b/Elwig/Helpers/AppDbContext.cs @@ -64,7 +64,8 @@ namespace Elwig.Helpers { public DateTime SavedLastWriteTime { get; private set; } public bool HasBackendChanged => SavedLastWriteTime != LastWriteTime; - public static string ConnectionString => $"Data Source=\"{App.Config.DatabaseFile}\"; Foreign Keys=True; Mode=ReadWrite; Cache=Default"; + public static string? ConnectionStringOverride { get; set; } = null; + public static string ConnectionString => ConnectionStringOverride ?? $"Data Source=\"{App.Config.DatabaseFile}\"; Mode=ReadWrite; Foreign Keys=True; Cache=Default"; private readonly Dictionary>> _memberAreaCommitmentBuckets = []; private readonly Dictionary>> _memberDeliveryBuckets = []; diff --git a/Elwig/Helpers/AppDbUpdater.cs b/Elwig/Helpers/AppDbUpdater.cs index 2c6d2a2..d7b6a8c 100644 --- a/Elwig/Helpers/AppDbUpdater.cs +++ b/Elwig/Helpers/AppDbUpdater.cs @@ -8,6 +8,7 @@ using System.Threading.Tasks; namespace Elwig.Helpers { public static class AppDbUpdater { + // Don't forget to update value in Tests/fetch-resources.bat! public static readonly int RequiredSchemaVersion = 12; private static int VersionOffset = 0; diff --git a/Tests/DatabaseSetup.cs b/Tests/DatabaseSetup.cs new file mode 100644 index 0000000..5de5b92 --- /dev/null +++ b/Tests/DatabaseSetup.cs @@ -0,0 +1,27 @@ +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=Default"; + Connection = await AppDbContext.ConnectAsync(); + await AppDbContext.ExecuteEmbeddedScript(Connection, Assembly.GetExecutingAssembly(), "Tests.Resources.Create.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 + } + } +} diff --git a/Tests/HelpersBillingTest.cs b/Tests/HelpersBillingTest.cs new file mode 100644 index 0000000..9437504 --- /dev/null +++ b/Tests/HelpersBillingTest.cs @@ -0,0 +1,30 @@ +using Elwig.Helpers; +using Microsoft.Data.Sqlite; +using System.Reflection; + +namespace Tests { + [TestFixture] + public class HelpersBillingTest { + + private SqliteConnection? Connection; + + [OneTimeSetUp] + public async Task SetupDatabase() { + Connection = await AppDbContext.ConnectAsync(); + await AppDbContext.ExecuteEmbeddedScript(Connection, Assembly.GetExecutingAssembly(), "Tests.Resources.BillingInsert.sql"); + } + + [OneTimeTearDown] + public async Task TeardownDatabase() { + if (Connection == null) return; + await AppDbContext.ExecuteEmbeddedScript(Connection, Assembly.GetExecutingAssembly(), "Tests.Resources.BillingDelete.sql"); + await Connection.DisposeAsync(); + Connection = null; + } + + [Test] + public void Test() { + // TODO + } + } +} diff --git a/Tests/Resources/BillingDelete.sql b/Tests/Resources/BillingDelete.sql new file mode 100644 index 0000000..694a2df --- /dev/null +++ b/Tests/Resources/BillingDelete.sql @@ -0,0 +1 @@ +-- deletes for HelpersBillingTest diff --git a/Tests/Resources/BillingInsert.sql b/Tests/Resources/BillingInsert.sql new file mode 100644 index 0000000..604d7ac --- /dev/null +++ b/Tests/Resources/BillingInsert.sql @@ -0,0 +1 @@ +-- inserts for HelpersBillingTest diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj index 62b7d87..2c7ca58 100644 --- a/Tests/Tests.csproj +++ b/Tests/Tests.csproj @@ -9,6 +9,14 @@ true + + + + + + + + diff --git a/Tests/fetch-resources.bat b/Tests/fetch-resources.bat new file mode 100644 index 0000000..9df824e --- /dev/null +++ b/Tests/fetch-resources.bat @@ -0,0 +1 @@ +curl -s "https://www.necronda.net/elwig/files/create.sql?v=12" -u "elwig:ganzGeheim123!" -o "Resources\Create.sql"