-
-
Notifications
You must be signed in to change notification settings - Fork 96
Expand file tree
/
Copy pathIntegrationFixture.cs
More file actions
61 lines (48 loc) · 2.25 KB
/
IntegrationFixture.cs
File metadata and controls
61 lines (48 loc) · 2.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
using System.Diagnostics;
using System.Text.Json;
using Bogus;
using Eventuous.Diagnostics;
using Eventuous.SqlServer;
using MicroElements.AutoFixture.NodaTime;
using Microsoft.Data.SqlClient;
using NodaTime;
using NodaTime.Serialization.SystemTextJson;
using Testcontainers.SqlEdge;
namespace Eventuous.Tests.SqlServer.Fixtures;
public sealed class IntegrationFixture : IAsyncLifetime {
public IEventStore EventStore { get; private set; } = null!;
public IFixture Auto { get; } = new Fixture().Customize(new NodaTimeCustomization());
public GetSqlServerConnection GetConnection { get; private set; } = null!;
public Faker Faker { get; } = new();
public Schema Schema { get; set; }
public string SchemaName { get; }
public IntegrationFixture() => SchemaName = GetSchemaName();
public string GetSchemaName() => Faker.Internet.UserName().Replace(".", "_").Replace("-", "").Replace(" ", "").ToLower();
readonly ActivityListener _listener = DummyActivityListener.Create();
SqlEdgeContainer _sqlServer = null!;
IEventSerializer Serializer { get; } = new DefaultEventSerializer(
new JsonSerializerOptions(JsonSerializerDefaults.Web)
.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb)
);
public async Task InitializeAsync() {
_sqlServer = new SqlEdgeBuilder()
.WithImage("mcr.microsoft.com/azure-sql-edge:latest")
// .WithAutoRemove(false)
// .WithCleanUp(false)
.Build();
await _sqlServer.StartAsync();
Schema = new Schema(SchemaName);
var connString = _sqlServer.GetConnectionString();
GetConnection = () => GetConn(connString);
await Schema.CreateSchema(GetConnection);
DefaultEventSerializer.SetDefaultSerializer(Serializer);
EventStore = new SqlServerStore(GetConnection, new SqlServerStoreOptions(SchemaName), Serializer);
ActivitySource.AddActivityListener(_listener);
return;
SqlConnection GetConn(string connectionString) => new(connectionString);
}
public async Task DisposeAsync() {
await _sqlServer.DisposeAsync();
_listener.Dispose();
}
}