11namespace Testcontainers . FirebirdSql ;
22
3- public abstract class FirebirdSqlContainerTest : IAsyncLifetime
3+ public abstract class FirebirdSqlContainerTest ( FirebirdSqlContainerTest . FirebirdSqlFixture fixture )
44{
5- private readonly FirebirdSqlContainer _firebirdSqlContainer ;
6-
7- private FirebirdSqlContainerTest ( FirebirdSqlContainer firebirdSqlContainer )
8- {
9- _firebirdSqlContainer = firebirdSqlContainer ;
10- }
11-
12- public Task InitializeAsync ( )
13- {
14- return _firebirdSqlContainer . StartAsync ( ) ;
15- }
16-
17- public Task DisposeAsync ( )
18- {
19- return _firebirdSqlContainer . DisposeAsync ( ) . AsTask ( ) ;
20- }
21-
225 [ Fact ]
236 [ Trait ( nameof ( DockerCli . DockerPlatform ) , nameof ( DockerCli . DockerPlatform . Linux ) ) ]
247 public void ConnectionStateReturnsOpen ( )
258 {
269 // Given
27- using DbConnection connection = new FbConnection ( _firebirdSqlContainer . GetConnectionString ( ) ) ;
10+ using DbConnection connection = fixture . CreateConnection ( ) ;
2811
2912 // When
3013 connection . Open ( ) ;
@@ -41,65 +24,61 @@ public async Task ExecScriptReturnsSuccessful()
4124 const string scriptContent = "SELECT 1 FROM RDB$DATABASE;" ;
4225
4326 // When
44- var execResult = await _firebirdSqlContainer . ExecScriptAsync ( scriptContent )
27+ var execResult = await fixture . Container . ExecScriptAsync ( scriptContent )
4528 . ConfigureAwait ( true ) ;
4629
4730 // Then
4831 Assert . True ( 0L . Equals ( execResult . ExitCode ) , execResult . Stderr ) ;
4932 Assert . Empty ( execResult . Stderr ) ;
5033 }
5134
52- [ UsedImplicitly ]
53- public sealed class FirebirdSql25Sc : FirebirdSqlContainerTest
35+ public abstract class FirebirdSqlFixture ( IMessageSink messageSink ) : DbContainerFixture < FirebirdSqlBuilder , FirebirdSqlContainer > ( messageSink )
5436 {
55- public FirebirdSql25Sc ( )
56- : base ( new FirebirdSqlBuilder ( ) . WithImage ( "jacobalberty/firebird:2.5-sc" ) . Build ( ) )
57- {
58- }
37+ public override DbProviderFactory DbProviderFactory => FirebirdClientFactory . Instance ;
5938 }
6039
6140 [ UsedImplicitly ]
62- public sealed class FirebirdSql25Ss : FirebirdSqlContainerTest
41+ public sealed class FirebirdSqlDefault ( FirebirdSqlDefaultFixture fixture ) : FirebirdSqlContainerTest ( fixture ) , IClassFixture < FirebirdSqlDefaultFixture > ;
42+ [ UsedImplicitly ]
43+ public sealed class FirebirdSqlDefaultFixture( IMessageSink messageSink ) : FirebirdSqlFixture ( messageSink ) ;
44+
45+ [ UsedImplicitly]
46+ public sealed class FirebirdSql25Sc( FirebirdSql25ScFixture fixture ) : FirebirdSqlContainerTest ( fixture ) , IClassFixture < FirebirdSql25ScFixture > ;
47+ [ UsedImplicitly ]
48+ public sealed class FirebirdSql25ScFixture( IMessageSink messageSink ) : FirebirdSqlFixture ( messageSink )
6349 {
64- public FirebirdSql25Ss ( )
65- : base ( new FirebirdSqlBuilder ( ) . WithImage ( "jacobalberty/firebird:2.5-ss" ) . Build ( ) )
66- {
67- }
50+ protected override FirebirdSqlBuilder Configure ( FirebirdSqlBuilder builder ) => builder . WithImage ( "jacobalberty/firebird:2.5-sc" ) ;
6851 }
6952
7053 [ UsedImplicitly ]
71- public sealed class FirebirdSql30 : FirebirdSqlContainerTest
54+ public sealed class FirebirdSql25Ss ( FirebirdSql25SsFixture fixture ) : FirebirdSqlContainerTest ( fixture ) , IClassFixture < FirebirdSql25SsFixture > ;
55+ [ UsedImplicitly ]
56+ public sealed class FirebirdSql25SsFixture( IMessageSink messageSink ) : FirebirdSqlFixture ( messageSink )
7257 {
73- public FirebirdSql30 ( )
74- : base ( new FirebirdSqlBuilder ( ) . WithImage ( "jacobalberty/firebird:v3.0" ) . Build ( ) )
75- {
76- }
58+ protected override FirebirdSqlBuilder Configure ( FirebirdSqlBuilder builder ) => builder . WithImage ( "jacobalberty/firebird:2.5-ss" ) ;
7759 }
7860
7961 [ UsedImplicitly ]
80- public sealed class FirebirdSql40 : FirebirdSqlContainerTest
62+ public sealed class FirebirdSql30 ( FirebirdSql30Fixture fixture ) : FirebirdSqlContainerTest ( fixture ) , IClassFixture < FirebirdSql30Fixture > ;
63+ [ UsedImplicitly ]
64+ public sealed class FirebirdSql30Fixture( IMessageSink messageSink ) : FirebirdSqlFixture ( messageSink )
8165 {
82- public FirebirdSql40 ( )
83- : base ( new FirebirdSqlBuilder ( ) . WithImage ( "jacobalberty/firebird:v4.0" ) . Build ( ) )
84- {
85- }
66+ protected override FirebirdSqlBuilder Configure ( FirebirdSqlBuilder builder ) => builder . WithImage ( "jacobalberty/firebird:v3.0" ) ;
8667 }
8768
8869 [ UsedImplicitly ]
89- public sealed class FirebirdSqlSysdba : FirebirdSqlContainerTest
70+ public sealed class FirebirdSqlSysdba ( FirebirdSqlSysdbaFixture fixture ) : FirebirdSqlContainerTest ( fixture ) , IClassFixture < FirebirdSqlSysdbaFixture > ;
71+ [ UsedImplicitly ]
72+ public sealed class FirebirdSqlSysdbaFixture( IMessageSink messageSink ) : FirebirdSqlFixture ( messageSink )
9073 {
91- public FirebirdSqlSysdba ( )
92- : base ( new FirebirdSqlBuilder ( ) . WithUsername ( "sysdba" ) . WithPassword ( "some-password" ) . Build ( ) )
93- {
94- }
74+ protected override FirebirdSqlBuilder Configure ( FirebirdSqlBuilder builder ) => builder . WithUsername ( "sysdba" ) . WithPassword ( "some-password" ) ;
9575 }
9676
9777 [ UsedImplicitly ]
98- public sealed class FirebirdSqlWaitForDatabase : FirebirdSqlContainerTest
78+ public sealed class FirebirdSqlWaitForDatabase ( FirebirdSqlWaitForDatabaseFixture fixture ) : FirebirdSqlContainerTest ( fixture ) , IClassFixture < FirebirdSqlWaitForDatabaseFixture > ;
79+ [ UsedImplicitly ]
80+ public sealed class FirebirdSqlWaitForDatabaseFixture( IMessageSink messageSink ) : FirebirdSqlFixture ( messageSink )
9981 {
100- public FirebirdSqlWaitForDatabase ( )
101- : base ( new FirebirdSqlBuilder ( ) . WithWaitStrategy ( Wait . ForUnixContainer ( ) . UntilDatabaseIsAvailable ( FirebirdClientFactory . Instance ) ) . Build ( ) )
102- {
103- }
82+ protected override FirebirdSqlBuilder Configure ( FirebirdSqlBuilder builder ) => builder . WithWaitStrategy ( Wait . ForUnixContainer ( ) . UntilDatabaseIsAvailable ( DbProviderFactory ) ) ;
10483 }
10584}
0 commit comments