Skip to content

Commit

Permalink
Chore: Add dependency injection to unit tests
Browse files Browse the repository at this point in the history
Makes way for more injection scenarios of grate going forward

* Using Xunit.DependencyInjection to inject the dependencies
* Removed SimpleService classes
  • Loading branch information
erikbra committed Feb 1, 2024
1 parent 81df8df commit 8a1ddef
Show file tree
Hide file tree
Showing 134 changed files with 927 additions and 1,434 deletions.
54 changes: 24 additions & 30 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
@@ -1,40 +1,34 @@
<Project>
<!--
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
█████ ▀██ ██ ▄▄▄█▄▄ ▄▄███ ▄▄ ████ ▄▄ ██
█▀▀██ █ █ ██ ▄▄▄███ █████ ▄▄ █▀▀█ ▀▄ ██
█▄▄██ ██▄ ██ ▀▀▀███ █████ ▀▀ █▄▄█ ▀▀ ██
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-->

<ItemGroup>
<!--
.net sdk
-->
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
<PackageVersion Include="Npgsql" Version="8.0.1" />
<PackageVersion Include="Microsoft.Data.Sqlite" Version="8.0.1" />
<PackageVersion Include="System.CommandLine.NamingConventionBinder" Version="2.0.0-beta4.22272.1" />
<PackageVersion Include="Microsoft.Data.SqlClient" Version="5.1.5" />
<PackageVersion Include="Dapper" Version="2.1.28" />
<PackageVersion Include="MySqlConnector" Version="2.3.5" />
<PackageVersion Include="Oracle.ManagedDataAccess.Core" Version="3.21.130" />
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
<PackageVersion Include="Npgsql" Version="8.0.1" />
<PackageVersion Include="Microsoft.Data.Sqlite" Version="8.0.1" />
<PackageVersion Include="System.CommandLine.NamingConventionBinder" Version="2.0.0-beta4.22272.1" />
<PackageVersion Include="Microsoft.Data.SqlClient" Version="5.1.5" />
<PackageVersion Include="Dapper" Version="2.1.28" />
<PackageVersion Include="MySqlConnector" Version="2.3.5" />
<PackageVersion Include="Oracle.ManagedDataAccess.Core" Version="3.21.130" />
<!--
Note: the following references are exclusively used in the test projects:
-->
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageVersion Include="xunit" Version="2.6.6" />
<PackageVersion Include="xunit.runner.visualstudio" Version="2.5.6" />
<PackageVersion Include="FluentAssertions" Version="6.12.0" />
<PackageVersion Include="NSubstitute" Version="5.1.0" />
<PackageVersion Include="XunitXml.TestLogger" Version="3.1.17" />
<PackageVersion Include="coverlet.collector" Version="6.0.0" />
<PackageVersion Include="Testcontainers" Version="3.7.0" />
<PackageVersion Include="Testcontainers.PostgreSql" Version="3.7.0" />
<PackageVersion Include="Testcontainers.MariaDb" Version="3.7.0" />
<PackageVersion Include="Testcontainers.Oracle" Version="3.7.0" />
<PackageVersion Include="Testcontainers.MsSql" Version="3.7.0" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageVersion Include="xunit" Version="2.6.6" />
<PackageVersion Include="xunit.runner.visualstudio" Version="2.5.6" />
<PackageVersion Include="FluentAssertions" Version="6.12.0" />
<PackageVersion Include="NSubstitute" Version="5.1.0" />
<PackageVersion Include="XunitXml.TestLogger" Version="3.1.17" />
<PackageVersion Include="coverlet.collector" Version="6.0.0" />
<PackageVersion Include="Testcontainers" Version="3.7.0" />
<PackageVersion Include="Testcontainers.PostgreSql" Version="3.7.0" />
<PackageVersion Include="Testcontainers.MariaDb" Version="3.7.0" />
<PackageVersion Include="Testcontainers.Oracle" Version="3.7.0" />
<PackageVersion Include="Testcontainers.MsSql" Version="3.7.0" />
<PackageVersion Include="Xunit.DependencyInjection" Version="8.9.1" />
<PackageVersion Include="Xunit.DependencyInjection.Logging" Version="8.1.0" />
</ItemGroup>
</Project>
1 change: 1 addition & 0 deletions grate.sln
Original file line number Diff line number Diff line change
Expand Up @@ -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}"
Expand Down
5 changes: 3 additions & 2 deletions src/grate.core/Migration/AnsiSqlDatabase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -649,15 +649,16 @@ 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();
}
}

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<string>(_syntax.CurrentDatabase);
Expand Down
1 change: 0 additions & 1 deletion src/grate.mariadb/Migration/MariaDbDatabase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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=")]
Expand Down
13 changes: 2 additions & 11 deletions unittests/MariaDB/Database.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,6 @@
namespace MariaDB;

[Collection(nameof(MariaDbTestContainer))]
public class Database : GenericDatabase, IClassFixture<SimpleService>
{
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;
}
}
2 changes: 2 additions & 0 deletions unittests/MariaDB/MariaDB.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
<PackageReference Include="XunitXml.TestLogger" />
<PackageReference Include="coverlet.collector" />
<PackageReference Include="Testcontainers.MariaDb" />
<PackageReference Include="Xunit.DependencyInjection" />
<PackageReference Include="Xunit.DependencyInjection.Logging" />
</ItemGroup>

<ItemGroup>
Expand Down
24 changes: 2 additions & 22 deletions unittests/MariaDB/MariaDbDatabase_.cs
Original file line number Diff line number Diff line change
@@ -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<SimpleService>
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();
Expand All @@ -36,20 +25,11 @@ 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();
var builder = new MySqlConnectionStringBuilder(conn.ConnectionString);
builder.Pipelining.Should().BeTrue();
}

private class InspectableMariaDbDatabase : MariaDbDatabase
{
public InspectableMariaDbDatabase(IServiceProvider serviceProvider) : base(serviceProvider.GetRequiredService<ILogger<InspectableMariaDbDatabase>>())
{
}

public DbConnection GetConnection() => base.Connection;
}
}
14 changes: 2 additions & 12 deletions unittests/MariaDB/MigrationTables.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,5 @@
namespace MariaDB;

[Collection(nameof(MariaDbTestContainer))]
public class MigrationTables : GenericMigrationTables, IClassFixture<SimpleService>
{
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);
14 changes: 2 additions & 12 deletions unittests/MariaDB/Running_MigrationScripts/Anytime_scripts.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<SimpleService>
{
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);
15 changes: 3 additions & 12 deletions unittests/MariaDB/Running_MigrationScripts/DropDatabase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,6 @@
namespace MariaDB.Running_MigrationScripts;

[Collection(nameof(MariaDbTestContainer))]
public class DropDatabase : TestCommon.Generic.Running_MigrationScripts.DropDatabase, IClassFixture<SimpleService>
{
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);
14 changes: 2 additions & 12 deletions unittests/MariaDB/Running_MigrationScripts/Environment_scripts.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<SimpleService>
{
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);
14 changes: 2 additions & 12 deletions unittests/MariaDB/Running_MigrationScripts/Everytime_scripts.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<SimpleService>
{
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);
13 changes: 2 additions & 11 deletions unittests/MariaDB/Running_MigrationScripts/Failing_Scripts.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<SimpleService>
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'";
}
13 changes: 2 additions & 11 deletions unittests/MariaDB/Running_MigrationScripts/One_time_scripts.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<SimpleService>
{
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;
}
}
13 changes: 2 additions & 11 deletions unittests/MariaDB/Running_MigrationScripts/Order_Of_Scripts.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<SimpleService>
{
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;
}
}
14 changes: 2 additions & 12 deletions unittests/MariaDB/Running_MigrationScripts/ScriptsRun_Table.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,5 @@
namespace MariaDB.Running_MigrationScripts;

[Collection(nameof(MariaDbTestContainer))]
public class ScriptsRun_Table : TestCommon.Generic.Running_MigrationScripts.ScriptsRun_Table, IClassFixture<SimpleService>
{
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);
13 changes: 2 additions & 11 deletions unittests/MariaDB/Running_MigrationScripts/TokenScripts.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,6 @@
namespace MariaDB.Running_MigrationScripts;

[Collection(nameof(MariaDbTestContainer))]
public class TokenScripts : TestCommon.Generic.Running_MigrationScripts.TokenScripts, IClassFixture<SimpleService>
{
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;
}
}
Loading

0 comments on commit 8a1ddef

Please sign in to comment.