diff --git a/Directory.Packages.props b/Directory.Packages.props
index fd1d06c2..abb0dec7 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -1,40 +1,34 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/grate.sln b/grate.sln
index 6336272b..b1c98c88 100644
--- a/grate.sln
+++ b/grate.sln
@@ -6,6 +6,7 @@ MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{8A726E46-C613-42CB-BC6F-B7FE80F487D9}"
ProjectSection(SolutionItems) = preProject
.editorconfig = .editorconfig
+ Directory.Packages.props = Directory.Packages.props
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Unit tests", "unittests", "{CE4BF96D-E795-49EC-BB36-EDCC7E542685}"
diff --git a/src/grate.core/Migration/AnsiSqlDatabase.cs b/src/grate.core/Migration/AnsiSqlDatabase.cs
index 495a4fbd..f2eab7c6 100644
--- a/src/grate.core/Migration/AnsiSqlDatabase.cs
+++ b/src/grate.core/Migration/AnsiSqlDatabase.cs
@@ -649,7 +649,7 @@ INSERT INTO {ScriptsRunErrorsTable}
private static async Task Close(DbConnection? conn)
{
- if (conn?.State == ConnectionState.Open)
+ if (conn?.State is ConnectionState.Open or ConnectionState.Connecting)
{
await conn.CloseAsync();
}
@@ -657,7 +657,8 @@ private static async Task Close(DbConnection? conn)
protected virtual async Task Open(DbConnection? conn)
{
- if (conn != null && conn.State != ConnectionState.Open)
+ //if (conn != null && conn.State != ConnectionState.Open)
+ if (conn is not null && conn is not { State: ConnectionState.Open or ConnectionState.Connecting })
{
await conn.OpenAsync();
await conn.QueryAsync(_syntax.CurrentDatabase);
diff --git a/src/grate.mariadb/Migration/MariaDbDatabase.cs b/src/grate.mariadb/Migration/MariaDbDatabase.cs
index 18dc0145..e4bc2b70 100644
--- a/src/grate.mariadb/Migration/MariaDbDatabase.cs
+++ b/src/grate.mariadb/Migration/MariaDbDatabase.cs
@@ -8,7 +8,6 @@ namespace grate.MariaDb.Migration;
public class MariaDbDatabase : AnsiSqlDatabase
{
-
public const string Type = "mariadb";
public override string MasterDatabaseName => "mysql";
public override string DatabaseType => Type;
diff --git a/unittests/Basic_tests/CommandLineParsing/Basic_CommandLineParsing.cs b/unittests/Basic_tests/CommandLineParsing/Basic_CommandLineParsing.cs
index b79af835..a71d3a58 100644
--- a/unittests/Basic_tests/CommandLineParsing/Basic_CommandLineParsing.cs
+++ b/unittests/Basic_tests/CommandLineParsing/Basic_CommandLineParsing.cs
@@ -68,32 +68,6 @@ public async Task AdminConnectionString(string argName)
cfg?.AdminConnectionString.Should().Be(database);
}
- // [Theory]
- // [InlineData(grate.MariaDb.Migration.MariaDbDatabase.Type)]
- // [InlineData(grate.Oracle.Migration.OracleDatabase.Type)]
- // [InlineData(grate.PostgreSql.Migration.PostgreSqlDatabase.Type)]
- // [InlineData(grate.Sqlite.Migration.SqliteDatabase.Type)]
- // [InlineData(grate.SqlServer.Migration.SqlServerDatabase.Type)]
- // public async Task DefaultAdminConnectionString(string databaseType)
- // {
- // var commandline = $"--connectionstring=;Database=jalla --databasetype={databaseType}";
- // var cfg = await ParseGrateConfiguration(commandline);
-
- // var masterDbName = GetMasterDatabaseName(databaseType);
-
- // cfg?.AdminConnectionString.Should().Be($";Database=" + masterDbName);
- // }
-
- // private string GetMasterDatabaseName(DatabaseType databaseType) => databaseType switch
- // {
- // DatabaseType.mariadb => "mysql",
- // DatabaseType.oracle => "oracle",
- // DatabaseType.postgresql => "postgres",
- // DatabaseType.sqlite => "master",
- // DatabaseType.sqlserver => "master",
- // _ => throw new ArgumentOutOfRangeException(nameof(databaseType), databaseType, "Invalid database type: " + databaseType)
- // };
-
[Theory]
[InlineData("-f ")]
[InlineData("--files=")]
diff --git a/unittests/MariaDB/Database.cs b/unittests/MariaDB/Database.cs
index 1894d027..c6a4b83b 100644
--- a/unittests/MariaDB/Database.cs
+++ b/unittests/MariaDB/Database.cs
@@ -5,15 +5,6 @@
namespace MariaDB;
[Collection(nameof(MariaDbTestContainer))]
-public class Database : GenericDatabase, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
+public class Database(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : GenericDatabase(testContext, testOutput);
- protected ITestOutputHelper TestOutput { get; }
-
- public Database(MariaDbTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new MariaDbGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
diff --git a/unittests/MariaDB/MariaDB.csproj b/unittests/MariaDB/MariaDB.csproj
index 3527d7af..e26a694f 100644
--- a/unittests/MariaDB/MariaDB.csproj
+++ b/unittests/MariaDB/MariaDB.csproj
@@ -15,6 +15,8 @@
+
+
diff --git a/unittests/MariaDB/MariaDbDatabase_.cs b/unittests/MariaDB/MariaDbDatabase_.cs
index 4582a378..5824e9c6 100644
--- a/unittests/MariaDB/MariaDbDatabase_.cs
+++ b/unittests/MariaDB/MariaDbDatabase_.cs
@@ -1,29 +1,18 @@
-using System.Data.Common;
-using FluentAssertions;
+using FluentAssertions;
using grate.Configuration;
-using grate.MariaDb.Migration;
using MariaDB.TestInfrastructure;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Logging;
using MySqlConnector;
namespace Basic_tests.Infrastructure.MariaDB;
// ReSharper disable once InconsistentNaming
-public class MariaDbDatabase_ : IClassFixture
+public class MariaDbDatabase_(InspectableMariaDbDatabase mariaDb)
{
- private IServiceProvider _serviceProvider;
-
- public MariaDbDatabase_(SimpleService simpleService)
- {
- _serviceProvider = simpleService.ServiceProvider;
- }
[Fact]
public async Task Disables_pipelining_if_not_explicitly_set_in_connection_string()
{
var connStr = "Server=dummy";
var cfg = new GrateConfiguration() { ConnectionString = connStr };
- var mariaDb = new InspectableMariaDbDatabase(_serviceProvider);
await mariaDb.InitializeConnections(cfg);
var conn = mariaDb.GetConnection();
@@ -36,7 +25,6 @@ public async Task Leaves_pipelining_as_configured_if_set_explicitly_in_connectio
{
var connStr = "Server=dummy;Pipelining=true";
var cfg = new GrateConfiguration() { ConnectionString = connStr };
- var mariaDb = new InspectableMariaDbDatabase(_serviceProvider);
await mariaDb.InitializeConnections(cfg);
var conn = mariaDb.GetConnection();
@@ -44,12 +32,4 @@ public async Task Leaves_pipelining_as_configured_if_set_explicitly_in_connectio
builder.Pipelining.Should().BeTrue();
}
- private class InspectableMariaDbDatabase : MariaDbDatabase
- {
- public InspectableMariaDbDatabase(IServiceProvider serviceProvider) : base(serviceProvider.GetRequiredService>())
- {
- }
-
- public DbConnection GetConnection() => base.Connection;
- }
}
diff --git a/unittests/MariaDB/MigrationTables.cs b/unittests/MariaDB/MigrationTables.cs
index c1108542..74e6f77e 100644
--- a/unittests/MariaDB/MigrationTables.cs
+++ b/unittests/MariaDB/MigrationTables.cs
@@ -5,15 +5,5 @@
namespace MariaDB;
[Collection(nameof(MariaDbTestContainer))]
-public class MigrationTables : GenericMigrationTables, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
-
- protected ITestOutputHelper TestOutput { get; }
-
- public MigrationTables(MariaDbTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new MariaDbGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
+public class MigrationTables(IGrateTestContext testContext, ITestOutputHelper testOutput) :
+ GenericMigrationTables(testContext, testOutput);
diff --git a/unittests/MariaDB/Running_MigrationScripts/Anytime_scripts.cs b/unittests/MariaDB/Running_MigrationScripts/Anytime_scripts.cs
index c72608ce..9f6d43c6 100644
--- a/unittests/MariaDB/Running_MigrationScripts/Anytime_scripts.cs
+++ b/unittests/MariaDB/Running_MigrationScripts/Anytime_scripts.cs
@@ -5,15 +5,5 @@ namespace MariaDB.Running_MigrationScripts;
[Collection(nameof(MariaDbTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Anytime_scripts : TestCommon.Generic.Running_MigrationScripts.Anytime_scripts, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public Anytime_scripts(MariaDbTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new MariaDbGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
+public class Anytime_scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Anytime_scripts(testContext, testOutput);
diff --git a/unittests/MariaDB/Running_MigrationScripts/DropDatabase.cs b/unittests/MariaDB/Running_MigrationScripts/DropDatabase.cs
index 5dc581a6..af99e056 100644
--- a/unittests/MariaDB/Running_MigrationScripts/DropDatabase.cs
+++ b/unittests/MariaDB/Running_MigrationScripts/DropDatabase.cs
@@ -4,15 +4,6 @@
namespace MariaDB.Running_MigrationScripts;
[Collection(nameof(MariaDbTestContainer))]
-public class DropDatabase : TestCommon.Generic.Running_MigrationScripts.DropDatabase, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public DropDatabase(MariaDbTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new MariaDbGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
+// ReSharper disable once UnusedType.Global
+public class DropDatabase(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.DropDatabase(testContext, testOutput);
diff --git a/unittests/MariaDB/Running_MigrationScripts/Environment_scripts.cs b/unittests/MariaDB/Running_MigrationScripts/Environment_scripts.cs
index c7ae663c..6fab9724 100644
--- a/unittests/MariaDB/Running_MigrationScripts/Environment_scripts.cs
+++ b/unittests/MariaDB/Running_MigrationScripts/Environment_scripts.cs
@@ -5,15 +5,5 @@ namespace MariaDB.Running_MigrationScripts;
[Collection(nameof(MariaDbTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Environment_scripts : TestCommon.Generic.Running_MigrationScripts.Environment_scripts, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public Environment_scripts(MariaDbTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new MariaDbGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
+public class Environment_scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Environment_scripts(testContext, testOutput);
diff --git a/unittests/MariaDB/Running_MigrationScripts/Everytime_scripts.cs b/unittests/MariaDB/Running_MigrationScripts/Everytime_scripts.cs
index 987e0585..1b327643 100644
--- a/unittests/MariaDB/Running_MigrationScripts/Everytime_scripts.cs
+++ b/unittests/MariaDB/Running_MigrationScripts/Everytime_scripts.cs
@@ -5,15 +5,5 @@ namespace MariaDB.Running_MigrationScripts;
[Collection(nameof(MariaDbTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Everytime_scripts : TestCommon.Generic.Running_MigrationScripts.Everytime_scripts, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public Everytime_scripts(MariaDbTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new MariaDbGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
+public class Everytime_scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Everytime_scripts(testContext, testOutput);
diff --git a/unittests/MariaDB/Running_MigrationScripts/Failing_Scripts.cs b/unittests/MariaDB/Running_MigrationScripts/Failing_Scripts.cs
index 0bf129df..cd534ede 100644
--- a/unittests/MariaDB/Running_MigrationScripts/Failing_Scripts.cs
+++ b/unittests/MariaDB/Running_MigrationScripts/Failing_Scripts.cs
@@ -5,17 +5,8 @@ namespace MariaDB.Running_MigrationScripts;
[Collection(nameof(MariaDbTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Failing_Scripts : TestCommon.Generic.Running_MigrationScripts.Failing_Scripts, IClassFixture
+public class Failing_Scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Failing_Scripts(testContext, testOutput)
{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public Failing_Scripts(MariaDbTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new MariaDbGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
protected override string ExpectedErrorMessageForInvalidSql => "Unknown column 'TOP' in 'field list'";
}
diff --git a/unittests/MariaDB/Running_MigrationScripts/One_time_scripts.cs b/unittests/MariaDB/Running_MigrationScripts/One_time_scripts.cs
index 568e1098..43898b5f 100644
--- a/unittests/MariaDB/Running_MigrationScripts/One_time_scripts.cs
+++ b/unittests/MariaDB/Running_MigrationScripts/One_time_scripts.cs
@@ -5,15 +5,6 @@ namespace MariaDB.Running_MigrationScripts;
[Collection(nameof(MariaDbTestContainer))]
// ReSharper disable once InconsistentNaming
-public class One_time_scripts : TestCommon.Generic.Running_MigrationScripts.One_time_scripts, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
+public class One_time_scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.One_time_scripts(testContext, testOutput);
- protected override ITestOutputHelper TestOutput { get; }
-
- public One_time_scripts(MariaDbTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new MariaDbGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
diff --git a/unittests/MariaDB/Running_MigrationScripts/Order_Of_Scripts.cs b/unittests/MariaDB/Running_MigrationScripts/Order_Of_Scripts.cs
index 5ca445bb..0565c9b0 100644
--- a/unittests/MariaDB/Running_MigrationScripts/Order_Of_Scripts.cs
+++ b/unittests/MariaDB/Running_MigrationScripts/Order_Of_Scripts.cs
@@ -5,15 +5,6 @@ namespace MariaDB.Running_MigrationScripts;
[Collection(nameof(MariaDbTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Order_Of_Scripts : TestCommon.Generic.Running_MigrationScripts.Order_Of_Scripts, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
+public class Order_Of_Scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Order_Of_Scripts(testContext, testOutput);
- protected override ITestOutputHelper TestOutput { get; }
-
- public Order_Of_Scripts(MariaDbTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new MariaDbGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
diff --git a/unittests/MariaDB/Running_MigrationScripts/ScriptsRun_Table.cs b/unittests/MariaDB/Running_MigrationScripts/ScriptsRun_Table.cs
index 857d86b6..c3240fb4 100644
--- a/unittests/MariaDB/Running_MigrationScripts/ScriptsRun_Table.cs
+++ b/unittests/MariaDB/Running_MigrationScripts/ScriptsRun_Table.cs
@@ -4,15 +4,5 @@
namespace MariaDB.Running_MigrationScripts;
[Collection(nameof(MariaDbTestContainer))]
-public class ScriptsRun_Table : TestCommon.Generic.Running_MigrationScripts.ScriptsRun_Table, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public ScriptsRun_Table(MariaDbTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new MariaDbGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
+public class ScriptsRun_Table(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.ScriptsRun_Table(testContext, testOutput);
diff --git a/unittests/MariaDB/Running_MigrationScripts/TokenScripts.cs b/unittests/MariaDB/Running_MigrationScripts/TokenScripts.cs
index ac50ee96..741c4a52 100644
--- a/unittests/MariaDB/Running_MigrationScripts/TokenScripts.cs
+++ b/unittests/MariaDB/Running_MigrationScripts/TokenScripts.cs
@@ -4,15 +4,6 @@
namespace MariaDB.Running_MigrationScripts;
[Collection(nameof(MariaDbTestContainer))]
-public class TokenScripts : TestCommon.Generic.Running_MigrationScripts.TokenScripts, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
+public class TokenScripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.TokenScripts(testContext, testOutput);
- protected override ITestOutputHelper TestOutput { get; }
-
- public TokenScripts(MariaDbTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new MariaDbGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
diff --git a/unittests/MariaDB/Running_MigrationScripts/Versioning_The_Database.cs b/unittests/MariaDB/Running_MigrationScripts/Versioning_The_Database.cs
index 973594f1..6976082a 100644
--- a/unittests/MariaDB/Running_MigrationScripts/Versioning_The_Database.cs
+++ b/unittests/MariaDB/Running_MigrationScripts/Versioning_The_Database.cs
@@ -5,15 +5,12 @@ namespace MariaDB.Running_MigrationScripts;
[Collection(nameof(MariaDbTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Versioning_The_Database : TestCommon.Generic.Running_MigrationScripts.Versioning_The_Database, IClassFixture
+public class Versioning_The_Database : TestCommon.Generic.Running_MigrationScripts.Versioning_The_Database
{
- protected override IGrateTestContext Context { get; }
- protected override ITestOutputHelper TestOutput { get; }
-
- public Versioning_The_Database(MariaDbTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
+ public Versioning_The_Database(IGrateTestContext testContext, ITestOutputHelper testOutput)
{
- Context = new MariaDbGrateTestContext(simpleService.ServiceProvider, testContainer);
+ Context = testContext;
TestOutput = testOutput;
}
}
diff --git a/unittests/MariaDB/ServiceCollectionTest.cs b/unittests/MariaDB/ServiceCollectionTest.cs
index 610c9b4e..ab160b64 100644
--- a/unittests/MariaDB/ServiceCollectionTest.cs
+++ b/unittests/MariaDB/ServiceCollectionTest.cs
@@ -10,17 +10,13 @@
namespace MariaDB.DependencyInjection;
[Collection(nameof(MariaDbTestContainer))]
-public class ServiceCollectionTest : TestCommon.DependencyInjection.GrateServiceCollectionTest
+// ReSharper disable once UnusedType.Global
+public class ServiceCollectionTest(MariaDbTestContainer mariaDbTestContainer)
+ : TestCommon.DependencyInjection.GrateServiceCollectionTest
{
- private readonly MariaDbTestContainer _mariaDbTestContainer;
-
- public ServiceCollectionTest(MariaDbTestContainer mariaDbTestContainer)
- {
- _mariaDbTestContainer = mariaDbTestContainer; ;
- }
protected override void ConfigureService(GrateConfigurationBuilder grateConfigurationBuilder)
{
- var connectionString = $"Server={_mariaDbTestContainer.TestContainer!.Hostname};Port={_mariaDbTestContainer.TestContainer!.GetMappedPublicPort(_mariaDbTestContainer.Port)};Database={TestConfig.RandomDatabase()};Uid=root;Pwd={_mariaDbTestContainer.AdminPassword}";
+ var connectionString = $"Server={mariaDbTestContainer.TestContainer!.Hostname};Port={mariaDbTestContainer.TestContainer!.GetMappedPublicPort(mariaDbTestContainer.Port)};Database={TestConfig.RandomDatabase()};Uid=root;Pwd={mariaDbTestContainer.AdminPassword}";
grateConfigurationBuilder.WithConnectionString(connectionString);
grateConfigurationBuilder.UseMariaDb();
grateConfigurationBuilder.ServiceCollection.AddSingleton();
diff --git a/unittests/MariaDB/Startup.cs b/unittests/MariaDB/Startup.cs
new file mode 100644
index 00000000..a0bbe38a
--- /dev/null
+++ b/unittests/MariaDB/Startup.cs
@@ -0,0 +1,55 @@
+using Basic_tests.Infrastructure.MariaDB;
+using grate.Configuration;
+using grate.Infrastructure;
+using grate.MariaDb.Infrastructure;
+using grate.MariaDb.Migration;
+using grate.Migration;
+using MariaDB.TestInfrastructure;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Logging;
+using TestCommon.TestInfrastructure;
+
+namespace MariaDB;
+
+// ReSharper disable once UnusedType.Global
+public class Startup
+{
+ // ReSharper disable once UnusedMember.Global
+ public void ConfigureServices(IServiceCollection services, HostBuilderContext context)
+ {
+ services
+ .AddLogging(
+ lb => lb
+ .AddXUnit()
+ .AddConsole()
+ .SetMinimumLevel(TestConfig.GetLogLevel())
+ )
+ .AddSingleton()
+ .AddSingleton()
+ .AddSingleton>(provider =>
+ config =>
+ {
+ IDatabase database = provider.GetRequiredService();
+
+ ILogger dbLogger = provider.GetRequiredService>();
+ ILogger grateLogger = provider.GetRequiredService>();
+
+ IHashGenerator hashGenerator = provider.GetRequiredService();
+ return
+ new GrateMigrator(grateLogger,
+ new DbMigrator(database, dbLogger, hashGenerator, config));
+ })
+ .AddSingleton()
+
+ .AddTransient()
+ //.AddTransient()
+
+ .AddTransient()
+ .AddSingleton()
+ .AddSingleton()
+ .AddTransient()
+ ;
+
+ }
+}
diff --git a/unittests/MariaDB/TestInfrastructure/InspectableMariaDbDatabase.cs b/unittests/MariaDB/TestInfrastructure/InspectableMariaDbDatabase.cs
new file mode 100644
index 00000000..cee1a8c4
--- /dev/null
+++ b/unittests/MariaDB/TestInfrastructure/InspectableMariaDbDatabase.cs
@@ -0,0 +1,16 @@
+using System.Data.Common;
+using grate.MariaDb.Migration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+
+namespace MariaDB.TestInfrastructure;
+
+public class InspectableMariaDbDatabase : MariaDbDatabase
+{
+ public InspectableMariaDbDatabase(IServiceProvider serviceProvider)
+ : base(serviceProvider.GetRequiredService>())
+ {
+ }
+
+ public DbConnection GetConnection() => base.Connection;
+}
diff --git a/unittests/MariaDB/TestInfrastructure/MariaDbGrateTestContext.cs b/unittests/MariaDB/TestInfrastructure/MariaDbGrateTestContext.cs
index 5796bc1c..31ad434d 100644
--- a/unittests/MariaDB/TestInfrastructure/MariaDbGrateTestContext.cs
+++ b/unittests/MariaDB/TestInfrastructure/MariaDbGrateTestContext.cs
@@ -1,8 +1,8 @@
using System.Data;
+using grate.Configuration;
using grate.Infrastructure;
using grate.MariaDb.Migration;
using grate.Migration;
-using Microsoft.Extensions.DependencyInjection;
using MySqlConnector;
using TestCommon.TestInfrastructure;
@@ -13,20 +13,28 @@ public class MariaDbGrateTestContext : IGrateTestContext
public string AdminPassword => _testContainer.AdminPassword;
public int? Port => _testContainer.TestContainer!.GetMappedPublicPort(_testContainer.Port);
public IServiceProvider ServiceProvider { get; private set; }
+ //private readonly IGrateMigrator _grateMigrator;
+ private readonly Func _getGrateMigrator;
private readonly MariaDbTestContainer _testContainer;
private readonly IDatabaseConnectionFactory _databaseConnectionFactory;
- public MariaDbGrateTestContext(IServiceProvider serviceProvider, MariaDbTestContainer container)
+
+ public MariaDbGrateTestContext(
+ //IServiceProvider serviceProvider,
+ Func getGrateMigrator,
+ IDatabase dbMigrator,
+ ISyntax syntax,
+ IDatabaseConnectionFactory databaseConnectionFactory,
+ MariaDbTestContainer container)
{
- ServiceProvider = serviceProvider;
+ ServiceProvider = null!;
+ _getGrateMigrator = getGrateMigrator;
_testContainer = container;
- DatabaseMigrator = ServiceProvider.GetService()!;
- Syntax = ServiceProvider.GetService()!;
- _databaseConnectionFactory = ServiceProvider.GetService()!;
-
+ DatabaseMigrator = dbMigrator;
+ Syntax = syntax;
+ _databaseConnectionFactory = databaseConnectionFactory;
}
- // public string DockerCommand(string serverName, string adminPassword) =>
- // $"run -d --name {serverName} -e MYSQL_ROOT_PASSWORD={adminPassword} -P mariadb:10.5.9";
+ public IGrateMigrator GetMigrator(GrateConfiguration config) => _getGrateMigrator(config);
public string AdminConnectionString => $"Server={_testContainer.TestContainer!.Hostname};Port={Port};Database=mysql;Uid=root;Pwd={AdminPassword}";
public string ConnectionString(string database) => $"Server={_testContainer.TestContainer!.Hostname};Port={Port};Database={database};Uid=root;Pwd={AdminPassword}";
@@ -42,7 +50,7 @@ public MariaDbGrateTestContext(IServiceProvider serviceProvider, MariaDbTestCont
// public string DatabaseTypeName => "MariaDB Server";
// public string MasterDatabase => "mysql";
- public IDatabase DatabaseMigrator { get; init; }
+ public IDatabase DatabaseMigrator { get; }
public SqlStatements Sql => new()
{
diff --git a/unittests/MariaDB/TestInfrastructure/MariaDbTestContainer.cs b/unittests/MariaDB/TestInfrastructure/MariaDbTestContainer.cs
index 85e60dce..a432bf71 100644
--- a/unittests/MariaDB/TestInfrastructure/MariaDbTestContainer.cs
+++ b/unittests/MariaDB/TestInfrastructure/MariaDbTestContainer.cs
@@ -1,12 +1,19 @@
-using Testcontainers.MariaDb;
+using DotNet.Testcontainers.Configurations;
+using Microsoft.Extensions.Logging;
+using TestCommon.TestInfrastructure;
+using Testcontainers.MariaDb;
-namespace TestCommon.TestInfrastructure;
+namespace MariaDB.TestInfrastructure;
+
+// ReSharper disable once ClassNeverInstantiated.Global
public class MariaDbTestContainer : ContainerFixture
{
- public string? DockerImage => "mariadb:10.10";
- public int Port = 3306;
- public MariaDbTestContainer() : base()
+ public string DockerImage => "mariadb:10.10";
+ public readonly int Port = 3306;
+
+ public MariaDbTestContainer(ILogger logger) : base()
{
+ TestcontainersSettings.Logger = logger;
TestContainer = new MariaDbBuilder()
.WithImage(DockerImage)
.WithPassword(AdminPassword)
diff --git a/unittests/MariaDB/TestInfrastructure/SimpleService.cs b/unittests/MariaDB/TestInfrastructure/SimpleService.cs
deleted file mode 100644
index bc831669..00000000
--- a/unittests/MariaDB/TestInfrastructure/SimpleService.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using grate;
-using grate.MariaDb;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Logging;
-using TestCommon.TestInfrastructure;
-namespace MariaDB.TestInfrastructure;
-public class SimpleService
-{
- public IServiceProvider ServiceProvider { get; }
- public SimpleService()
- {
- ServiceProvider = new ServiceCollection()
- .AddLogging(opt =>
- {
- opt.AddConsole();
- opt.SetMinimumLevel(TestConfig.GetLogLevel());
- })
- .AddGrate(cfg =>
- {
- cfg.UseMariaDb();
- })
- .AddSingleton()
- .BuildServiceProvider();
- }
-}
diff --git a/unittests/Oracle/Database.cs b/unittests/Oracle/Database.cs
index f3aa20fb..0ba4d619 100644
--- a/unittests/Oracle/Database.cs
+++ b/unittests/Oracle/Database.cs
@@ -1,19 +1,8 @@
-using Oracle.TestInfrastructure;
-using TestCommon.Generic;
+using TestCommon.Generic;
using TestCommon.TestInfrastructure;
namespace Oracle;
[Collection(nameof(OracleTestContainer))]
-public class Database : GenericDatabase, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
-
- protected ITestOutputHelper TestOutput { get; }
-
- public Database(OracleTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new OracleGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
+public class Database(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : GenericDatabase(testContext, testOutput);
diff --git a/unittests/Oracle/MigrationTables.cs b/unittests/Oracle/MigrationTables.cs
index fd4d32c1..b9e146bd 100644
--- a/unittests/Oracle/MigrationTables.cs
+++ b/unittests/Oracle/MigrationTables.cs
@@ -1,22 +1,13 @@
using grate.Configuration;
-using Oracle.TestInfrastructure;
using TestCommon.Generic;
using TestCommon.TestInfrastructure;
namespace Oracle;
[Collection(nameof(OracleTestContainer))]
-public class MigrationTables : GenericMigrationTables, IClassFixture
+public class MigrationTables(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : GenericMigrationTables(testContext, testOutput)
{
- protected override IGrateTestContext Context { get; }
-
- protected ITestOutputHelper TestOutput { get; }
-
- public MigrationTables(OracleTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new OracleGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
protected override Task CheckTableCasing(string tableName, string funnyCasing, Func setTableName)
{
diff --git a/unittests/Oracle/Oracle.csproj b/unittests/Oracle/Oracle.csproj
index dfe234b7..5757d832 100644
--- a/unittests/Oracle/Oracle.csproj
+++ b/unittests/Oracle/Oracle.csproj
@@ -15,6 +15,8 @@
+
+
diff --git a/unittests/Oracle/Running_MigrationScripts/Anytime_scripts.cs b/unittests/Oracle/Running_MigrationScripts/Anytime_scripts.cs
index 98cd72ae..7010ec07 100644
--- a/unittests/Oracle/Running_MigrationScripts/Anytime_scripts.cs
+++ b/unittests/Oracle/Running_MigrationScripts/Anytime_scripts.cs
@@ -1,19 +1,9 @@
-using Oracle.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace Oracle.Running_MigrationScripts;
[Collection(nameof(OracleTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Anytime_scripts : TestCommon.Generic.Running_MigrationScripts.Anytime_scripts, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
+public class Anytime_scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Anytime_scripts(testContext, testOutput);
- protected override ITestOutputHelper TestOutput { get; }
-
- public Anytime_scripts(OracleTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new OracleGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
diff --git a/unittests/Oracle/Running_MigrationScripts/DropDatabase.cs b/unittests/Oracle/Running_MigrationScripts/DropDatabase.cs
index 50626ef4..e59fca73 100644
--- a/unittests/Oracle/Running_MigrationScripts/DropDatabase.cs
+++ b/unittests/Oracle/Running_MigrationScripts/DropDatabase.cs
@@ -1,18 +1,8 @@
-using Oracle.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace Oracle.Running_MigrationScripts;
+// ReSharper disable once UnusedType.Global
[Collection(nameof(OracleTestContainer))]
-public class DropDatabase : TestCommon.Generic.Running_MigrationScripts.DropDatabase, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public DropDatabase(OracleTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new OracleGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
+public class DropDatabase(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.DropDatabase(testContext, testOutput);
diff --git a/unittests/Oracle/Running_MigrationScripts/Environment_scripts.cs b/unittests/Oracle/Running_MigrationScripts/Environment_scripts.cs
index 1617581b..e4a0cadb 100644
--- a/unittests/Oracle/Running_MigrationScripts/Environment_scripts.cs
+++ b/unittests/Oracle/Running_MigrationScripts/Environment_scripts.cs
@@ -1,19 +1,9 @@
-using Oracle.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace Oracle.Running_MigrationScripts;
+// ReSharper disable once UnusedType.Global
[Collection(nameof(OracleTestContainer))]
-// ReSharper disable once InconsistentNaming
-public class Environment_scripts : TestCommon.Generic.Running_MigrationScripts.Environment_scripts, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
+public class Environment_scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Environment_scripts(testContext, testOutput);
- protected override ITestOutputHelper TestOutput { get; }
-
- public Environment_scripts(OracleTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new OracleGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
diff --git a/unittests/Oracle/Running_MigrationScripts/Everytime_scripts.cs b/unittests/Oracle/Running_MigrationScripts/Everytime_scripts.cs
index 743a991d..3136c20d 100644
--- a/unittests/Oracle/Running_MigrationScripts/Everytime_scripts.cs
+++ b/unittests/Oracle/Running_MigrationScripts/Everytime_scripts.cs
@@ -1,19 +1,8 @@
-using Oracle.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace Oracle.Running_MigrationScripts;
[Collection(nameof(OracleTestContainer))]
-// ReSharper disable once InconsistentNaming
-public class Everytime_scripts : TestCommon.Generic.Running_MigrationScripts.Everytime_scripts, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
+public class Everytime_scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Everytime_scripts(testContext, testOutput);
- protected override ITestOutputHelper TestOutput { get; }
-
- public Everytime_scripts(OracleTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new OracleGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
diff --git a/unittests/Oracle/Running_MigrationScripts/Failing_Scripts.cs b/unittests/Oracle/Running_MigrationScripts/Failing_Scripts.cs
index 0414b2f0..3e789aab 100644
--- a/unittests/Oracle/Running_MigrationScripts/Failing_Scripts.cs
+++ b/unittests/Oracle/Running_MigrationScripts/Failing_Scripts.cs
@@ -1,23 +1,11 @@
-using Oracle.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace Oracle.Running_MigrationScripts;
[Collection(nameof(OracleTestContainer))]
-// ReSharper disable once InconsistentNaming
-public class Failing_Scripts : TestCommon.Generic.Running_MigrationScripts.Failing_Scripts, IClassFixture
+public class Failing_Scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Failing_Scripts(testContext, testOutput)
{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public Failing_Scripts(OracleTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new OracleGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
-
protected override string ExpectedErrorMessageForInvalidSql =>
@"ORA-00923: FROM keyword not found where expected";
}
diff --git a/unittests/Oracle/Running_MigrationScripts/One_time_scripts.cs b/unittests/Oracle/Running_MigrationScripts/One_time_scripts.cs
index 32362ff5..229b625c 100644
--- a/unittests/Oracle/Running_MigrationScripts/One_time_scripts.cs
+++ b/unittests/Oracle/Running_MigrationScripts/One_time_scripts.cs
@@ -1,24 +1,13 @@
-using Oracle.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace Oracle.Running_MigrationScripts;
+
[Collection(nameof(OracleTestContainer))]
-// ReSharper disable once InconsistentNaming
-public class One_time_scripts : TestCommon.Generic.Running_MigrationScripts.One_time_scripts, IClassFixture
+public class One_time_scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.One_time_scripts(testContext, testOutput)
{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public One_time_scripts(OracleTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new OracleGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
-
-
protected override string CreateView1 => base.CreateView1 + " FROM DUAL";
protected override string CreateView2 => base.CreateView2 + " FROM DUAL";
}
+
diff --git a/unittests/Oracle/Running_MigrationScripts/Order_Of_Scripts.cs b/unittests/Oracle/Running_MigrationScripts/Order_Of_Scripts.cs
index e5402476..2e4ec3a8 100644
--- a/unittests/Oracle/Running_MigrationScripts/Order_Of_Scripts.cs
+++ b/unittests/Oracle/Running_MigrationScripts/Order_Of_Scripts.cs
@@ -1,19 +1,7 @@
-using Oracle.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace Oracle.Running_MigrationScripts;
[Collection(nameof(OracleTestContainer))]
-// ReSharper disable once InconsistentNaming
-public class Order_Of_Scripts : TestCommon.Generic.Running_MigrationScripts.Order_Of_Scripts, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public Order_Of_Scripts(OracleTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new OracleGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
+public class Order_Of_Scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Order_Of_Scripts(testContext, testOutput);
diff --git a/unittests/Oracle/Running_MigrationScripts/ScriptsRun_Table.cs b/unittests/Oracle/Running_MigrationScripts/ScriptsRun_Table.cs
index 36a488f6..848f9767 100644
--- a/unittests/Oracle/Running_MigrationScripts/ScriptsRun_Table.cs
+++ b/unittests/Oracle/Running_MigrationScripts/ScriptsRun_Table.cs
@@ -1,18 +1,7 @@
-using Oracle.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace Oracle.Running_MigrationScripts;
[Collection(nameof(OracleTestContainer))]
-public class ScriptsRun_Table : TestCommon.Generic.Running_MigrationScripts.ScriptsRun_Table, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public ScriptsRun_Table(OracleTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new OracleGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
+public class ScriptsRun_Table(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.ScriptsRun_Table(testContext, testOutput);
diff --git a/unittests/Oracle/Running_MigrationScripts/TokenScripts.cs b/unittests/Oracle/Running_MigrationScripts/TokenScripts.cs
index 92d61207..63058594 100644
--- a/unittests/Oracle/Running_MigrationScripts/TokenScripts.cs
+++ b/unittests/Oracle/Running_MigrationScripts/TokenScripts.cs
@@ -1,21 +1,11 @@
-using Oracle.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace Oracle.Running_MigrationScripts;
[Collection(nameof(OracleTestContainer))]
-public class TokenScripts : TestCommon.Generic.Running_MigrationScripts.TokenScripts, IClassFixture
+public class TokenScripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.TokenScripts(testContext, testOutput)
{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public TokenScripts(OracleTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new OracleGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
protected override string CreateDatabaseName => base.CreateDatabaseName + " FROM DUAL";
protected override string CreateViewMyCustomToken => base.CreateViewMyCustomToken + " FROM DUAL";
}
diff --git a/unittests/Oracle/ServiceCollectionTest.cs b/unittests/Oracle/ServiceCollectionTest.cs
index a420f87f..01cd3bd7 100644
--- a/unittests/Oracle/ServiceCollectionTest.cs
+++ b/unittests/Oracle/ServiceCollectionTest.cs
@@ -6,6 +6,7 @@
using grate.Oracle.Migration;
using Microsoft.Extensions.DependencyInjection;
using Oracle.TestInfrastructure;
+using TestCommon.DependencyInjection;
using TestCommon.TestInfrastructure;
namespace Oracle.DependencyInjection;
diff --git a/unittests/Oracle/Startup.cs b/unittests/Oracle/Startup.cs
new file mode 100644
index 00000000..09bea660
--- /dev/null
+++ b/unittests/Oracle/Startup.cs
@@ -0,0 +1,59 @@
+using grate.Configuration;
+using grate.Infrastructure;
+using grate.Migration;
+using grate.Oracle.Infrastructure;
+using grate.Oracle.Migration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Logging;
+using Oracle.TestInfrastructure;
+using TestCommon.TestInfrastructure;
+
+namespace Oracle;
+
+// ReSharper disable once UnusedType.Global
+public class Startup
+{
+ // ReSharper disable once UnusedMember.Global
+ public void ConfigureServices(IServiceCollection services, HostBuilderContext context)
+ {
+ services
+ .AddLogging(
+ lb => lb
+ .AddXUnit()
+ .AddConsole()
+ .SetMinimumLevel(TestConfig.GetLogLevel())
+ )
+ .AddSingleton()
+ .AddSingleton()
+ .AddSingleton>(provider =>
+ config =>
+ {
+ IDatabase database = provider.GetRequiredService();
+
+ ILogger dbLogger = provider.GetRequiredService>();
+ ILogger grateLogger = provider.GetRequiredService>();
+
+ IHashGenerator hashGenerator = provider.GetRequiredService();
+ return
+ new GrateMigrator(grateLogger,
+ new DbMigrator(database, dbLogger, hashGenerator, config));
+ })
+ .AddSingleton()
+
+ .AddTransient()
+
+ .AddTransient()
+ .AddSingleton()
+ .AddSingleton(provider => new StatementSplitter(
+ provider.GetRequiredService().StatementSeparatorRegex))
+ .AddSingleton(provider =>
+ {
+ var database = provider.GetService()!;
+ return new BatchSplitterReplacer(database.StatementSeparatorRegex, StatementSplitter.BatchTerminatorReplacementString);
+ })
+ .AddSingleton()
+ ;
+
+ }
+}
diff --git a/unittests/Oracle/Statement_Splitting/BatchSplitterReplacer_.cs b/unittests/Oracle/Statement_Splitting/BatchSplitterReplacer_.cs
index 1525b1e9..eae982d6 100644
--- a/unittests/Oracle/Statement_Splitting/BatchSplitterReplacer_.cs
+++ b/unittests/Oracle/Statement_Splitting/BatchSplitterReplacer_.cs
@@ -1,6 +1,5 @@
using FluentAssertions;
using grate.Infrastructure;
-using Microsoft.Extensions.DependencyInjection;
using Oracle.TestInfrastructure;
// ReSharper disable InconsistentNaming
@@ -19,17 +18,12 @@ public class BatchSplitterReplacer_
// private static BatchSplitterReplacer Replacer => new(Database.StatementSeparatorRegex, StatementSplitter.BatchTerminatorReplacementString);
-
- public class should_replace_on : IClassFixture
+ // ReSharper disable once InconsistentNaming
+ public class should_replace_on(ITestOutputHelper testOutput, BatchSplitterReplacer replacer)
{
- private ITestOutputHelper _testOutput;
- private BatchSplitterReplacer Replacer;
+ private ITestOutputHelper _testOutput = testOutput;
+ private BatchSplitterReplacer Replacer = replacer;
- public should_replace_on(ITestOutputHelper testOutput, SimpleService simpleService)
- {
- _testOutput = testOutput;
- Replacer = simpleService.ServiceProvider.GetRequiredService()!;
- }
[Fact]
public void full_statement_without_issue()
{
@@ -281,16 +275,17 @@ public void slash_with_semicolon_directly_after()
}
- public class should_not_replace_on : IClassFixture
+ public class should_not_replace_on
{
private ITestOutputHelper _testOutput;
private BatchSplitterReplacer Replacer;
- public should_not_replace_on(ITestOutputHelper testOutput, SimpleService simpleService)
+ public should_not_replace_on(ITestOutputHelper testOutput, BatchSplitterReplacer replacer)
{
_testOutput = testOutput;
- Replacer = simpleService.ServiceProvider.GetRequiredService()!;
+ Replacer = replacer;
}
+
[Fact]
public void slash_when_slash_is_the_last_part_of_the_last_word_on_a_line()
{
diff --git a/unittests/Oracle/Statement_Splitting/StatementSplitter_.cs b/unittests/Oracle/Statement_Splitting/StatementSplitter_.cs
index 8505ef05..84b17a82 100644
--- a/unittests/Oracle/Statement_Splitting/StatementSplitter_.cs
+++ b/unittests/Oracle/Statement_Splitting/StatementSplitter_.cs
@@ -1,20 +1,19 @@
using FluentAssertions;
using grate.Infrastructure;
-using Microsoft.Extensions.DependencyInjection;
-using Oracle.TestInfrastructure;
namespace Basic_tests.Infrastructure.Oracle.Statement_Splitting;
// ReSharper disable once InconsistentNaming
-public class StatementSplitter_ : IClassFixture
+public class StatementSplitter_
{
- private StatementSplitter Splitter;
+ private readonly StatementSplitter _splitter;
- public StatementSplitter_(SimpleService simpleService)
+ public StatementSplitter_(StatementSplitter splitter)
{
- Splitter = simpleService.ServiceProvider.GetRequiredService()!;
+ _splitter = splitter;
}
+
[Fact]
public void Splits_and_removes_GO_statements()
{
@@ -25,7 +24,7 @@ public void Splits_and_removes_GO_statements()
/
SELECT 1
";
- var batches = Splitter.Split(original);
+ var batches = _splitter.Split(original);
batches.Should().HaveCount(2);
}
diff --git a/unittests/Oracle/TestInfrastructure/OracleGrateTestContext.cs b/unittests/Oracle/TestInfrastructure/OracleGrateTestContext.cs
index 5ec68a57..4db87d27 100644
--- a/unittests/Oracle/TestInfrastructure/OracleGrateTestContext.cs
+++ b/unittests/Oracle/TestInfrastructure/OracleGrateTestContext.cs
@@ -1,8 +1,8 @@
using System.Data;
+using grate.Configuration;
using grate.Infrastructure;
using grate.Migration;
using grate.Oracle.Migration;
-using Microsoft.Extensions.DependencyInjection;
using Oracle.ManagedDataAccess.Client;
using TestCommon.TestInfrastructure;
@@ -11,17 +11,29 @@ namespace Oracle.TestInfrastructure;
public class OracleGrateTestContext : IGrateTestContext
{
public IServiceProvider ServiceProvider { get; private set; }
+ private readonly Func _getGrateMigrator;
private readonly OracleTestContainer _testContainer;
private readonly IDatabaseConnectionFactory _databaseConnectionFactory;
- public OracleGrateTestContext(IServiceProvider serviceProvider, OracleTestContainer container)
+
+ public OracleGrateTestContext(
+ //IServiceProvider serviceProvider,
+ Func getGrateMigrator,
+ IDatabase dbMigrator,
+ ISyntax syntax,
+ IDatabaseConnectionFactory databaseConnectionFactory,
+ OracleTestContainer container)
{
- ServiceProvider = serviceProvider;
+ ServiceProvider = null!;
+ _getGrateMigrator = getGrateMigrator;
_testContainer = container;
- DatabaseMigrator = ServiceProvider.GetService()!;
- Syntax = ServiceProvider.GetService()!;
- _databaseConnectionFactory = ServiceProvider.GetService()!;
+ DatabaseMigrator = dbMigrator;
+ Syntax = syntax;
+ _databaseConnectionFactory = databaseConnectionFactory;
}
+
+ public IGrateMigrator GetMigrator(GrateConfiguration config) => _getGrateMigrator(config);
+
public string AdminPassword => _testContainer.AdminPassword;
public int? Port => _testContainer.TestContainer!.GetMappedPublicPort(_testContainer.Port);
diff --git a/unittests/Oracle/TestInfrastructure/SimpleService.cs b/unittests/Oracle/TestInfrastructure/SimpleService.cs
deleted file mode 100644
index e0b61c71..00000000
--- a/unittests/Oracle/TestInfrastructure/SimpleService.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using grate;
-using grate.Oracle;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Logging;
-using TestCommon.TestInfrastructure;
-namespace Oracle.TestInfrastructure;
-public class SimpleService
-{
- public IServiceProvider ServiceProvider { get; }
- public SimpleService()
- {
- ServiceProvider = new ServiceCollection()
- .AddLogging(opt =>
- {
- opt.AddConsole();
- opt.SetMinimumLevel(TestConfig.GetLogLevel());
- })
- .AddGrate(cfg =>
- {
- cfg.UseOracle();
- })
- .AddSingleton()
- .BuildServiceProvider();
- }
-}
diff --git a/unittests/PostgreSQL/Database.cs b/unittests/PostgreSQL/Database.cs
index 320c90d2..e5610f36 100644
--- a/unittests/PostgreSQL/Database.cs
+++ b/unittests/PostgreSQL/Database.cs
@@ -5,17 +5,5 @@
namespace PostgreSQL;
[Collection(nameof(PostgreSqlTestContainer))]
-public class Database : GenericDatabase, IClassFixture
-{
-
- protected override IGrateTestContext Context { get; }
-
- protected ITestOutputHelper TestOutput { get; }
-
- public Database(PostgreSqlTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new PostgreSqlGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
-}
+public class Database(IGrateTestContext testContext, ITestOutputHelper testOutput) :
+ GenericDatabase(testContext, testOutput);
diff --git a/unittests/PostgreSQL/MigrationTables.cs b/unittests/PostgreSQL/MigrationTables.cs
index 71fedeae..721416d0 100644
--- a/unittests/PostgreSQL/MigrationTables.cs
+++ b/unittests/PostgreSQL/MigrationTables.cs
@@ -1,21 +1,8 @@
-using PostgreSQL.TestInfrastructure;
-using TestCommon.Generic;
+using TestCommon.Generic;
using TestCommon.TestInfrastructure;
namespace PostgreSQL;
[Collection(nameof(PostgreSqlTestContainer))]
-public class MigrationTables : GenericMigrationTables, IClassFixture
-{
-
- protected override IGrateTestContext Context { get; }
-
- protected ITestOutputHelper TestOutput { get; }
-
- public MigrationTables(PostgreSqlTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new PostgreSqlGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
-}
+public class MigrationTables(IGrateTestContext testContext, ITestOutputHelper testOutput) :
+ GenericMigrationTables(testContext, testOutput);
diff --git a/unittests/PostgreSQL/PostgreSQL.csproj b/unittests/PostgreSQL/PostgreSQL.csproj
index 87305e13..24604fba 100644
--- a/unittests/PostgreSQL/PostgreSQL.csproj
+++ b/unittests/PostgreSQL/PostgreSQL.csproj
@@ -15,6 +15,8 @@
+
+
diff --git a/unittests/PostgreSQL/Running_MigrationScripts/Anytime_scripts.cs b/unittests/PostgreSQL/Running_MigrationScripts/Anytime_scripts.cs
index 72ee3b3d..d3ff7f98 100644
--- a/unittests/PostgreSQL/Running_MigrationScripts/Anytime_scripts.cs
+++ b/unittests/PostgreSQL/Running_MigrationScripts/Anytime_scripts.cs
@@ -1,21 +1,9 @@
-using PostgreSQL.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace PostgreSQL.Running_MigrationScripts;
[Collection(nameof(PostgreSqlTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Anytime_scripts : TestCommon.Generic.Running_MigrationScripts.Anytime_scripts, IClassFixture
-{
-
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public Anytime_scripts(PostgreSqlTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new PostgreSqlGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
-}
+// ReSharper disable once UnusedType.Global
+public class Anytime_scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Anytime_scripts(testContext, testOutput);
diff --git a/unittests/PostgreSQL/Running_MigrationScripts/DropDatabase.cs b/unittests/PostgreSQL/Running_MigrationScripts/DropDatabase.cs
index 6fc0a6a3..5cd8d17d 100644
--- a/unittests/PostgreSQL/Running_MigrationScripts/DropDatabase.cs
+++ b/unittests/PostgreSQL/Running_MigrationScripts/DropDatabase.cs
@@ -1,19 +1,7 @@
-using PostgreSQL.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace PostgreSQL.Running_MigrationScripts;
[Collection(nameof(PostgreSqlTestContainer))]
-public class DropDatabase : TestCommon.Generic.Running_MigrationScripts.DropDatabase, IClassFixture
-{
-
- protected override IGrateTestContext Context { get; }
- protected override ITestOutputHelper TestOutput { get; }
-
- public DropDatabase(PostgreSqlTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new PostgreSqlGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
-}
+public class DropDatabase(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.DropDatabase(testContext, testOutput);
diff --git a/unittests/PostgreSQL/Running_MigrationScripts/Environment_scripts.cs b/unittests/PostgreSQL/Running_MigrationScripts/Environment_scripts.cs
index cfd1ae0e..1837e178 100644
--- a/unittests/PostgreSQL/Running_MigrationScripts/Environment_scripts.cs
+++ b/unittests/PostgreSQL/Running_MigrationScripts/Environment_scripts.cs
@@ -1,21 +1,9 @@
-using PostgreSQL.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace PostgreSQL.Running_MigrationScripts;
[Collection(nameof(PostgreSqlTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Environment_scripts : TestCommon.Generic.Running_MigrationScripts.Environment_scripts, IClassFixture
-{
-
- protected override IGrateTestContext Context { get; }
- protected override ITestOutputHelper TestOutput { get; }
-
- public Environment_scripts(PostgreSqlTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new PostgreSqlGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
-}
+public class Environment_scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Environment_scripts(testContext, testOutput);
diff --git a/unittests/PostgreSQL/Running_MigrationScripts/Everytime_scripts.cs b/unittests/PostgreSQL/Running_MigrationScripts/Everytime_scripts.cs
index 72e49f99..ff706c52 100644
--- a/unittests/PostgreSQL/Running_MigrationScripts/Everytime_scripts.cs
+++ b/unittests/PostgreSQL/Running_MigrationScripts/Everytime_scripts.cs
@@ -2,7 +2,6 @@
using FluentAssertions;
using grate.Configuration;
using grate.Migration;
-using PostgreSQL.TestInfrastructure;
using TestCommon.TestInfrastructure;
using static grate.Configuration.KnownFolderKeys;
@@ -10,18 +9,9 @@ namespace PostgreSQL.Running_MigrationScripts;
[Collection(nameof(PostgreSqlTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Everytime_scripts : TestCommon.Generic.Running_MigrationScripts.Everytime_scripts, IClassFixture
+public class Everytime_scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Everytime_scripts(testContext, testOutput)
{
-
- protected override IGrateTestContext Context { get; }
- protected override ITestOutputHelper TestOutput { get; }
-
- public Everytime_scripts(PostgreSqlTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new PostgreSqlGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
[Fact]
public async Task Create_index_concurrently_works()
{
diff --git a/unittests/PostgreSQL/Running_MigrationScripts/Failing_Scripts.cs b/unittests/PostgreSQL/Running_MigrationScripts/Failing_Scripts.cs
index 8ac8677a..2ddf418e 100644
--- a/unittests/PostgreSQL/Running_MigrationScripts/Failing_Scripts.cs
+++ b/unittests/PostgreSQL/Running_MigrationScripts/Failing_Scripts.cs
@@ -5,18 +5,9 @@ namespace PostgreSQL.Running_MigrationScripts;
[Collection(nameof(PostgreSqlTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Failing_Scripts : TestCommon.Generic.Running_MigrationScripts.Failing_Scripts, IClassFixture
+public class Failing_Scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Failing_Scripts(testContext, testOutput)
{
-
- protected override IGrateTestContext Context { get; }
- protected override ITestOutputHelper TestOutput { get; }
-
- public Failing_Scripts(PostgreSqlTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new PostgreSqlGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
protected override string ExpectedErrorMessageForInvalidSql =>
@"42703: column ""top"" does not exist
diff --git a/unittests/PostgreSQL/Running_MigrationScripts/One_time_scripts.cs b/unittests/PostgreSQL/Running_MigrationScripts/One_time_scripts.cs
index b3308166..c44a93dd 100644
--- a/unittests/PostgreSQL/Running_MigrationScripts/One_time_scripts.cs
+++ b/unittests/PostgreSQL/Running_MigrationScripts/One_time_scripts.cs
@@ -1,20 +1,8 @@
-using PostgreSQL.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace PostgreSQL.Running_MigrationScripts;
[Collection(nameof(PostgreSqlTestContainer))]
// ReSharper disable once InconsistentNaming
-public class One_time_scripts : TestCommon.Generic.Running_MigrationScripts.One_time_scripts, IClassFixture
-{
-
- protected override IGrateTestContext Context { get; }
- protected override ITestOutputHelper TestOutput { get; }
-
- public One_time_scripts(PostgreSqlTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new PostgreSqlGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
-}
+public class One_time_scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.One_time_scripts(testContext, testOutput);
diff --git a/unittests/PostgreSQL/Running_MigrationScripts/Order_Of_Scripts.cs b/unittests/PostgreSQL/Running_MigrationScripts/Order_Of_Scripts.cs
index 18076785..387bbb8b 100644
--- a/unittests/PostgreSQL/Running_MigrationScripts/Order_Of_Scripts.cs
+++ b/unittests/PostgreSQL/Running_MigrationScripts/Order_Of_Scripts.cs
@@ -1,20 +1,8 @@
-using PostgreSQL.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace PostgreSQL.Running_MigrationScripts;
[Collection(nameof(PostgreSqlTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Order_Of_Scripts : TestCommon.Generic.Running_MigrationScripts.Order_Of_Scripts, IClassFixture
-{
-
- protected override IGrateTestContext Context { get; }
- protected override ITestOutputHelper TestOutput { get; }
-
- public Order_Of_Scripts(PostgreSqlTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new PostgreSqlGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
-}
+public class Order_Of_Scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Order_Of_Scripts(testContext, testOutput);
diff --git a/unittests/PostgreSQL/Running_MigrationScripts/ScriptsRun_Table.cs b/unittests/PostgreSQL/Running_MigrationScripts/ScriptsRun_Table.cs
index f77d897b..4612b74d 100644
--- a/unittests/PostgreSQL/Running_MigrationScripts/ScriptsRun_Table.cs
+++ b/unittests/PostgreSQL/Running_MigrationScripts/ScriptsRun_Table.cs
@@ -1,19 +1,8 @@
-using PostgreSQL.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace PostgreSQL.Running_MigrationScripts;
[Collection(nameof(PostgreSqlTestContainer))]
-public class ScriptsRun_Table : TestCommon.Generic.Running_MigrationScripts.ScriptsRun_Table, IClassFixture
-{
+public class ScriptsRun_Table(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.ScriptsRun_Table(testContext, testOutput);
- protected override IGrateTestContext Context { get; }
- protected override ITestOutputHelper TestOutput { get; }
-
- public ScriptsRun_Table(PostgreSqlTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new PostgreSqlGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
-}
diff --git a/unittests/PostgreSQL/Running_MigrationScripts/TokenScripts.cs b/unittests/PostgreSQL/Running_MigrationScripts/TokenScripts.cs
index 99e00ce6..b0a28de8 100644
--- a/unittests/PostgreSQL/Running_MigrationScripts/TokenScripts.cs
+++ b/unittests/PostgreSQL/Running_MigrationScripts/TokenScripts.cs
@@ -1,18 +1,8 @@
-using PostgreSQL.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace PostgreSQL.Running_MigrationScripts;
[Collection(nameof(PostgreSqlTestContainer))]
-public class TokenScripts : TestCommon.Generic.Running_MigrationScripts.TokenScripts, IClassFixture
-{
+public class TokenScripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.TokenScripts(testContext, testOutput);
- protected override IGrateTestContext Context { get; }
- protected override ITestOutputHelper TestOutput { get; }
-
- public TokenScripts(PostgreSqlTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new PostgreSqlGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
diff --git a/unittests/PostgreSQL/Running_MigrationScripts/Versioning_The_Database.cs b/unittests/PostgreSQL/Running_MigrationScripts/Versioning_The_Database.cs
index 5f7b0def..0b84f4c8 100644
--- a/unittests/PostgreSQL/Running_MigrationScripts/Versioning_The_Database.cs
+++ b/unittests/PostgreSQL/Running_MigrationScripts/Versioning_The_Database.cs
@@ -1,20 +1,9 @@
-using PostgreSQL.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace PostgreSQL.Running_MigrationScripts;
[Collection(nameof(PostgreSqlTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Versioning_The_Database : TestCommon.Generic.Running_MigrationScripts.Versioning_The_Database, IClassFixture
-{
+public class Versioning_The_Database(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Versioning_The_Database(testContext, testOutput);
- protected override IGrateTestContext Context { get; }
- protected override ITestOutputHelper TestOutput { get; }
-
- public Versioning_The_Database(PostgreSqlTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new PostgreSqlGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
-}
diff --git a/unittests/PostgreSQL/ServiceCollectionTest.cs b/unittests/PostgreSQL/ServiceCollectionTest.cs
index 3ecf0b7c..2e87fd4b 100644
--- a/unittests/PostgreSQL/ServiceCollectionTest.cs
+++ b/unittests/PostgreSQL/ServiceCollectionTest.cs
@@ -10,16 +10,12 @@
namespace PostgreSQL.DependencyInjection;
[Collection(nameof(PostgreSqlTestContainer))]
-public class ServiceCollectionTest : TestCommon.DependencyInjection.GrateServiceCollectionTest
+public class ServiceCollectionTest(PostgreSqlTestContainer postgreSqlTestContainer)
+ : TestCommon.DependencyInjection.GrateServiceCollectionTest
{
- private readonly PostgreSqlTestContainer _postgreSqlTestContainer;
- public ServiceCollectionTest(PostgreSqlTestContainer postgreSqlTestContainer)
- {
- _postgreSqlTestContainer = postgreSqlTestContainer;
- }
protected override void ConfigureService(GrateConfigurationBuilder grateConfigurationBuilder)
{
- var connectionString = $"Host={_postgreSqlTestContainer.TestContainer!.Hostname};Port={_postgreSqlTestContainer.TestContainer!.GetMappedPublicPort(_postgreSqlTestContainer.Port)};Database={TestConfig.RandomDatabase()};Username=postgres;Password={_postgreSqlTestContainer.AdminPassword};Include Error Detail=true;Pooling=false";
+ var connectionString = $"Host={postgreSqlTestContainer.TestContainer!.Hostname};Port={postgreSqlTestContainer.TestContainer!.GetMappedPublicPort(postgreSqlTestContainer.Port)};Database={TestConfig.RandomDatabase()};Username=postgres;Password={postgreSqlTestContainer.AdminPassword};Include Error Detail=true;Pooling=false";
grateConfigurationBuilder.WithConnectionString(connectionString);
grateConfigurationBuilder.UsePostgreSql();
grateConfigurationBuilder.ServiceCollection.AddSingleton();
diff --git a/unittests/PostgreSQL/Startup.cs b/unittests/PostgreSQL/Startup.cs
new file mode 100644
index 00000000..096e02f3
--- /dev/null
+++ b/unittests/PostgreSQL/Startup.cs
@@ -0,0 +1,58 @@
+using grate.Configuration;
+using grate.Infrastructure;
+using grate.Migration;
+using grate.PostgreSql.Infrastructure;
+using grate.PostgreSql.Migration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Logging;
+using PostgreSQL.TestInfrastructure;
+using TestCommon.TestInfrastructure;
+
+namespace PostgreSQL;
+
+// ReSharper disable once UnusedType.Global
+public class Startup
+{
+ // ReSharper disable once UnusedMember.Global
+ public void ConfigureServices(IServiceCollection services, HostBuilderContext context)
+ {
+ services
+ .AddLogging(
+ lb => lb
+ .AddXUnit()
+ .AddConsole()
+ .SetMinimumLevel(TestConfig.GetLogLevel())
+ )
+ .AddSingleton()
+ .AddSingleton()
+ .AddSingleton>(provider =>
+ config =>
+ {
+ IDatabase database = provider.GetRequiredService();
+
+ ILogger dbLogger = provider.GetRequiredService>();
+ ILogger grateLogger = provider.GetRequiredService>();
+
+ IHashGenerator hashGenerator = provider.GetRequiredService();
+ return
+ new GrateMigrator(grateLogger,
+ new DbMigrator(database, dbLogger, hashGenerator, config));
+ })
+ .AddSingleton()
+
+ .AddTransient()
+
+ .AddTransient()
+ .AddSingleton()
+ .AddSingleton()
+ .AddSingleton()
+ .AddSingleton(service =>
+ {
+ var database = service.GetService()!;
+ return new StatementSplitter(database.StatementSeparatorRegex);
+ });
+ ;
+
+ }
+}
diff --git a/unittests/PostgreSQL/Statement_Splitting/StatementSplitter_.cs b/unittests/PostgreSQL/Statement_Splitting/StatementSplitter_.cs
index b1395e4a..dcb4fc06 100644
--- a/unittests/PostgreSQL/Statement_Splitting/StatementSplitter_.cs
+++ b/unittests/PostgreSQL/Statement_Splitting/StatementSplitter_.cs
@@ -7,15 +7,8 @@ namespace Basic_tests.Infrastructure.PostgreSQL.Statement_Splitting;
// ReSharper disable once InconsistentNaming
-public class StatementSplitter_ : IClassFixture
+public class StatementSplitter_(StatementSplitter statementSplitter)
{
- private StatementSplitter Splitter;
-
- public StatementSplitter_(SimpleService simpleService)
- {
- Splitter = simpleService.ServiceProvider.GetRequiredService()!;
- }
-
[Fact]
public void Splits_and_removes_semicolons()
{
@@ -34,7 +27,7 @@ USING btree
column2
);
";
- var batches = Splitter.Split(original);
+ var batches = statementSplitter.Split(original);
batches.Should().HaveCount(4);
}
@@ -56,7 +49,7 @@ FROM information_schema.schemata
END
';
";
- var batches = Splitter.Split(original);
+ var batches = statementSplitter.Split(original);
batches.Should().HaveCount(1);
}
@@ -81,7 +74,7 @@ FROM information_schema.schemata
END
{tag};
";
- var batches = Splitter.Split(original);
+ var batches = statementSplitter.Split(original);
batches.Should().HaveCount(1);
}
@@ -89,7 +82,7 @@ FROM information_schema.schemata
public void Splits_on_semicolon_after_single_quotes_when_there_is_another_semicolon_in_the_quote()
{
var original = @"SELECT 1 WHERE whatnot = '; ' ; MOO";
- var batches = Splitter.Split(original).ToList();
+ var batches = statementSplitter.Split(original).ToList();
batches.Should().HaveCount(2);
batches.First().Should().Be("SELECT 1 WHERE whatnot = '; ' ");
@@ -100,7 +93,7 @@ public void Splits_on_semicolon_after_single_quotes_when_there_is_another_semico
public void Ignores_semicolon_in_single_quotes_when_there_is_no_other_semicolon()
{
var original = @"SELECT 1 WHERE whatnot = '; '";
- var batches = Splitter.Split(original);
+ var batches = statementSplitter.Split(original);
batches.Should().HaveCount(1);
}
@@ -121,7 +114,7 @@ FROM information_schema.schemata
END
';
";
- var batches = Splitter.Split(original);
+ var batches = statementSplitter.Split(original);
batches.Should().HaveCount(1);
}
diff --git a/unittests/PostgreSQL/TestInfrastructure/PostgreSqlGrateTestContext.cs b/unittests/PostgreSQL/TestInfrastructure/PostgreSqlGrateTestContext.cs
index 28974284..b509eb97 100644
--- a/unittests/PostgreSQL/TestInfrastructure/PostgreSqlGrateTestContext.cs
+++ b/unittests/PostgreSQL/TestInfrastructure/PostgreSqlGrateTestContext.cs
@@ -1,8 +1,8 @@
using System.Data;
+using grate.Configuration;
using grate.Infrastructure;
using grate.Migration;
using grate.PostgreSql.Migration;
-using Microsoft.Extensions.DependencyInjection;
using Npgsql;
using TestCommon.TestInfrastructure;
@@ -13,15 +13,25 @@ public class PostgreSqlGrateTestContext : IGrateTestContext
public IServiceProvider ServiceProvider { get; private set; }
private readonly PostgreSqlTestContainer _testContainer;
private readonly IDatabaseConnectionFactory _databaseConnectionFactory;
- public PostgreSqlGrateTestContext(IServiceProvider serviceProvider, PostgreSqlTestContainer container)
+ private readonly Func _getGrateMigrator;
+
+ public PostgreSqlGrateTestContext(
+ Func getGrateMigrator,
+ IDatabase dbMigrator,
+ ISyntax syntax,
+ IDatabaseConnectionFactory databaseConnectionFactory,
+ PostgreSqlTestContainer container)
{
- ServiceProvider = serviceProvider;
+ ServiceProvider = null!;
+ _getGrateMigrator = getGrateMigrator;
_testContainer = container;
- DatabaseMigrator = serviceProvider.GetRequiredService();
- Syntax = serviceProvider.GetRequiredService();
- _databaseConnectionFactory = serviceProvider.GetRequiredService();
-
+ DatabaseMigrator = dbMigrator;
+ Syntax = syntax;
+ _databaseConnectionFactory = databaseConnectionFactory;
}
+
+ public IGrateMigrator GetMigrator(GrateConfiguration config) => _getGrateMigrator(config);
+
public string AdminPassword => _testContainer.AdminPassword;
public int? Port => _testContainer.TestContainer!.GetMappedPublicPort(_testContainer.Port);
diff --git a/unittests/PostgreSQL/TestInfrastructure/SimpleService.cs b/unittests/PostgreSQL/TestInfrastructure/SimpleService.cs
deleted file mode 100644
index 70a7993c..00000000
--- a/unittests/PostgreSQL/TestInfrastructure/SimpleService.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using grate;
-using grate.PostgreSql;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Logging;
-using TestCommon.TestInfrastructure;
-namespace PostgreSQL.TestInfrastructure;
-public class SimpleService
-{
- public IServiceProvider ServiceProvider { get; }
- public SimpleService()
- {
- ServiceProvider = new ServiceCollection()
- .AddLogging(opt =>
- {
- opt.AddConsole();
- opt.SetMinimumLevel(TestConfig.GetLogLevel());
- })
- .AddGrate(cfg =>
- {
- cfg.UsePostgreSql();
- })
- .AddSingleton()
- .BuildServiceProvider();
- }
-}
diff --git a/unittests/SqlServer/Database.cs b/unittests/SqlServer/Database.cs
index f955fffd..7b91b6e7 100644
--- a/unittests/SqlServer/Database.cs
+++ b/unittests/SqlServer/Database.cs
@@ -1,23 +1,13 @@
using FluentAssertions;
-using SqlServer.TestInfrastructure;
using TestCommon.TestInfrastructure;
namespace SqlServer;
[Collection(nameof(SqlServerTestContainer))]
-
-public class Database : TestCommon.Generic.GenericDatabase, IClassFixture
+public class Database(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.GenericDatabase(testContext, testOutput)
{
-
- protected override IGrateTestContext Context { get; }
-
- protected ITestOutputHelper TestOutput { get; }
-
- public Database(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
+
[Fact]
public async Task Does_not_needlessly_apply_case_sensitive_database_name_checks_Issue_167()
{
diff --git a/unittests/SqlServer/MigrationTables.cs b/unittests/SqlServer/MigrationTables.cs
index 47b0a497..ce12f135 100644
--- a/unittests/SqlServer/MigrationTables.cs
+++ b/unittests/SqlServer/MigrationTables.cs
@@ -1,22 +1,12 @@
-using SqlServer.TestInfrastructure;
+using TestCommon.Generic;
using TestCommon.TestInfrastructure;
namespace SqlServer;
[Collection(nameof(SqlServerTestContainer))]
-
-public class MigrationTables : TestCommon.Generic.GenericMigrationTables, IClassFixture
+public class MigrationTables(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : GenericMigrationTables(testContext, testOutput)
{
-
- protected override IGrateTestContext Context { get; }
-
- protected ITestOutputHelper TestOutput { get; }
-
- public MigrationTables(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
protected override string CountTableSql(string schemaName, string tableName)
{
return $@"
diff --git a/unittests/SqlServer/Running_MigrationScripts/Anytime_scripts.cs b/unittests/SqlServer/Running_MigrationScripts/Anytime_scripts.cs
index ba789d20..61bdb898 100644
--- a/unittests/SqlServer/Running_MigrationScripts/Anytime_scripts.cs
+++ b/unittests/SqlServer/Running_MigrationScripts/Anytime_scripts.cs
@@ -1,19 +1,9 @@
-using SqlServer.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace SqlServer.Running_MigrationScripts;
[Collection(nameof(SqlServerTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Anytime_scripts : TestCommon.Generic.Running_MigrationScripts.Anytime_scripts, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
+public class Anytime_scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Anytime_scripts(testContext, testOutput);
- protected override ITestOutputHelper TestOutput { get; }
-
- public Anytime_scripts(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
diff --git a/unittests/SqlServer/Running_MigrationScripts/DropDatabase.cs b/unittests/SqlServer/Running_MigrationScripts/DropDatabase.cs
index f712be54..ae8710ce 100644
--- a/unittests/SqlServer/Running_MigrationScripts/DropDatabase.cs
+++ b/unittests/SqlServer/Running_MigrationScripts/DropDatabase.cs
@@ -1,18 +1,8 @@
-using SqlServer.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace SqlServer.Running_MigrationScripts;
[Collection(nameof(SqlServerTestContainer))]
-public class DropDatabase : TestCommon.Generic.Running_MigrationScripts.DropDatabase, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public DropDatabase(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
+// ReSharper disable once InconsistentNaming
+public class DropDatabase(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.DropDatabase(testContext, testOutput);
diff --git a/unittests/SqlServer/Running_MigrationScripts/Environment_scripts.cs b/unittests/SqlServer/Running_MigrationScripts/Environment_scripts.cs
index fdd41754..39e71bb0 100644
--- a/unittests/SqlServer/Running_MigrationScripts/Environment_scripts.cs
+++ b/unittests/SqlServer/Running_MigrationScripts/Environment_scripts.cs
@@ -1,19 +1,8 @@
-using SqlServer.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace SqlServer.Running_MigrationScripts;
[Collection(nameof(SqlServerTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Environment_scripts : TestCommon.Generic.Running_MigrationScripts.Environment_scripts, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public Environment_scripts(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
+public class Environment_scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Environment_scripts(testContext, testOutput);
diff --git a/unittests/SqlServer/Running_MigrationScripts/Everytime_scripts.cs b/unittests/SqlServer/Running_MigrationScripts/Everytime_scripts.cs
index b608d532..2001ca88 100644
--- a/unittests/SqlServer/Running_MigrationScripts/Everytime_scripts.cs
+++ b/unittests/SqlServer/Running_MigrationScripts/Everytime_scripts.cs
@@ -1,19 +1,8 @@
-using SqlServer.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace SqlServer.Running_MigrationScripts;
[Collection(nameof(SqlServerTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Everytime_scripts : TestCommon.Generic.Running_MigrationScripts.Everytime_scripts, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public Everytime_scripts(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
+public class Everytime_scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Everytime_scripts(testContext, testOutput);
diff --git a/unittests/SqlServer/Running_MigrationScripts/Failing_Scripts.cs b/unittests/SqlServer/Running_MigrationScripts/Failing_Scripts.cs
index e53f1102..4115c745 100644
--- a/unittests/SqlServer/Running_MigrationScripts/Failing_Scripts.cs
+++ b/unittests/SqlServer/Running_MigrationScripts/Failing_Scripts.cs
@@ -1,21 +1,11 @@
-using SqlServer.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace SqlServer.Running_MigrationScripts;
[Collection(nameof(SqlServerTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Failing_Scripts : TestCommon.Generic.Running_MigrationScripts.Failing_Scripts, IClassFixture
+public class Failing_Scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Failing_Scripts(testContext, testOutput)
{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public Failing_Scripts(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
protected override string ExpectedErrorMessageForInvalidSql => "Incorrect syntax near 'TOP'.";
}
diff --git a/unittests/SqlServer/Running_MigrationScripts/One_time_scripts.cs b/unittests/SqlServer/Running_MigrationScripts/One_time_scripts.cs
index 150d1d34..ef2595bd 100644
--- a/unittests/SqlServer/Running_MigrationScripts/One_time_scripts.cs
+++ b/unittests/SqlServer/Running_MigrationScripts/One_time_scripts.cs
@@ -1,19 +1,8 @@
-using SqlServer.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace SqlServer.Running_MigrationScripts;
[Collection(nameof(SqlServerTestContainer))]
// ReSharper disable once InconsistentNaming
-public class One_time_scripts : TestCommon.Generic.Running_MigrationScripts.One_time_scripts, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public One_time_scripts(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
+public class One_time_scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.One_time_scripts(testContext, testOutput);
diff --git a/unittests/SqlServer/Running_MigrationScripts/Order_Of_Scripts.cs b/unittests/SqlServer/Running_MigrationScripts/Order_Of_Scripts.cs
index cafba161..bec9acd3 100644
--- a/unittests/SqlServer/Running_MigrationScripts/Order_Of_Scripts.cs
+++ b/unittests/SqlServer/Running_MigrationScripts/Order_Of_Scripts.cs
@@ -1,19 +1,8 @@
-using SqlServer.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace SqlServer.Running_MigrationScripts;
[Collection(nameof(SqlServerTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Order_Of_Scripts : TestCommon.Generic.Running_MigrationScripts.Order_Of_Scripts, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public Order_Of_Scripts(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
+public class Order_Of_Scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Order_Of_Scripts(testContext, testOutput);
diff --git a/unittests/SqlServer/Running_MigrationScripts/RestoreDatabase.cs b/unittests/SqlServer/Running_MigrationScripts/RestoreDatabase.cs
index 22cb4b24..2a7b8c15 100644
--- a/unittests/SqlServer/Running_MigrationScripts/RestoreDatabase.cs
+++ b/unittests/SqlServer/Running_MigrationScripts/RestoreDatabase.cs
@@ -1,23 +1,16 @@
using Dapper;
using FluentAssertions;
using grate.Configuration;
-using SqlServer.TestInfrastructure;
using TestCommon.TestInfrastructure;
namespace SqlServer.Running_MigrationScripts;
+
[Collection(nameof(SqlServerTestContainer))]
-public class RestoreDatabase : SqlServerScriptsBase, IClassFixture
+// ReSharper disable once InconsistentNaming
+public class RestoreDatabase(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : SqlServerScriptsBase(testContext, testOutput)
{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public RestoreDatabase(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
private readonly string _backupPath = "/var/opt/mssql/backup/test.bak";
diff --git a/unittests/SqlServer/Running_MigrationScripts/ScriptsRun_Table.cs b/unittests/SqlServer/Running_MigrationScripts/ScriptsRun_Table.cs
index bb9bb95c..0acf0df3 100644
--- a/unittests/SqlServer/Running_MigrationScripts/ScriptsRun_Table.cs
+++ b/unittests/SqlServer/Running_MigrationScripts/ScriptsRun_Table.cs
@@ -1,19 +1,8 @@
-using SqlServer.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace SqlServer.Running_MigrationScripts;
[Collection(nameof(SqlServerTestContainer))]
-
-public class ScriptsRun_Table : TestCommon.Generic.Running_MigrationScripts.ScriptsRun_Table, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public ScriptsRun_Table(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
+// ReSharper disable once InconsistentNaming
+public class ScriptsRun_Table(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.ScriptsRun_Table(testContext, testOutput);
diff --git a/unittests/SqlServer/Running_MigrationScripts/SqlServerScriptsBase.cs b/unittests/SqlServer/Running_MigrationScripts/SqlServerScriptsBase.cs
index 186862a3..71ed0903 100644
--- a/unittests/SqlServer/Running_MigrationScripts/SqlServerScriptsBase.cs
+++ b/unittests/SqlServer/Running_MigrationScripts/SqlServerScriptsBase.cs
@@ -1,8 +1,8 @@
using TestCommon.Generic.Running_MigrationScripts;
+using TestCommon.TestInfrastructure;
namespace SqlServer.Running_MigrationScripts;
+public abstract class SqlServerScriptsBase(IGrateTestContext context, ITestOutputHelper testOutput) :
+ MigrationsScriptsBase(context, testOutput);
-public abstract class SqlServerScriptsBase : MigrationsScriptsBase
-{
-}
diff --git a/unittests/SqlServer/Running_MigrationScripts/TokenScripts.cs b/unittests/SqlServer/Running_MigrationScripts/TokenScripts.cs
index dea4bb43..dfed21ea 100644
--- a/unittests/SqlServer/Running_MigrationScripts/TokenScripts.cs
+++ b/unittests/SqlServer/Running_MigrationScripts/TokenScripts.cs
@@ -1,18 +1,9 @@
-using SqlServer.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace SqlServer.Running_MigrationScripts;
[Collection(nameof(SqlServerTestContainer))]
-public class TokenScripts : TestCommon.Generic.Running_MigrationScripts.TokenScripts, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
+// ReSharper disable once InconsistentNaming
+public class TokenScripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.TokenScripts(testContext, testOutput);
- protected override ITestOutputHelper TestOutput { get; }
-
- public TokenScripts(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
diff --git a/unittests/SqlServer/Running_MigrationScripts/Versioning_The_Database.cs b/unittests/SqlServer/Running_MigrationScripts/Versioning_The_Database.cs
index 394facca..7f336c61 100644
--- a/unittests/SqlServer/Running_MigrationScripts/Versioning_The_Database.cs
+++ b/unittests/SqlServer/Running_MigrationScripts/Versioning_The_Database.cs
@@ -1,19 +1,8 @@
-using SqlServer.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace SqlServer.Running_MigrationScripts;
[Collection(nameof(SqlServerTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Versioning_The_Database : TestCommon.Generic.Running_MigrationScripts.Versioning_The_Database, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public Versioning_The_Database(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
+public class Versioning_The_Database(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Versioning_The_Database(testContext, testOutput);
diff --git a/unittests/SqlServer/SqlServer.csproj b/unittests/SqlServer/SqlServer.csproj
index 32943349..33f5ccc0 100644
--- a/unittests/SqlServer/SqlServer.csproj
+++ b/unittests/SqlServer/SqlServer.csproj
@@ -15,6 +15,8 @@
+
+
diff --git a/unittests/SqlServer/SqlServerDatabase_.cs b/unittests/SqlServer/SqlServerDatabase_.cs
index 0438d170..c9cb1811 100644
--- a/unittests/SqlServer/SqlServerDatabase_.cs
+++ b/unittests/SqlServer/SqlServerDatabase_.cs
@@ -1,29 +1,18 @@
-using System.Data.Common;
-using FluentAssertions;
+using FluentAssertions;
using grate.Configuration;
-using grate.SqlServer.Migration;
using Microsoft.Data.SqlClient;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Logging;
using SqlServer.TestInfrastructure;
namespace Basic_tests.Infrastructure.SqlServer;
// ReSharper disable once InconsistentNaming
-public class SqlServerDatabase_ : IClassFixture
+public class SqlServerDatabase_(InspectableSqlServerDatabase sqlServerDatabase)
{
- private IServiceProvider _serviceProvider;
-
- public SqlServerDatabase_(SimpleService simpleService)
- {
- _serviceProvider = simpleService.ServiceProvider;
- }
[Fact]
public async Task Disables_pooling_if_not_explicitly_set_in_connection_string()
{
var connStr = "Server=dummy";
var cfg = new GrateConfiguration() { ConnectionString = connStr };
- var sqlServerDatabase = new InspectableSqlServerDatabase(_serviceProvider);
await sqlServerDatabase.InitializeConnections(cfg);
var conn = sqlServerDatabase.GetConnection();
@@ -36,20 +25,10 @@ public async Task Leaves_pooling_as_configured_if_set_explicitly_in_connection_s
{
var connStr = "Server=dummy;Pooling=true";
var cfg = new GrateConfiguration() { ConnectionString = connStr };
- var sqlServerDatabase = new InspectableSqlServerDatabase(_serviceProvider);
await sqlServerDatabase.InitializeConnections(cfg);
var conn = sqlServerDatabase.GetConnection();
var builder = new SqlConnectionStringBuilder(conn.ConnectionString);
builder.Pooling.Should().BeTrue();
}
-
- private class InspectableSqlServerDatabase : SqlServerDatabase
- {
- public InspectableSqlServerDatabase(IServiceProvider serviceProvider) : base(serviceProvider.GetRequiredService>())
- {
- }
-
- public DbConnection GetConnection() => base.Connection;
- }
}
diff --git a/unittests/SqlServer/Startup.cs b/unittests/SqlServer/Startup.cs
new file mode 100644
index 00000000..b8f1166d
--- /dev/null
+++ b/unittests/SqlServer/Startup.cs
@@ -0,0 +1,60 @@
+using grate.Configuration;
+using grate.Infrastructure;
+using grate.Migration;
+using grate.SqlServer.Infrastructure;
+using grate.SqlServer.Migration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Logging;
+using SqlServer.TestInfrastructure;
+using TestCommon.TestInfrastructure;
+
+namespace SqlServer;
+
+// ReSharper disable once UnusedType.Global
+public class Startup
+{
+ // ReSharper disable once UnusedMember.Global
+ public void ConfigureServices(IServiceCollection services, HostBuilderContext context)
+ {
+ services
+ .AddLogging(
+ lb => lb
+ .AddXUnit()
+ .AddConsole()
+ .SetMinimumLevel(TestConfig.GetLogLevel())
+ )
+ .AddSingleton()
+ .AddSingleton()
+ .AddSingleton>(provider =>
+ config =>
+ {
+ IDatabase database = provider.GetRequiredService();
+
+ ILogger dbLogger = provider.GetRequiredService>();
+ ILogger grateLogger = provider.GetRequiredService>();
+
+ IHashGenerator hashGenerator = provider.GetRequiredService();
+ return
+ new GrateMigrator(grateLogger,
+ new DbMigrator(database, dbLogger, hashGenerator, config));
+ })
+ .AddSingleton()
+
+ .AddTransient()
+
+ .AddTransient()
+ .AddSingleton()
+ .AddSingleton(provider => new StatementSplitter(
+ provider.GetRequiredService().StatementSeparatorRegex))
+ .AddSingleton(provider =>
+ {
+ var database = provider.GetService()!;
+ return new BatchSplitterReplacer(database.StatementSeparatorRegex, StatementSplitter.BatchTerminatorReplacementString);
+ })
+ .AddSingleton()
+ .AddTransient()
+ ;
+
+ }
+}
diff --git a/unittests/SqlServer/Statement_Splitting/BatchSplitterReplacer_.cs b/unittests/SqlServer/Statement_Splitting/BatchSplitterReplacer_.cs
index aae184b2..2896b37a 100644
--- a/unittests/SqlServer/Statement_Splitting/BatchSplitterReplacer_.cs
+++ b/unittests/SqlServer/Statement_Splitting/BatchSplitterReplacer_.cs
@@ -15,16 +15,11 @@ public class BatchSplitterReplacer_
private const string Symbols_to_check = "`~!@#$%^&*()-_+=,.;:'\"[]\\/?<>";
private const string Words_to_check = "abcdefghijklmnopqrstuvwzyz0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- public class should_replace_on : IClassFixture
+ public class should_replace_on(ITestOutputHelper testOutput, BatchSplitterReplacer replacer)
{
- private ITestOutputHelper _testOutput;
- private BatchSplitterReplacer Replacer;
+ private ITestOutputHelper _testOutput = testOutput;
+ private BatchSplitterReplacer Replacer = replacer;
- public should_replace_on(ITestOutputHelper testOutput, SimpleService simpleService)
- {
- _testOutput = testOutput;
- Replacer = simpleService.ServiceProvider.GetRequiredService()!;
- }
[Fact]
public void full_statement_without_issue()
{
@@ -276,16 +271,8 @@ public void go_with_semicolon_directly_after()
}
- public class should_not_replace_on : IClassFixture
+ public class should_not_replace_on(ITestOutputHelper testOutput, BatchSplitterReplacer replacer)
{
- private ITestOutputHelper _testOutput;
- private BatchSplitterReplacer Replacer;
-
- public should_not_replace_on(ITestOutputHelper testOutput, SimpleService serversimpleService)
- {
- _testOutput = testOutput;
- Replacer = serversimpleService.ServiceProvider.GetRequiredService()!;
- }
[Fact]
public void g()
{
@@ -293,8 +280,8 @@ public void g()
";
const string expected_scrubbed = @" G
";
- _testOutput.WriteLine(sql_to_match);
- string sql_statement_scrubbed = Replacer.Replace(sql_to_match);
+ testOutput.WriteLine(sql_to_match);
+ string sql_statement_scrubbed = replacer.Replace(sql_to_match);
sql_statement_scrubbed.Should().Be(expected_scrubbed);
}
@@ -305,8 +292,8 @@ public void o()
";
const string expected_scrubbed = @" O
";
- _testOutput.WriteLine(sql_to_match);
- string sql_statement_scrubbed = Replacer.Replace(sql_to_match);
+ testOutput.WriteLine(sql_to_match);
+ string sql_statement_scrubbed = replacer.Replace(sql_to_match);
sql_statement_scrubbed.Should().Be(expected_scrubbed);
}
@@ -317,8 +304,8 @@ public void go_when_go_is_the_last_part_of_the_last_word_on_a_line()
";
string expected_scrubbed = Words_to_check + @"GO
";
- _testOutput.WriteLine(sql_to_match);
- string sql_statement_scrubbed = Replacer.Replace(sql_to_match);
+ testOutput.WriteLine(sql_to_match);
+ string sql_statement_scrubbed = replacer.Replace(sql_to_match);
sql_statement_scrubbed.Should().Be(expected_scrubbed);
}
@@ -329,8 +316,8 @@ public void go_with_double_dash_comment_starting_line()
";
string expected_scrubbed = @"--GO
";
- _testOutput.WriteLine(sql_to_match);
- string sql_statement_scrubbed = Replacer.Replace(sql_to_match);
+ testOutput.WriteLine(sql_to_match);
+ string sql_statement_scrubbed = replacer.Replace(sql_to_match);
sql_statement_scrubbed.Should().Be(expected_scrubbed);
}
@@ -341,8 +328,8 @@ public void go_with_double_dash_comment_and_space_starting_line()
";
string expected_scrubbed = @"-- GO
";
- _testOutput.WriteLine(sql_to_match);
- string sql_statement_scrubbed = Replacer.Replace(sql_to_match);
+ testOutput.WriteLine(sql_to_match);
+ string sql_statement_scrubbed = replacer.Replace(sql_to_match);
sql_statement_scrubbed.Should().Be(expected_scrubbed);
}
@@ -353,8 +340,8 @@ public void go_with_double_dash_comment_and_space_starting_line_and_words_after_
";
string expected_scrubbed = @"-- GO " + Words_to_check + @"
";
- _testOutput.WriteLine(sql_to_match);
- string sql_statement_scrubbed = Replacer.Replace(sql_to_match);
+ testOutput.WriteLine(sql_to_match);
+ string sql_statement_scrubbed = replacer.Replace(sql_to_match);
sql_statement_scrubbed.Should().Be(expected_scrubbed);
}
@@ -365,8 +352,8 @@ public void go_with_double_dash_comment_and_space_starting_line_and_symbols_afte
";
string expected_scrubbed = @"-- GO " + Symbols_to_check + @"
";
- _testOutput.WriteLine(sql_to_match);
- string sql_statement_scrubbed = Replacer.Replace(sql_to_match);
+ testOutput.WriteLine(sql_to_match);
+ string sql_statement_scrubbed = replacer.Replace(sql_to_match);
sql_statement_scrubbed.Should().Be(expected_scrubbed);
}
@@ -377,8 +364,8 @@ public void go_with_double_dash_comment_and_tab_starting_line()
";
string expected_scrubbed = @"--" + "\t" + @"GO
";
- _testOutput.WriteLine(sql_to_match);
- string sql_statement_scrubbed = Replacer.Replace(sql_to_match);
+ testOutput.WriteLine(sql_to_match);
+ string sql_statement_scrubbed = replacer.Replace(sql_to_match);
sql_statement_scrubbed.Should().Be(expected_scrubbed);
}
@@ -389,8 +376,8 @@ public void go_with_double_dash_comment_and_tab_starting_line_and_words_after_go
";
string expected_scrubbed = @"--" + "\t" + @"GO " + Words_to_check + @"
";
- _testOutput.WriteLine(sql_to_match);
- string sql_statement_scrubbed = Replacer.Replace(sql_to_match);
+ testOutput.WriteLine(sql_to_match);
+ string sql_statement_scrubbed = replacer.Replace(sql_to_match);
sql_statement_scrubbed.Should().Be(expected_scrubbed);
}
@@ -401,8 +388,8 @@ public void go_with_double_dash_comment_and_tab_starting_line_and_symbols_after_
";
string expected_scrubbed = @"--" + "\t" + @"GO " + Symbols_to_check + @"
";
- _testOutput.WriteLine(sql_to_match);
- string sql_statement_scrubbed = Replacer.Replace(sql_to_match);
+ testOutput.WriteLine(sql_to_match);
+ string sql_statement_scrubbed = replacer.Replace(sql_to_match);
sql_statement_scrubbed.Should().Be(expected_scrubbed);
}
@@ -413,8 +400,8 @@ public void go_with_double_dash_comment_starting_line_with_words_before_go()
";
string expected_scrubbed = @"-- " + Words_to_check + @" GO
";
- _testOutput.WriteLine(sql_to_match);
- string sql_statement_scrubbed = Replacer.Replace(sql_to_match);
+ testOutput.WriteLine(sql_to_match);
+ string sql_statement_scrubbed = replacer.Replace(sql_to_match);
sql_statement_scrubbed.Should().Be(expected_scrubbed);
}
@@ -425,8 +412,8 @@ public void go_when_between_tick_marks()
'";
const string expected_scrubbed = @"' GO
'";
- _testOutput.WriteLine(sql_to_match);
- string sql_statement_scrubbed = Replacer.Replace(sql_to_match);
+ testOutput.WriteLine(sql_to_match);
+ string sql_statement_scrubbed = replacer.Replace(sql_to_match);
sql_statement_scrubbed.Should().Be(expected_scrubbed);
}
@@ -437,8 +424,8 @@ public void
string sql_to_match = @"' " + Symbols_to_check.Replace("'", string.Empty) + Words_to_check + @" GO'";
string expected_scrubbed =
@"' " + Symbols_to_check.Replace("'", string.Empty) + Words_to_check + @" GO'";
- _testOutput.WriteLine(sql_to_match);
- string sql_statement_scrubbed = Replacer.Replace(sql_to_match);
+ testOutput.WriteLine(sql_to_match);
+ string sql_statement_scrubbed = replacer.Replace(sql_to_match);
sql_statement_scrubbed.Should().Be(expected_scrubbed);
}
@@ -449,8 +436,8 @@ public void go_when_between_tick_marks_with_symbols_and_words_before()
'";
string expected_scrubbed = @"' " + Symbols_to_check.Replace("'", string.Empty) + Words_to_check + @" GO
'";
- _testOutput.WriteLine(sql_to_match);
- string sql_statement_scrubbed = Replacer.Replace(sql_to_match);
+ testOutput.WriteLine(sql_to_match);
+ string sql_statement_scrubbed = replacer.Replace(sql_to_match);
sql_statement_scrubbed.Should().Be(expected_scrubbed);
}
@@ -461,8 +448,8 @@ public void go_when_between_tick_marks_with_symbols_and_words_after()
" + Symbols_to_check.Replace("'", string.Empty) + Words_to_check + @"'";
string expected_scrubbed = @"' GO
" + Symbols_to_check.Replace("'", string.Empty) + Words_to_check + @"'";
- _testOutput.WriteLine(sql_to_match);
- string sql_statement_scrubbed = Replacer.Replace(sql_to_match);
+ testOutput.WriteLine(sql_to_match);
+ string sql_statement_scrubbed = replacer.Replace(sql_to_match);
sql_statement_scrubbed.Should().Be(expected_scrubbed);
}
@@ -473,8 +460,8 @@ public void go_with_double_dash_comment_starting_line_with_symbols_before_go()
";
string expected_scrubbed = @"--" + Symbols_to_check + @" GO
";
- _testOutput.WriteLine(sql_to_match);
- string sql_statement_scrubbed = Replacer.Replace(sql_to_match);
+ testOutput.WriteLine(sql_to_match);
+ string sql_statement_scrubbed = replacer.Replace(sql_to_match);
sql_statement_scrubbed.Should().Be(expected_scrubbed);
}
@@ -486,8 +473,8 @@ public void
";
string expected_scrubbed = @"--" + Symbols_to_check + Words_to_check + @" GO
";
- _testOutput.WriteLine(sql_to_match);
- string sql_statement_scrubbed = Replacer.Replace(sql_to_match);
+ testOutput.WriteLine(sql_to_match);
+ string sql_statement_scrubbed = replacer.Replace(sql_to_match);
sql_statement_scrubbed.Should().Be(expected_scrubbed);
}
@@ -496,8 +483,8 @@ public void go_inside_of_comments()
{
string sql_to_match = @"/* GO */";
string expected_scrubbed = @"/* GO */";
- _testOutput.WriteLine(sql_to_match);
- string sql_statement_scrubbed = Replacer.Replace(sql_to_match);
+ testOutput.WriteLine(sql_to_match);
+ string sql_statement_scrubbed = replacer.Replace(sql_to_match);
sql_statement_scrubbed.Should().Be(expected_scrubbed);
}
@@ -508,8 +495,8 @@ public void go_inside_of_comments_with_a_line_break()
*/";
string expected_scrubbed = @"/* GO
*/";
- _testOutput.WriteLine(sql_to_match);
- string sql_statement_scrubbed = Replacer.Replace(sql_to_match);
+ testOutput.WriteLine(sql_to_match);
+ string sql_statement_scrubbed = replacer.Replace(sql_to_match);
sql_statement_scrubbed.Should().Be(expected_scrubbed);
}
@@ -526,8 +513,8 @@ public void go_inside_of_comments_with_words_before()
" + Words_to_check + @" GO
*/";
- _testOutput.WriteLine(sql_to_match);
- string sql_statement_scrubbed = Replacer.Replace(sql_to_match);
+ testOutput.WriteLine(sql_to_match);
+ string sql_statement_scrubbed = replacer.Replace(sql_to_match);
sql_statement_scrubbed.Should().Be(expected_scrubbed);
}
@@ -546,8 +533,8 @@ public void go_inside_of_comments_with_words_before_on_a_different_line()
GO
*/";
- _testOutput.WriteLine(sql_to_match);
- string sql_statement_scrubbed = Replacer.Replace(sql_to_match);
+ testOutput.WriteLine(sql_to_match);
+ string sql_statement_scrubbed = replacer.Replace(sql_to_match);
sql_statement_scrubbed.Should().Be(expected_scrubbed);
}
@@ -568,8 +555,8 @@ public void go_inside_of_comments_with_words_before_and_after_on_different_lines
" + Words_to_check + @"
*/";
- _testOutput.WriteLine(sql_to_match);
- string sql_statement_scrubbed = Replacer.Replace(sql_to_match);
+ testOutput.WriteLine(sql_to_match);
+ string sql_statement_scrubbed = replacer.Replace(sql_to_match);
sql_statement_scrubbed.Should().Be(expected_scrubbed);
}
@@ -588,8 +575,8 @@ public void go_inside_of_comments_with_symbols_after_on_different_lines()
" + Symbols_to_check + @"
*/";
- _testOutput.WriteLine(sql_to_match);
- string sql_statement_scrubbed = Replacer.Replace(sql_to_match);
+ testOutput.WriteLine(sql_to_match);
+ string sql_statement_scrubbed = replacer.Replace(sql_to_match);
sql_statement_scrubbed.Should().Be(expected_scrubbed);
}
}
diff --git a/unittests/SqlServer/Statement_Splitting/StatementSplitter_.cs b/unittests/SqlServer/Statement_Splitting/StatementSplitter_.cs
index 0fc92b46..8a8b5b64 100644
--- a/unittests/SqlServer/Statement_Splitting/StatementSplitter_.cs
+++ b/unittests/SqlServer/Statement_Splitting/StatementSplitter_.cs
@@ -1,21 +1,12 @@
using FluentAssertions;
using grate.Infrastructure;
-using Microsoft.Extensions.DependencyInjection;
-using SqlServer.TestInfrastructure;
-namespace Basic_tests.Infrastructure.SqlServer.Statement_Splitting;
+namespace SqlServer.Statement_Splitting;
// ReSharper disable once InconsistentNaming
-public class StatementSplitter_ : IClassFixture
+public class StatementSplitter_(StatementSplitter splitter)
{
- private StatementSplitter Splitter;
-
- public StatementSplitter_(SimpleService simpleService)
- {
- Splitter = simpleService.ServiceProvider.GetRequiredService()!;
- }
-
[Fact]
public void Splits_and_removes_GO_statements()
{
@@ -26,7 +17,7 @@ public void Splits_and_removes_GO_statements()
GO
SELECT 1
";
- var batches = Splitter.Split(original);
+ var batches = splitter.Split(original);
batches.Should().HaveCount(2);
}
diff --git a/unittests/SqlServer/TestInfrastructure/InspectableSqlServerDatabase.cs b/unittests/SqlServer/TestInfrastructure/InspectableSqlServerDatabase.cs
new file mode 100644
index 00000000..47c1218e
--- /dev/null
+++ b/unittests/SqlServer/TestInfrastructure/InspectableSqlServerDatabase.cs
@@ -0,0 +1,11 @@
+using System.Data.Common;
+using grate.SqlServer.Migration;
+using Microsoft.Extensions.Logging;
+
+namespace SqlServer.TestInfrastructure;
+
+// ReSharper disable once ClassNeverInstantiated.Global
+public class InspectableSqlServerDatabase(ILogger logger): SqlServerDatabase(logger)
+{
+ public DbConnection GetConnection() => base.Connection;
+}
diff --git a/unittests/SqlServer/TestInfrastructure/SimpleService.cs b/unittests/SqlServer/TestInfrastructure/SimpleService.cs
deleted file mode 100644
index 065be52a..00000000
--- a/unittests/SqlServer/TestInfrastructure/SimpleService.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using grate;
-using grate.SqlServer;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Logging;
-using TestCommon.TestInfrastructure;
-namespace SqlServer.TestInfrastructure;
-public class SimpleService
-{
- public IServiceProvider ServiceProvider { get; }
- public SimpleService()
- {
- ServiceProvider = new ServiceCollection()
- .AddLogging(opt =>
- {
- opt.AddConsole();
- opt.SetMinimumLevel(TestConfig.GetLogLevel());
- })
- .AddGrate(cfg =>
- {
- cfg.UseSqlServer();
- })
- .AddSingleton()
- .BuildServiceProvider();
- }
-}
diff --git a/unittests/SqlServer/TokenReplacerTests.cs b/unittests/SqlServer/TokenReplacerTests.cs
index bca3a9e1..b36a47b2 100644
--- a/unittests/SqlServer/TokenReplacerTests.cs
+++ b/unittests/SqlServer/TokenReplacerTests.cs
@@ -2,20 +2,11 @@
using grate.Configuration;
using grate.Infrastructure;
using grate.Migration;
-using Microsoft.Extensions.DependencyInjection;
-using SqlServer.TestInfrastructure;
namespace Basic_tests.Infrastructure;
-
-public class TokenReplacerTests : IClassFixture
+public class TokenReplacerTests(IDatabase database)
{
- private readonly IServiceProvider _serviceProvider;
- public TokenReplacerTests(SimpleService sqlServersimpleService)
- {
- _serviceProvider = sqlServersimpleService.ServiceProvider;
- }
-
[Fact]
public void EnsureDbMakesItToTokens()
{
@@ -26,10 +17,9 @@ public void EnsureDbMakesItToTokens()
};
- var db = _serviceProvider.GetRequiredService();
- db.InitializeConnections(config);
+ database.InitializeConnections(config);
- var provider = new TokenProvider(config, db);
+ var provider = new TokenProvider(config, database);
var tokens = provider.GetTokens();
tokens["DatabaseName"].Should().Be("TestDb");
diff --git a/unittests/SqlServerCaseSensitive/Database.cs b/unittests/SqlServerCaseSensitive/Database.cs
index 825fbc95..fa666238 100644
--- a/unittests/SqlServerCaseSensitive/Database.cs
+++ b/unittests/SqlServerCaseSensitive/Database.cs
@@ -1,19 +1,7 @@
-using SqlServerCaseSensitive.TestInfrastructure;
-using TestCommon.Generic;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace SqlServerCaseSensitive;
-[Collection(nameof(SqlServerTestContainer))]
-public class Database : GenericDatabase, IClassFixture
-{
-
- protected override IGrateTestContext Context { get; }
- protected ITestOutputHelper TestOutput { get; }
-
- public Database(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
+[Collection(nameof(SqlServerTestContainer))]
+public class Database(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.GenericDatabase(testContext, testOutput);
diff --git a/unittests/SqlServerCaseSensitive/MigrationTables.cs b/unittests/SqlServerCaseSensitive/MigrationTables.cs
index b88c0dd4..8a9e7f0c 100644
--- a/unittests/SqlServerCaseSensitive/MigrationTables.cs
+++ b/unittests/SqlServerCaseSensitive/MigrationTables.cs
@@ -1,19 +1,8 @@
-using SqlServerCaseSensitive.TestInfrastructure;
-using TestCommon.Generic;
+using TestCommon.Generic;
using TestCommon.TestInfrastructure;
namespace SqlServerCaseSensitive;
-[Collection(nameof(SqlServerTestContainer))]
-public class MigrationTables : GenericMigrationTables, IClassFixture
-{
-
- protected override IGrateTestContext Context { get; }
- protected ITestOutputHelper TestOutput { get; }
-
- public MigrationTables(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
+[Collection(nameof(SqlServerTestContainer))]
+public class MigrationTables(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : GenericMigrationTables(testContext, testOutput);
diff --git a/unittests/SqlServerCaseSensitive/Running_MigrationScripts/Anytime_scripts.cs b/unittests/SqlServerCaseSensitive/Running_MigrationScripts/Anytime_scripts.cs
index a6fd9006..f16e2908 100644
--- a/unittests/SqlServerCaseSensitive/Running_MigrationScripts/Anytime_scripts.cs
+++ b/unittests/SqlServerCaseSensitive/Running_MigrationScripts/Anytime_scripts.cs
@@ -1,18 +1,9 @@
-using SqlServerCaseSensitive.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace SqlServerCaseSensitive.Running_MigrationScripts;
+
[Collection(nameof(SqlServerTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Anytime_scripts : TestCommon.Generic.Running_MigrationScripts.Anytime_scripts, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
+public class Anytime_scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Anytime_scripts(testContext, testOutput);
- public Anytime_scripts(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
diff --git a/unittests/SqlServerCaseSensitive/Running_MigrationScripts/DropDatabase.cs b/unittests/SqlServerCaseSensitive/Running_MigrationScripts/DropDatabase.cs
index 15a35b1d..26880f65 100644
--- a/unittests/SqlServerCaseSensitive/Running_MigrationScripts/DropDatabase.cs
+++ b/unittests/SqlServerCaseSensitive/Running_MigrationScripts/DropDatabase.cs
@@ -1,17 +1,9 @@
-using SqlServerCaseSensitive.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace SqlServerCaseSensitive.Running_MigrationScripts;
-[Collection(nameof(SqlServerTestContainer))]
-public class DropDatabase : TestCommon.Generic.Running_MigrationScripts.DropDatabase, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
- protected override ITestOutputHelper TestOutput { get; }
+[Collection(nameof(SqlServerTestContainer))]
+// ReSharper disable once InconsistentNaming
+public class DropDatabase(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.DropDatabase(testContext, testOutput);
- public DropDatabase(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
diff --git a/unittests/SqlServerCaseSensitive/Running_MigrationScripts/Environment_scripts.cs b/unittests/SqlServerCaseSensitive/Running_MigrationScripts/Environment_scripts.cs
index dad8b357..7f6e7bc6 100644
--- a/unittests/SqlServerCaseSensitive/Running_MigrationScripts/Environment_scripts.cs
+++ b/unittests/SqlServerCaseSensitive/Running_MigrationScripts/Environment_scripts.cs
@@ -1,18 +1,8 @@
-using SqlServerCaseSensitive.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace SqlServerCaseSensitive.Running_MigrationScripts;
+
[Collection(nameof(SqlServerTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Environment_scripts : TestCommon.Generic.Running_MigrationScripts.Environment_scripts, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public Environment_scripts(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
+public class Environment_scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Environment_scripts(testContext, testOutput);
diff --git a/unittests/SqlServerCaseSensitive/Running_MigrationScripts/Everytime_scripts.cs b/unittests/SqlServerCaseSensitive/Running_MigrationScripts/Everytime_scripts.cs
index a4ec05d1..deba3abe 100644
--- a/unittests/SqlServerCaseSensitive/Running_MigrationScripts/Everytime_scripts.cs
+++ b/unittests/SqlServerCaseSensitive/Running_MigrationScripts/Everytime_scripts.cs
@@ -1,18 +1,8 @@
-using SqlServerCaseSensitive.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace SqlServerCaseSensitive.Running_MigrationScripts;
+
[Collection(nameof(SqlServerTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Everytime_scripts : TestCommon.Generic.Running_MigrationScripts.Everytime_scripts, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public Everytime_scripts(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
+public class Everytime_scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Everytime_scripts(testContext, testOutput);
diff --git a/unittests/SqlServerCaseSensitive/Running_MigrationScripts/Failing_Scripts.cs b/unittests/SqlServerCaseSensitive/Running_MigrationScripts/Failing_Scripts.cs
index ff829460..9ac7b67d 100644
--- a/unittests/SqlServerCaseSensitive/Running_MigrationScripts/Failing_Scripts.cs
+++ b/unittests/SqlServerCaseSensitive/Running_MigrationScripts/Failing_Scripts.cs
@@ -1,20 +1,10 @@
-using SqlServerCaseSensitive.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace SqlServerCaseSensitive.Running_MigrationScripts;
[Collection(nameof(SqlServerTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Failing_Scripts : TestCommon.Generic.Running_MigrationScripts.Failing_Scripts, IClassFixture
+public class Failing_Scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Failing_Scripts(testContext, testOutput)
{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public Failing_Scripts(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
protected override string ExpectedErrorMessageForInvalidSql => "Incorrect syntax near 'TOP'.";
-
}
diff --git a/unittests/SqlServerCaseSensitive/Running_MigrationScripts/One_time_scripts.cs b/unittests/SqlServerCaseSensitive/Running_MigrationScripts/One_time_scripts.cs
index 99c41f51..c8dba4b0 100644
--- a/unittests/SqlServerCaseSensitive/Running_MigrationScripts/One_time_scripts.cs
+++ b/unittests/SqlServerCaseSensitive/Running_MigrationScripts/One_time_scripts.cs
@@ -1,18 +1,9 @@
-using SqlServerCaseSensitive.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace SqlServerCaseSensitive.Running_MigrationScripts;
+
[Collection(nameof(SqlServerTestContainer))]
// ReSharper disable once InconsistentNaming
-public class One_time_scripts : TestCommon.Generic.Running_MigrationScripts.One_time_scripts, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
+public class One_time_scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.One_time_scripts(testContext, testOutput);
- public One_time_scripts(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
diff --git a/unittests/SqlServerCaseSensitive/Running_MigrationScripts/Order_Of_Scripts.cs b/unittests/SqlServerCaseSensitive/Running_MigrationScripts/Order_Of_Scripts.cs
index df176094..e4909b4c 100644
--- a/unittests/SqlServerCaseSensitive/Running_MigrationScripts/Order_Of_Scripts.cs
+++ b/unittests/SqlServerCaseSensitive/Running_MigrationScripts/Order_Of_Scripts.cs
@@ -1,18 +1,9 @@
-using SqlServerCaseSensitive.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace SqlServerCaseSensitive.Running_MigrationScripts;
+
[Collection(nameof(SqlServerTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Order_Of_Scripts : TestCommon.Generic.Running_MigrationScripts.Order_Of_Scripts, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
+public class Order_Of_Scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Order_Of_Scripts(testContext, testOutput);
- public Order_Of_Scripts(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
diff --git a/unittests/SqlServerCaseSensitive/Running_MigrationScripts/RestoreDatabase.cs b/unittests/SqlServerCaseSensitive/Running_MigrationScripts/RestoreDatabase.cs
index 33f80e94..54343172 100644
--- a/unittests/SqlServerCaseSensitive/Running_MigrationScripts/RestoreDatabase.cs
+++ b/unittests/SqlServerCaseSensitive/Running_MigrationScripts/RestoreDatabase.cs
@@ -1,22 +1,15 @@
using Dapper;
using FluentAssertions;
using grate.Configuration;
-using SqlServerCaseSensitive.TestInfrastructure;
using TestCommon.TestInfrastructure;
namespace SqlServerCaseSensitive.Running_MigrationScripts;
+
[Collection(nameof(SqlServerTestContainer))]
-public class RestoreDatabase : SqlServerScriptsBase, IClassFixture
+// ReSharper disable once InconsistentNaming
+public class RestoreDatabase(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : SqlServerScriptsBase(testContext, testOutput)
{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public RestoreDatabase(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
private readonly string _backupPath = "/var/opt/mssql/backup/test.bak";
diff --git a/unittests/SqlServerCaseSensitive/Running_MigrationScripts/ScriptsRun_Table.cs b/unittests/SqlServerCaseSensitive/Running_MigrationScripts/ScriptsRun_Table.cs
index 6cd966a2..fd7bcf3f 100644
--- a/unittests/SqlServerCaseSensitive/Running_MigrationScripts/ScriptsRun_Table.cs
+++ b/unittests/SqlServerCaseSensitive/Running_MigrationScripts/ScriptsRun_Table.cs
@@ -1,17 +1,8 @@
-using SqlServerCaseSensitive.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace SqlServerCaseSensitive.Running_MigrationScripts;
-[Collection(nameof(SqlServerTestContainer))]
-public class ScriptsRun_Table : TestCommon.Generic.Running_MigrationScripts.ScriptsRun_Table, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
- public ScriptsRun_Table(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
+[Collection(nameof(SqlServerTestContainer))]
+// ReSharper disable once InconsistentNaming
+public class ScriptsRun_Table(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.ScriptsRun_Table(testContext, testOutput);
diff --git a/unittests/SqlServerCaseSensitive/Running_MigrationScripts/SqlServerScriptsBase.cs b/unittests/SqlServerCaseSensitive/Running_MigrationScripts/SqlServerScriptsBase.cs
index 699e090e..ccb119ee 100644
--- a/unittests/SqlServerCaseSensitive/Running_MigrationScripts/SqlServerScriptsBase.cs
+++ b/unittests/SqlServerCaseSensitive/Running_MigrationScripts/SqlServerScriptsBase.cs
@@ -1,4 +1,7 @@
using TestCommon.Generic.Running_MigrationScripts;
+using TestCommon.TestInfrastructure;
namespace SqlServerCaseSensitive.Running_MigrationScripts;
-public abstract class SqlServerScriptsBase : MigrationsScriptsBase;
+
+public abstract class SqlServerScriptsBase(IGrateTestContext context, ITestOutputHelper testOutput) :
+ MigrationsScriptsBase(context, testOutput);
diff --git a/unittests/SqlServerCaseSensitive/Running_MigrationScripts/TokenScripts.cs b/unittests/SqlServerCaseSensitive/Running_MigrationScripts/TokenScripts.cs
index ee767ab9..313094c9 100644
--- a/unittests/SqlServerCaseSensitive/Running_MigrationScripts/TokenScripts.cs
+++ b/unittests/SqlServerCaseSensitive/Running_MigrationScripts/TokenScripts.cs
@@ -1,17 +1,8 @@
-using SqlServerCaseSensitive.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace SqlServerCaseSensitive.Running_MigrationScripts;
-[Collection(nameof(SqlServerTestContainer))]
-public class TokenScripts : TestCommon.Generic.Running_MigrationScripts.TokenScripts, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
- public TokenScripts(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
+[Collection(nameof(SqlServerTestContainer))]
+// ReSharper disable once InconsistentNaming
+public class TokenScripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.TokenScripts(testContext, testOutput);
diff --git a/unittests/SqlServerCaseSensitive/Running_MigrationScripts/Versioning_The_Database.cs b/unittests/SqlServerCaseSensitive/Running_MigrationScripts/Versioning_The_Database.cs
index 9f3e2076..ecc52e48 100644
--- a/unittests/SqlServerCaseSensitive/Running_MigrationScripts/Versioning_The_Database.cs
+++ b/unittests/SqlServerCaseSensitive/Running_MigrationScripts/Versioning_The_Database.cs
@@ -1,18 +1,9 @@
-using SqlServerCaseSensitive.TestInfrastructure;
-using TestCommon.TestInfrastructure;
+using TestCommon.TestInfrastructure;
namespace SqlServerCaseSensitive.Running_MigrationScripts;
+
[Collection(nameof(SqlServerTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Versioning_The_Database : TestCommon.Generic.Running_MigrationScripts.Versioning_The_Database, IClassFixture
-{
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
+public class Versioning_The_Database(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Versioning_The_Database(testContext, testOutput);
- public Versioning_The_Database(SqlServerTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqlServerGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-}
diff --git a/unittests/SqlServerCaseSensitive/SqlServerCaseSensitive.csproj b/unittests/SqlServerCaseSensitive/SqlServerCaseSensitive.csproj
index 32943349..33f5ccc0 100644
--- a/unittests/SqlServerCaseSensitive/SqlServerCaseSensitive.csproj
+++ b/unittests/SqlServerCaseSensitive/SqlServerCaseSensitive.csproj
@@ -15,6 +15,8 @@
+
+
diff --git a/unittests/SqlServerCaseSensitive/Startup.cs b/unittests/SqlServerCaseSensitive/Startup.cs
new file mode 100644
index 00000000..c6f44b52
--- /dev/null
+++ b/unittests/SqlServerCaseSensitive/Startup.cs
@@ -0,0 +1,60 @@
+using grate.Configuration;
+using grate.Infrastructure;
+using grate.Migration;
+using grate.SqlServer.Infrastructure;
+using grate.SqlServer.Migration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Logging;
+using SqlServerCaseSensitive.TestInfrastructure;
+using TestCommon.TestInfrastructure;
+
+namespace SqlServerCaseSensitive;
+
+// ReSharper disable once UnusedType.Global
+public class Startup
+{
+ // ReSharper disable once UnusedMember.Global
+ public void ConfigureServices(IServiceCollection services, HostBuilderContext context)
+ {
+ services
+ .AddLogging(
+ lb => lb
+ .AddXUnit()
+ .AddConsole()
+ .SetMinimumLevel(TestConfig.GetLogLevel())
+ )
+ .AddSingleton()
+ .AddSingleton()
+ .AddSingleton>(provider =>
+ config =>
+ {
+ IDatabase database = provider.GetRequiredService();
+
+ ILogger dbLogger = provider.GetRequiredService>();
+ ILogger grateLogger = provider.GetRequiredService>();
+
+ IHashGenerator hashGenerator = provider.GetRequiredService();
+ return
+ new GrateMigrator(grateLogger,
+ new DbMigrator(database, dbLogger, hashGenerator, config));
+ })
+ .AddSingleton()
+
+ .AddTransient()
+
+ .AddTransient()
+ .AddSingleton()
+ .AddSingleton(provider => new StatementSplitter(
+ provider.GetRequiredService().StatementSeparatorRegex))
+ .AddSingleton(provider =>
+ {
+ var database = provider.GetService()!;
+ return new BatchSplitterReplacer(database.StatementSeparatorRegex, StatementSplitter.BatchTerminatorReplacementString);
+ })
+ .AddSingleton()
+ .AddTransient()
+ ;
+
+ }
+}
diff --git a/unittests/SqlServerCaseSensitive/TestInfrastructure/InspectableSqlServerDatabase.cs b/unittests/SqlServerCaseSensitive/TestInfrastructure/InspectableSqlServerDatabase.cs
new file mode 100644
index 00000000..6edfb8ce
--- /dev/null
+++ b/unittests/SqlServerCaseSensitive/TestInfrastructure/InspectableSqlServerDatabase.cs
@@ -0,0 +1,11 @@
+using System.Data.Common;
+using grate.SqlServer.Migration;
+using Microsoft.Extensions.Logging;
+
+namespace SqlServerCaseSensitive.TestInfrastructure;
+
+// ReSharper disable once ClassNeverInstantiated.Global
+public class InspectableSqlServerDatabase(ILogger logger): SqlServerDatabase(logger)
+{
+ public DbConnection GetConnection() => base.Connection;
+}
diff --git a/unittests/SqlServerCaseSensitive/TestInfrastructure/SimpleService.cs b/unittests/SqlServerCaseSensitive/TestInfrastructure/SimpleService.cs
deleted file mode 100644
index 30243360..00000000
--- a/unittests/SqlServerCaseSensitive/TestInfrastructure/SimpleService.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using grate;
-using grate.SqlServer;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Logging;
-using TestCommon.TestInfrastructure;
-namespace SqlServerCaseSensitive.TestInfrastructure;
-public class SimpleService
-{
- public IServiceProvider ServiceProvider { get; }
- public SimpleService()
- {
- ServiceProvider = new ServiceCollection()
- .AddLogging(opt =>
- {
- opt.AddConsole();
- opt.SetMinimumLevel(TestConfig.GetLogLevel());
- })
- .AddGrate(cfg =>
- {
- cfg.UseSqlServer();
- })
- .AddSingleton()
- .BuildServiceProvider();
- }
-}
diff --git a/unittests/SqlServerCaseSensitive/TestInfrastructure/SqlServerGrateTestContext.cs b/unittests/SqlServerCaseSensitive/TestInfrastructure/SqlServerGrateTestContext.cs
index 984df200..4645bce8 100644
--- a/unittests/SqlServerCaseSensitive/TestInfrastructure/SqlServerGrateTestContext.cs
+++ b/unittests/SqlServerCaseSensitive/TestInfrastructure/SqlServerGrateTestContext.cs
@@ -1,12 +1,10 @@
using System.Data;
-using System.Runtime.InteropServices;
using grate.Infrastructure;
using grate.Migration;
using grate.SqlServer.Migration;
using Microsoft.Data.SqlClient;
using Microsoft.Extensions.DependencyInjection;
using TestCommon.TestInfrastructure;
-using static System.Runtime.InteropServices.Architecture;
namespace SqlServerCaseSensitive.TestInfrastructure;
diff --git a/unittests/SqlServerCaseSensitive/TestInfrastructure/SqlServerTestContainer.cs b/unittests/SqlServerCaseSensitive/TestInfrastructure/SqlServerTestContainer.cs
index 3a593dda..48f6b110 100644
--- a/unittests/SqlServerCaseSensitive/TestInfrastructure/SqlServerTestContainer.cs
+++ b/unittests/SqlServerCaseSensitive/TestInfrastructure/SqlServerTestContainer.cs
@@ -1,6 +1,5 @@
-using System.Runtime.InteropServices;
-using Testcontainers.MsSql;
-using static System.Runtime.InteropServices.Architecture;
+using Testcontainers.MsSql;
+
namespace TestCommon.TestInfrastructure;
public class SqlServerTestContainer : ContainerFixture
{
diff --git a/unittests/Sqlite/Database.cs b/unittests/Sqlite/Database.cs
index de4557e5..cddd1fc9 100644
--- a/unittests/Sqlite/Database.cs
+++ b/unittests/Sqlite/Database.cs
@@ -5,20 +5,12 @@
namespace Sqlite;
[Collection(nameof(SqliteTestContainer))]
-public class Database : TestCommon.Generic.GenericDatabase, IClassFixture
+// ReSharper disable once InconsistentNaming
+// ReSharper disable once UnusedType.Global
+public class Database(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.GenericDatabase(testContext, testOutput)
{
-
- protected override IGrateTestContext Context { get; }
-
- protected ITestOutputHelper TestOutput { get; }
-
- public Database(SqliteTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqliteGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
-
+
protected override async Task CreateDatabaseFromConnectionString(string db, string connectionString)
{
await using var conn = new SqliteConnection(connectionString);
@@ -54,4 +46,5 @@ public override Task Is_created_with_custom_script_if_custom_create_database_fol
[Fact(Skip = "SQLite does not support docker container")]
public override Task Is_up_and_running_with_appropriate_database_version() => Task.CompletedTask;
protected override bool ThrowOnMissingDatabase => false;
+
}
diff --git a/unittests/Sqlite/MigrationTables.cs b/unittests/Sqlite/MigrationTables.cs
index 181c5096..96648528 100644
--- a/unittests/Sqlite/MigrationTables.cs
+++ b/unittests/Sqlite/MigrationTables.cs
@@ -4,21 +4,12 @@
namespace Sqlite;
[Collection(nameof(SqliteTestContainer))]
-public class MigrationTables : TestCommon.Generic.GenericMigrationTables, IClassFixture
+// ReSharper disable once InconsistentNaming
+// ReSharper disable once UnusedType.Global
+public class MigrationTables(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.GenericMigrationTables(testContext, testOutput)
{
- protected override IGrateTestContext Context { get; }
-
- protected ITestOutputHelper TestOutput { get; }
-
- public MigrationTables(SqliteTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqliteGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
-
-
protected override string CountTableSql(string schemaName, string tableName)
{
return $@"
diff --git a/unittests/Sqlite/Running_MigrationScripts/Anytime_scripts.cs b/unittests/Sqlite/Running_MigrationScripts/Anytime_scripts.cs
index 869bc300..b962c052 100644
--- a/unittests/Sqlite/Running_MigrationScripts/Anytime_scripts.cs
+++ b/unittests/Sqlite/Running_MigrationScripts/Anytime_scripts.cs
@@ -3,19 +3,9 @@
namespace Sqlite.Running_MigrationScripts;
+
[Collection(nameof(SqliteTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Anytime_scripts : TestCommon.Generic.Running_MigrationScripts.Anytime_scripts, IClassFixture
-{
-
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public Anytime_scripts(SqliteTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqliteGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
-}
+// ReSharper disable once UnusedType.Global
+public class Anytime_scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Anytime_scripts(testContext, testOutput);
diff --git a/unittests/Sqlite/Running_MigrationScripts/DropDatabase.cs b/unittests/Sqlite/Running_MigrationScripts/DropDatabase.cs
index 6d54e6d3..7fbec40b 100644
--- a/unittests/Sqlite/Running_MigrationScripts/DropDatabase.cs
+++ b/unittests/Sqlite/Running_MigrationScripts/DropDatabase.cs
@@ -4,17 +4,7 @@
namespace Sqlite.Running_MigrationScripts;
[Collection(nameof(SqliteTestContainer))]
-public class DropDatabase : TestCommon.Generic.Running_MigrationScripts.DropDatabase, IClassFixture
-{
-
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public DropDatabase(SqliteTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqliteGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
-}
+// ReSharper disable once InconsistentNaming
+// ReSharper disable once UnusedType.Global
+public class DropDatabase(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.DropDatabase(testContext, testOutput);
diff --git a/unittests/Sqlite/Running_MigrationScripts/Environment_scripts.cs b/unittests/Sqlite/Running_MigrationScripts/Environment_scripts.cs
index 100e7d1c..8dea672d 100644
--- a/unittests/Sqlite/Running_MigrationScripts/Environment_scripts.cs
+++ b/unittests/Sqlite/Running_MigrationScripts/Environment_scripts.cs
@@ -5,17 +5,7 @@ namespace Sqlite.Running_MigrationScripts;
[Collection(nameof(SqliteTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Environment_scripts : TestCommon.Generic.Running_MigrationScripts.Environment_scripts, IClassFixture
-{
+// ReSharper disable once UnusedType.Global
+public class Environment_scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Environment_scripts(testContext, testOutput);
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public Environment_scripts(SqliteTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqliteGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
-}
diff --git a/unittests/Sqlite/Running_MigrationScripts/Everytime_scripts.cs b/unittests/Sqlite/Running_MigrationScripts/Everytime_scripts.cs
index 1d45442e..4645c28c 100644
--- a/unittests/Sqlite/Running_MigrationScripts/Everytime_scripts.cs
+++ b/unittests/Sqlite/Running_MigrationScripts/Everytime_scripts.cs
@@ -5,17 +5,6 @@ namespace Sqlite.Running_MigrationScripts;
[Collection(nameof(SqliteTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Everytime_scripts : TestCommon.Generic.Running_MigrationScripts.Everytime_scripts, IClassFixture
-{
-
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public Everytime_scripts(SqliteTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqliteGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
-}
+// ReSharper disable once UnusedType.Global
+public class Everytime_scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Everytime_scripts(testContext, testOutput);
diff --git a/unittests/Sqlite/Running_MigrationScripts/Failing_Scripts.cs b/unittests/Sqlite/Running_MigrationScripts/Failing_Scripts.cs
index b2b1ae69..0b0efba0 100644
--- a/unittests/Sqlite/Running_MigrationScripts/Failing_Scripts.cs
+++ b/unittests/Sqlite/Running_MigrationScripts/Failing_Scripts.cs
@@ -5,19 +5,9 @@ namespace Sqlite.Running_MigrationScripts;
[Collection(nameof(SqliteTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Failing_Scripts : TestCommon.Generic.Running_MigrationScripts.Failing_Scripts, IClassFixture
+// ReSharper disable once UnusedType.Global
+public class Failing_Scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Failing_Scripts(testContext, testOutput)
{
-
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public Failing_Scripts(SqliteTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqliteGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
-
protected override string ExpectedErrorMessageForInvalidSql => "SQLite Error 1: 'no such column: TOP'.";
}
diff --git a/unittests/Sqlite/Running_MigrationScripts/One_time_scripts.cs b/unittests/Sqlite/Running_MigrationScripts/One_time_scripts.cs
index e48abf97..fb6ea18f 100644
--- a/unittests/Sqlite/Running_MigrationScripts/One_time_scripts.cs
+++ b/unittests/Sqlite/Running_MigrationScripts/One_time_scripts.cs
@@ -5,17 +5,6 @@ namespace Sqlite.Running_MigrationScripts;
[Collection(nameof(SqliteTestContainer))]
// ReSharper disable once InconsistentNaming
-public class One_time_scripts : TestCommon.Generic.Running_MigrationScripts.One_time_scripts, IClassFixture
-{
-
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public One_time_scripts(SqliteTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqliteGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
-}
+// ReSharper disable once UnusedType.Global
+public class One_time_scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.One_time_scripts(testContext, testOutput);
diff --git a/unittests/Sqlite/Running_MigrationScripts/Order_Of_Scripts.cs b/unittests/Sqlite/Running_MigrationScripts/Order_Of_Scripts.cs
index 37e18883..67b4ad39 100644
--- a/unittests/Sqlite/Running_MigrationScripts/Order_Of_Scripts.cs
+++ b/unittests/Sqlite/Running_MigrationScripts/Order_Of_Scripts.cs
@@ -5,17 +5,6 @@ namespace Sqlite.Running_MigrationScripts;
[Collection(nameof(SqliteTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Order_Of_Scripts : TestCommon.Generic.Running_MigrationScripts.Order_Of_Scripts, IClassFixture
-{
-
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public Order_Of_Scripts(SqliteTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqliteGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
-}
+// ReSharper disable once UnusedType.Global
+public class Order_Of_Scripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Order_Of_Scripts(testContext, testOutput);
diff --git a/unittests/Sqlite/Running_MigrationScripts/ScriptsRun_Table.cs b/unittests/Sqlite/Running_MigrationScripts/ScriptsRun_Table.cs
index 0b9599b1..770cbeab 100644
--- a/unittests/Sqlite/Running_MigrationScripts/ScriptsRun_Table.cs
+++ b/unittests/Sqlite/Running_MigrationScripts/ScriptsRun_Table.cs
@@ -4,17 +4,8 @@
namespace Sqlite.Running_MigrationScripts;
[Collection(nameof(SqliteTestContainer))]
-public class ScriptsRun_Table : TestCommon.Generic.Running_MigrationScripts.ScriptsRun_Table, IClassFixture
-{
+// ReSharper disable once InconsistentNaming
+// ReSharper disable once UnusedType.Global
+public class ScriptsRun_Table(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.ScriptsRun_Table(testContext, testOutput);
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public ScriptsRun_Table(SqliteTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqliteGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
-}
diff --git a/unittests/Sqlite/Running_MigrationScripts/TokenScripts.cs b/unittests/Sqlite/Running_MigrationScripts/TokenScripts.cs
index ff8329e7..0e171071 100644
--- a/unittests/Sqlite/Running_MigrationScripts/TokenScripts.cs
+++ b/unittests/Sqlite/Running_MigrationScripts/TokenScripts.cs
@@ -4,17 +4,8 @@
namespace Sqlite.Running_MigrationScripts;
[Collection(nameof(SqliteTestContainer))]
-public class TokenScripts : TestCommon.Generic.Running_MigrationScripts.TokenScripts, IClassFixture
-{
+// ReSharper disable once InconsistentNaming
+// ReSharper disable once UnusedType.Global
+public class TokenScripts(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.TokenScripts(testContext, testOutput);
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public TokenScripts(SqliteTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqliteGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
-}
diff --git a/unittests/Sqlite/Running_MigrationScripts/Versioning_The_Database.cs b/unittests/Sqlite/Running_MigrationScripts/Versioning_The_Database.cs
index 0ef2a813..fa30d5e6 100644
--- a/unittests/Sqlite/Running_MigrationScripts/Versioning_The_Database.cs
+++ b/unittests/Sqlite/Running_MigrationScripts/Versioning_The_Database.cs
@@ -5,17 +5,7 @@ namespace Sqlite.Running_MigrationScripts;
[Collection(nameof(SqliteTestContainer))]
// ReSharper disable once InconsistentNaming
-public class Versioning_The_Database : TestCommon.Generic.Running_MigrationScripts.Versioning_The_Database, IClassFixture
-{
+// ReSharper disable once UnusedType.Global
+public class Versioning_The_Database(IGrateTestContext testContext, ITestOutputHelper testOutput)
+ : TestCommon.Generic.Running_MigrationScripts.Versioning_The_Database(testContext, testOutput);
- protected override IGrateTestContext Context { get; }
-
- protected override ITestOutputHelper TestOutput { get; }
-
- public Versioning_The_Database(SqliteTestContainer testContainer, SimpleService simpleService, ITestOutputHelper testOutput)
- {
- Context = new SqliteGrateTestContext(simpleService.ServiceProvider, testContainer);
- TestOutput = testOutput;
- }
-
-}
diff --git a/unittests/Sqlite/Sqlite.csproj b/unittests/Sqlite/Sqlite.csproj
index 3e0cd2d4..fe1ec155 100644
--- a/unittests/Sqlite/Sqlite.csproj
+++ b/unittests/Sqlite/Sqlite.csproj
@@ -14,6 +14,8 @@
+
+
diff --git a/unittests/Sqlite/Startup.cs b/unittests/Sqlite/Startup.cs
new file mode 100644
index 00000000..04175d2d
--- /dev/null
+++ b/unittests/Sqlite/Startup.cs
@@ -0,0 +1,58 @@
+using grate.Configuration;
+using grate.Infrastructure;
+using grate.Migration;
+using grate.Sqlite.Infrastructure;
+using grate.Sqlite.Migration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Logging;
+using Sqlite.TestInfrastructure;
+using TestCommon.TestInfrastructure;
+
+namespace Sqlite;
+
+// ReSharper disable once UnusedType.Global
+public class Startup
+{
+ // ReSharper disable once UnusedMember.Global
+ public void ConfigureServices(IServiceCollection services, HostBuilderContext context)
+ {
+ services
+ .AddLogging(
+ lb => lb
+ .AddXUnit()
+ .AddConsole()
+ .SetMinimumLevel(TestConfig.GetLogLevel())
+ )
+ .AddSingleton()
+ .AddSingleton()
+ .AddSingleton>(provider =>
+ config =>
+ {
+ IDatabase database = provider.GetRequiredService();
+
+ ILogger dbLogger = provider.GetRequiredService>();
+ ILogger grateLogger = provider.GetRequiredService>();
+
+ IHashGenerator hashGenerator = provider.GetRequiredService();
+ return
+ new GrateMigrator(grateLogger,
+ new DbMigrator(database, dbLogger, hashGenerator, config));
+ })
+ .AddSingleton()
+
+ .AddTransient()
+
+ .AddTransient()
+ .AddSingleton()
+ .AddSingleton()
+ .AddSingleton()
+ .AddSingleton(service =>
+ {
+ var database = service.GetService()!;
+ return new StatementSplitter(database.StatementSeparatorRegex);
+ });
+ ;
+
+ }
+}
diff --git a/unittests/Sqlite/TestInfrastructure/SimpleService.cs b/unittests/Sqlite/TestInfrastructure/SimpleService.cs
deleted file mode 100644
index 12501449..00000000
--- a/unittests/Sqlite/TestInfrastructure/SimpleService.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using grate;
-using grate.Sqlite;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Logging;
-using TestCommon.TestInfrastructure;
-namespace Sqlite.TestInfrastructure;
-public class SimpleService
-{
- public IServiceProvider ServiceProvider { get; }
- public SimpleService()
- {
- ServiceProvider = new ServiceCollection()
- .AddLogging(opt =>
- {
- opt.AddConsole();
- opt.SetMinimumLevel(TestConfig.GetLogLevel());
- })
- .AddGrate(cfg =>
- {
- cfg.UseSqlite();
- })
- .AddSingleton()
- .BuildServiceProvider();
- }
-}
diff --git a/unittests/TestCommon/DependencyInjection/GrateServiceCollectionTest.cs b/unittests/TestCommon/DependencyInjection/GrateServiceCollectionTest.cs
index 855497fd..c765c3f7 100644
--- a/unittests/TestCommon/DependencyInjection/GrateServiceCollectionTest.cs
+++ b/unittests/TestCommon/DependencyInjection/GrateServiceCollectionTest.cs
@@ -18,7 +18,7 @@ public abstract class GrateServiceCollectionTest
[Fact]
- public void Should_inject_all_nescessary_service_to_container()
+ public void Should_inject_all_necessary_services_to_container()
{
var serviceCollection = new ServiceCollection();
serviceCollection.AddGrate(ConfigureService);
diff --git a/unittests/TestCommon/Generic/GenericDatabase.cs b/unittests/TestCommon/Generic/GenericDatabase.cs
index 1231cbce..bd13f37e 100644
--- a/unittests/TestCommon/Generic/GenericDatabase.cs
+++ b/unittests/TestCommon/Generic/GenericDatabase.cs
@@ -5,13 +5,19 @@
using grate.Configuration;
using grate.Migration;
using TestCommon.TestInfrastructure;
+using Xunit.Abstractions;
using static System.StringSplitOptions;
namespace TestCommon.Generic;
-public abstract class GenericDatabase
+public abstract class GenericDatabase(IGrateTestContext context, ITestOutputHelper testOutput)
{
- protected abstract IGrateTestContext Context { get; }
+ protected GenericDatabase(): this(null!, null!)
+ {
+ }
+
+ protected IGrateTestContext Context { get; init; } = context;
+ protected ITestOutputHelper TestOutput { get; init; } = testOutput;
[Fact]
public virtual async Task Is_up_and_running_with_appropriate_database_version()
diff --git a/unittests/TestCommon/Generic/GenericMigrationTables.cs b/unittests/TestCommon/Generic/GenericMigrationTables.cs
index 6592bb09..ea33f92e 100644
--- a/unittests/TestCommon/Generic/GenericMigrationTables.cs
+++ b/unittests/TestCommon/Generic/GenericMigrationTables.cs
@@ -3,13 +3,19 @@
using grate.Configuration;
using grate.Exceptions;
using TestCommon.TestInfrastructure;
+using Xunit.Abstractions;
namespace TestCommon.Generic;
-public abstract class GenericMigrationTables
+public abstract class GenericMigrationTables(IGrateTestContext context, ITestOutputHelper testOutput)
{
- protected abstract IGrateTestContext Context { get; }
+ protected GenericMigrationTables(): this(null!, null!)
+ {
+ }
+
+ protected IGrateTestContext Context { get; init; } = context;
+ public ITestOutputHelper TestOutput { get; init; } = testOutput;
[Theory]
[InlineData("ScriptsRun")]
diff --git a/unittests/TestCommon/Generic/Running_MigrationScripts/Anytime_scripts.cs b/unittests/TestCommon/Generic/Running_MigrationScripts/Anytime_scripts.cs
index 21c0f6dc..e713d22b 100644
--- a/unittests/TestCommon/Generic/Running_MigrationScripts/Anytime_scripts.cs
+++ b/unittests/TestCommon/Generic/Running_MigrationScripts/Anytime_scripts.cs
@@ -4,14 +4,20 @@
using grate.Configuration;
using grate.Migration;
using TestCommon.TestInfrastructure;
+using Xunit.Abstractions;
using static grate.Configuration.KnownFolderKeys;
namespace TestCommon.Generic.Running_MigrationScripts;
//[TestFixture]
// ReSharper disable once InconsistentNaming
-public abstract class Anytime_scripts : MigrationsScriptsBase
+public abstract class Anytime_scripts(IGrateTestContext context, ITestOutputHelper testOutput)
+ : MigrationsScriptsBase(context, testOutput)
{
+ protected Anytime_scripts(): this(null!, null!)
+ {
+ }
+
[Fact]
public async Task Are_not_run_more_than_once_when_unchanged()
{
diff --git a/unittests/TestCommon/Generic/Running_MigrationScripts/DropDatabase.cs b/unittests/TestCommon/Generic/Running_MigrationScripts/DropDatabase.cs
index 268ef13b..b3640ab6 100644
--- a/unittests/TestCommon/Generic/Running_MigrationScripts/DropDatabase.cs
+++ b/unittests/TestCommon/Generic/Running_MigrationScripts/DropDatabase.cs
@@ -2,12 +2,18 @@
using FluentAssertions;
using grate.Configuration;
using TestCommon.TestInfrastructure;
+using Xunit.Abstractions;
using static grate.Configuration.KnownFolderKeys;
namespace TestCommon.Generic.Running_MigrationScripts;
-public abstract class DropDatabase : MigrationsScriptsBase
+public abstract class DropDatabase(IGrateTestContext context, ITestOutputHelper testOutput)
+ : MigrationsScriptsBase(context, testOutput)
{
+ protected DropDatabase(): this(null!, null!)
+ {
+ }
+
[Fact]
public async Task Ensure_database_gets_dropped()
{
diff --git a/unittests/TestCommon/Generic/Running_MigrationScripts/Environment_scripts.cs b/unittests/TestCommon/Generic/Running_MigrationScripts/Environment_scripts.cs
index cac88fc4..e8e91478 100644
--- a/unittests/TestCommon/Generic/Running_MigrationScripts/Environment_scripts.cs
+++ b/unittests/TestCommon/Generic/Running_MigrationScripts/Environment_scripts.cs
@@ -3,14 +3,20 @@
using grate.Configuration;
using grate.Migration;
using TestCommon.TestInfrastructure;
+using Xunit.Abstractions;
using static grate.Configuration.KnownFolderKeys;
namespace TestCommon.Generic.Running_MigrationScripts;
//[TestFixture]
// ReSharper disable once InconsistentNaming
-public abstract class Environment_scripts : MigrationsScriptsBase
+public abstract class Environment_scripts(IGrateTestContext context, ITestOutputHelper testOutput)
+ : MigrationsScriptsBase(context, testOutput)
{
+ protected Environment_scripts(): this(null!, null!)
+ {
+ }
+
[Fact]
public async Task Are_not_run_if_not_in_environment()
{
diff --git a/unittests/TestCommon/Generic/Running_MigrationScripts/Everytime_scripts.cs b/unittests/TestCommon/Generic/Running_MigrationScripts/Everytime_scripts.cs
index 37c1c027..db5562d2 100644
--- a/unittests/TestCommon/Generic/Running_MigrationScripts/Everytime_scripts.cs
+++ b/unittests/TestCommon/Generic/Running_MigrationScripts/Everytime_scripts.cs
@@ -3,14 +3,20 @@
using grate.Configuration;
using grate.Migration;
using TestCommon.TestInfrastructure;
+using Xunit.Abstractions;
using static grate.Configuration.KnownFolderKeys;
namespace TestCommon.Generic.Running_MigrationScripts;
//[TestFixture]
// ReSharper disable once InconsistentNaming
-public abstract class Everytime_scripts : MigrationsScriptsBase
+public abstract class Everytime_scripts(IGrateTestContext context, ITestOutputHelper testOutput)
+ : MigrationsScriptsBase(context, testOutput)
{
+ protected Everytime_scripts(): this(null!, null!)
+ {
+ }
+
[Fact]
public async Task Are_run_every_time_even_when_unchanged()
{
diff --git a/unittests/TestCommon/Generic/Running_MigrationScripts/Failing_Scripts.cs b/unittests/TestCommon/Generic/Running_MigrationScripts/Failing_Scripts.cs
index 2e734bdf..2c0147d7 100644
--- a/unittests/TestCommon/Generic/Running_MigrationScripts/Failing_Scripts.cs
+++ b/unittests/TestCommon/Generic/Running_MigrationScripts/Failing_Scripts.cs
@@ -5,6 +5,7 @@
using grate.Exceptions;
using grate.Migration;
using TestCommon.TestInfrastructure;
+using Xunit.Abstractions;
using static grate.Configuration.KnownFolderKeys;
using static TestCommon.TestInfrastructure.DescriptiveTestObjects;
@@ -12,8 +13,13 @@ namespace TestCommon.Generic.Running_MigrationScripts;
// ReSharper disable once InconsistentNaming
-public abstract class Failing_Scripts : MigrationsScriptsBase
+public abstract class Failing_Scripts(IGrateTestContext context, ITestOutputHelper testOutput)
+ : MigrationsScriptsBase(context, testOutput)
{
+ protected Failing_Scripts(): this(null!, null!)
+ {
+ }
+
protected abstract string ExpectedErrorMessageForInvalidSql { get; }
[Fact]
diff --git a/unittests/TestCommon/Generic/Running_MigrationScripts/MigrationsScriptsBase.cs b/unittests/TestCommon/Generic/Running_MigrationScripts/MigrationsScriptsBase.cs
index 7ffde90e..f6b4ab3f 100644
--- a/unittests/TestCommon/Generic/Running_MigrationScripts/MigrationsScriptsBase.cs
+++ b/unittests/TestCommon/Generic/Running_MigrationScripts/MigrationsScriptsBase.cs
@@ -5,8 +5,13 @@
namespace TestCommon.Generic.Running_MigrationScripts;
-public abstract class MigrationsScriptsBase
+public abstract class MigrationsScriptsBase(IGrateTestContext context, ITestOutputHelper testOutput)
{
+ protected MigrationsScriptsBase(): this(null!, null!)
+ {
+
+ }
+
public static DirectoryInfo CreateRandomTempDirectory() => TestConfig.CreateRandomTempDirectory();
protected void CreateDummySql(DirectoryInfo root, MigrationsFolder? folder, string filename = "1_jalla.sql")
@@ -70,8 +75,8 @@ public static void WriteSql(DirectoryInfo? path, string filename, string? sql) =
protected static DirectoryInfo MakeSurePathExists(DirectoryInfo root, MigrationsFolder? folder)
=> TestConfig.MakeSurePathExists(Wrap(root, folder?.Path));
- protected abstract IGrateTestContext Context { get; }
- protected abstract ITestOutputHelper TestOutput { get; }
+ protected IGrateTestContext Context { get; set; } = context;
+ protected ITestOutputHelper TestOutput { get; set; } = testOutput;
public static DirectoryInfo Wrap(DirectoryInfo root, string? subFolder) =>
new(Path.Combine(root.ToString(), subFolder ?? ""));
diff --git a/unittests/TestCommon/Generic/Running_MigrationScripts/One_time_scripts.cs b/unittests/TestCommon/Generic/Running_MigrationScripts/One_time_scripts.cs
index 70e9c9a4..0df93961 100644
--- a/unittests/TestCommon/Generic/Running_MigrationScripts/One_time_scripts.cs
+++ b/unittests/TestCommon/Generic/Running_MigrationScripts/One_time_scripts.cs
@@ -3,13 +3,19 @@
using grate.Configuration;
using grate.Migration;
using TestCommon.TestInfrastructure;
+using Xunit.Abstractions;
using static grate.Configuration.KnownFolderKeys;
namespace TestCommon.Generic.Running_MigrationScripts;
// ReSharper disable once InconsistentNaming
-public abstract class One_time_scripts : MigrationsScriptsBase
+public abstract class One_time_scripts(IGrateTestContext context, ITestOutputHelper testOutput)
+ : MigrationsScriptsBase(context, testOutput)
{
+ protected One_time_scripts(): this(null!, null!)
+ {
+ }
+
[Fact]
public async Task Are_not_run_more_than_once_when_unchanged()
{
diff --git a/unittests/TestCommon/Generic/Running_MigrationScripts/Order_Of_Scripts.cs b/unittests/TestCommon/Generic/Running_MigrationScripts/Order_Of_Scripts.cs
index 3b271bf3..986a5dbf 100644
--- a/unittests/TestCommon/Generic/Running_MigrationScripts/Order_Of_Scripts.cs
+++ b/unittests/TestCommon/Generic/Running_MigrationScripts/Order_Of_Scripts.cs
@@ -4,13 +4,19 @@
using grate.Configuration;
using grate.Migration;
using TestCommon.TestInfrastructure;
+using Xunit.Abstractions;
using static grate.Configuration.KnownFolderKeys;
namespace TestCommon.Generic.Running_MigrationScripts;
// ReSharper disable once InconsistentNaming
-public abstract class Order_Of_Scripts : MigrationsScriptsBase
+public abstract class Order_Of_Scripts(IGrateTestContext context, ITestOutputHelper testOutput)
+ : MigrationsScriptsBase(context, testOutput)
{
+ protected Order_Of_Scripts(): this(null!, null!)
+ {
+ }
+
[Fact]
public async Task Is_as_expected()
{
diff --git a/unittests/TestCommon/Generic/Running_MigrationScripts/ScriptsRun_Table.cs b/unittests/TestCommon/Generic/Running_MigrationScripts/ScriptsRun_Table.cs
index e5527c69..813807b8 100644
--- a/unittests/TestCommon/Generic/Running_MigrationScripts/ScriptsRun_Table.cs
+++ b/unittests/TestCommon/Generic/Running_MigrationScripts/ScriptsRun_Table.cs
@@ -3,12 +3,18 @@
using grate.Configuration;
using grate.Migration;
using TestCommon.TestInfrastructure;
+using Xunit.Abstractions;
using static grate.Configuration.KnownFolderKeys;
namespace TestCommon.Generic.Running_MigrationScripts;
-public abstract class ScriptsRun_Table : MigrationsScriptsBase
+public abstract class ScriptsRun_Table(IGrateTestContext context, ITestOutputHelper testOutput)
+ : MigrationsScriptsBase(context, testOutput)
{
+ protected ScriptsRun_Table(): this(null!, null!)
+ {
+ }
+
[Fact]
public async Task Includes_the_folder_name_in_the_script_name_if_subfolders()
{
diff --git a/unittests/TestCommon/Generic/Running_MigrationScripts/TokenScripts.cs b/unittests/TestCommon/Generic/Running_MigrationScripts/TokenScripts.cs
index 8de8c6f7..b2ea1f74 100644
--- a/unittests/TestCommon/Generic/Running_MigrationScripts/TokenScripts.cs
+++ b/unittests/TestCommon/Generic/Running_MigrationScripts/TokenScripts.cs
@@ -2,12 +2,17 @@
using FluentAssertions;
using grate.Configuration;
using TestCommon.TestInfrastructure;
+using Xunit.Abstractions;
using static grate.Configuration.KnownFolderKeys;
namespace TestCommon.Generic.Running_MigrationScripts;
-public abstract class TokenScripts : MigrationsScriptsBase
+public abstract class TokenScripts(IGrateTestContext context, ITestOutputHelper testOutput)
+ : MigrationsScriptsBase(context, testOutput)
{
+ protected TokenScripts(): this(null!, null!)
+ {
+ }
protected virtual string CreateDatabaseName => "create view grate as select '{{DatabaseName}}' as dbase";
protected virtual string CreateViewMyCustomToken => "create view grate as select '{{MyCustomToken}}' as dbase";
diff --git a/unittests/TestCommon/Generic/Running_MigrationScripts/Versioning_The_Database.cs b/unittests/TestCommon/Generic/Running_MigrationScripts/Versioning_The_Database.cs
index a4deae68..1189ad5d 100644
--- a/unittests/TestCommon/Generic/Running_MigrationScripts/Versioning_The_Database.cs
+++ b/unittests/TestCommon/Generic/Running_MigrationScripts/Versioning_The_Database.cs
@@ -4,13 +4,19 @@
using grate.Configuration;
using grate.Migration;
using TestCommon.TestInfrastructure;
+using Xunit.Abstractions;
using static grate.Configuration.KnownFolderKeys;
namespace TestCommon.Generic.Running_MigrationScripts;
// ReSharper disable once InconsistentNaming
-public abstract class Versioning_The_Database : MigrationsScriptsBase
+public abstract class Versioning_The_Database(IGrateTestContext context, ITestOutputHelper testOutput)
+ : MigrationsScriptsBase(context, testOutput)
{
+ protected Versioning_The_Database(): this(null!, null!)
+ {
+ }
+
[Fact]
public async Task Returns_the_new_version_id()
{
diff --git a/unittests/TestCommon/TestInfrastructure/IGrateTestContext.cs b/unittests/TestCommon/TestInfrastructure/IGrateTestContext.cs
index c062b6f9..b4bc7879 100644
--- a/unittests/TestCommon/TestInfrastructure/IGrateTestContext.cs
+++ b/unittests/TestCommon/TestInfrastructure/IGrateTestContext.cs
@@ -9,15 +9,10 @@ namespace TestCommon.TestInfrastructure;
public interface IGrateTestContext : IDatabaseConnectionFactory
{
- string AdminPassword { get; }
- int? Port { get; }
-
string AdminConnectionString { get; }
string ConnectionString(string database);
string UserConnectionString(string database);
- //DbConnection GetDbConnection(string connectionString);
-
IDbConnection CreateAdminDbConnection() => GetDbConnection(AdminConnectionString);
IDbConnection CreateDbConnection(string database) => GetDbConnection(ConnectionString(database));
@@ -29,8 +24,6 @@ public interface IGrateTestContext : IDatabaseConnectionFactory
IDatabase DatabaseMigrator { get; }
SqlStatements Sql { get; }
- //string DatabaseTypeName { get; }
- //string MasterDatabase { get; }
IServiceProvider ServiceProvider { get; }
string ExpectedVersionPrefix { get; }
@@ -67,10 +60,6 @@ DefaultConfiguration with
public IGrateMigrator GetMigrator(GrateConfiguration config)
{
- // var factory = Substitute.For();
- // factory
- // .GetService(DatabaseType)
- // .Returns(DatabaseMigrator);
var db = ServiceProvider.GetRequiredService();
var dbMigrator = new DbMigrator(db, ServiceProvider.GetRequiredService>(), new HashGenerator(), config);
var migrator = new GrateMigrator(ServiceProvider.GetRequiredService>(), dbMigrator);
diff --git a/unittests/TestCommon/TestInfrastructure/TestConfig.cs b/unittests/TestCommon/TestInfrastructure/TestConfig.cs
index 573bd0d1..c701b40c 100644
--- a/unittests/TestCommon/TestInfrastructure/TestConfig.cs
+++ b/unittests/TestCommon/TestInfrastructure/TestConfig.cs
@@ -9,14 +9,6 @@ public static class TestConfig
public static string RandomDatabase() => Random.GetString(15);
- // public static readonly ILoggerFactory LogFactory = LoggerFactory.Create(builder =>
- // {
- // builder
- // //.AddProvider(new ConsoleLoggerProvider(GetLogLevel()))
- // .AddProvider(new XunitLoggerProvider(GetLogLevel()));
- // .SetMinimumLevel(GetLogLevel());
- // });
-
public static DirectoryInfo CreateRandomTempDirectory()
{
var dummyFile = Path.GetTempFileName();
@@ -34,7 +26,10 @@ public static DirectoryInfo CreateRandomTempDirectory()
.SingleOrDefault(entry => entry.StartsWith("Password") || entry.StartsWith("Pwd"))?
.Split("=", TrimEntries | RemoveEmptyEntries).Last();
- public static LogLevel GetLogLevel()
+ public static LogLevel GetLogLevel() => LogLevelFromEnvironmentVariable();
+
+
+ private static LogLevel LogLevelFromEnvironmentVariable()
{
if (!Enum.TryParse(Environment.GetEnvironmentVariable("LogLevel"), out LogLevel logLevel))
{
@@ -43,6 +38,7 @@ public static LogLevel GetLogLevel()
return logLevel;
}
+
public static void WriteContent(DirectoryInfo? path, string filename, string? content)
{
ArgumentNullException.ThrowIfNull(path);