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);