/
DbFixture.cs
67 lines (55 loc) · 2.02 KB
/
DbFixture.cs
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
62
63
64
65
66
67
using Microsoft.Data.SqlClient;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using System;
using Users.Persistence;
namespace Users.Tests.Integration
{
public class DbFixture : IDisposable
{
private readonly DbContextOptions<UsersDbContext> _options;
public string ConnectionString { get; }
public string EnvironmentName { get; }
public DbFixture()
{
var builder = new ConfigurationBuilder();
builder.AddJsonFile("appsettings.json");
this.EnvironmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? string.Empty;
if (!string.IsNullOrWhiteSpace(this.EnvironmentName))
builder.AddJsonFile($"appsettings.{this.EnvironmentName}.json", true);
var config = builder.Build();
var connString = config.GetConnectionString("db");
this.ConnectionString = string.Format(connString, Guid.NewGuid());
_options = new DbContextOptionsBuilder<UsersDbContext>()
.UseSqlServer(this.ConnectionString)
.Options;
Console.Write($"running integration tests on {this.EnvironmentName} ...");
}
public UsersDbContext BuildDbContext()
{
try
{
var ctx = new UsersDbContext(_options);
ctx?.Database?.EnsureCreated();
return ctx;
}
catch (Exception ex)
{
var builder = new SqlConnectionStringBuilder(this.ConnectionString);
throw new Exception($"unable to connect to db {builder.InitialCatalog} on {builder.DataSource}", ex);
}
}
public virtual void Dispose()
{
try
{
var dbCtx = BuildDbContext();
dbCtx.Database.EnsureDeleted();
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
}
}