Skip to content

Commit a23340f

Browse files
committed
- IConnectionConfigurationProvider / unit tests
1 parent b28c946 commit a23340f

15 files changed

Lines changed: 136 additions & 150 deletions

Shuttle.Core.Data.Tests/App.config

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<?xml version="1.0"?>
2+
23
<configuration>
3-
<appSettings>
4-
<add key="my-key" value="my-value"/>
5-
</appSettings>
64
<connectionStrings>
7-
<clear/>
8-
<add name="Shuttle" connectionString="Data Source=.\sqlexpress;Initial Catalog=Shuttle;Integrated Security=SSPI" providerName="System.Data.SqlClient"/>
5+
<clear />
6+
<add name="Shuttle"
7+
connectionString="Data Source=.\sqlexpress;Initial Catalog=Shuttle;Integrated Security=SSPI"
8+
providerName="System.Data.SqlClient" />
99
</connectionStrings>
10-
</configuration>
10+
</configuration>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using NUnit.Framework;
2+
3+
namespace Shuttle.Core.Data.Tests
4+
{
5+
[TestFixture]
6+
public class ConnectionConfigurationProviderFixture
7+
{
8+
[Test]
9+
public void Should_be_able_to_get_configuration()
10+
{
11+
var provider = new ConnectionConfigurationProvider();
12+
13+
Assert.That(provider.Get("not-defined"), Is.Null);
14+
15+
var configuration = provider.Get("Shuttle");
16+
17+
Assert.That(configuration.Name, Is.EqualTo("Shuttle"));
18+
Assert.That(configuration.ProviderName, Is.EqualTo("System.Data.SqlClient"));
19+
Assert.That(configuration.ConnectionString, Is.EqualTo("Data Source=.\\sqlexpress;Initial Catalog=Shuttle;Integrated Security=SSPI"));
20+
}
21+
}
22+
}

Shuttle.Core.Data.Tests/ConnectionStringServiceFixture.cs

Lines changed: 0 additions & 51 deletions
This file was deleted.

Shuttle.Core.Data.Tests/DatabaseContextFactoryFixture.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,19 @@ public void Should_be_able_to_create_a_database_context()
1414
}
1515
}
1616

17-
private static IDatabaseContextFactory GetDefaultDatabaseContextFactory()
17+
private IDatabaseContextFactory GetDefaultDatabaseContextFactory()
1818
{
1919
#if (!NETCOREAPP2_0 && !NETSTANDARD2_0)
20-
return DatabaseContextFactory.Default();
20+
var connectionFactory = new DbConnectionFactory();
2121
#else
22-
return DatabaseContextFactory.Default(new DefaultDbProviderFactories());
22+
var connectionFactory = new DbConnectionFactory(new DefaultDbProviderFactories());
2323
#endif
24-
}
24+
return new DatabaseContextFactory(
25+
GetConnectionConfigurationProvider(),
26+
connectionFactory,
27+
new DbCommandFactory(),
28+
new ThreadStaticDatabaseContextCache());
29+
}
2530

2631
[Test]
2732
public void Should_be_able_to_get_an_existing_database_context()

Shuttle.Core.Data.Tests/Fixture.cs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,28 @@ protected DbConnectionFactory GetDbConnectionFactory()
2222

2323
protected IDatabaseContext GetDatabaseContext()
2424
{
25-
return new DatabaseContextFactory(GetDbConnectionFactory(), new DbCommandFactory(), new ThreadStaticDatabaseContextCache()).Create(DefaultConnectionStringName);
25+
return new DatabaseContextFactory(GetConnectionConfigurationProvider(), GetDbConnectionFactory(), new DbCommandFactory(), new ThreadStaticDatabaseContextCache()).Create(DefaultConnectionStringName);
2626
}
2727

28-
protected IDatabaseContext GetDatabaseContext(Mock<IDbCommand> command)
28+
protected IConnectionConfigurationProvider GetConnectionConfigurationProvider()
29+
{
30+
var provider = new Mock<IConnectionConfigurationProvider>();
31+
32+
provider.Setup(m => m.Get("Shuttle")).Returns(new ConnectionConfiguration(
33+
"Shuttle",
34+
"System.Data.SqlClient",
35+
"Data Source=.\\sqlexpress;Initial Catalog=Shuttle;Integrated Security=SSPI"));
36+
37+
return provider.Object;
38+
}
39+
40+
protected IDatabaseContext GetDatabaseContext(Mock<IDbCommand> command)
2941
{
3042
var commandFactory = new Mock<IDbCommandFactory>();
3143

3244
commandFactory.Setup(m => m.CreateCommandUsing(It.IsAny<IDbConnection>(), It.IsAny<IQuery>())).Returns(command.Object);
3345

34-
return new DatabaseContextFactory(GetDbConnectionFactory(), commandFactory.Object, new ThreadStaticDatabaseContextCache()).Create(DefaultConnectionStringName);
46+
return new DatabaseContextFactory(GetConnectionConfigurationProvider(), GetDbConnectionFactory(), commandFactory.Object, new ThreadStaticDatabaseContextCache()).Create(DefaultConnectionStringName);
3547
}
3648
}
3749
}

Shuttle.Core.Data.Tests/Shuttle.Core.Data.Tests.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
</ItemGroup>
3131

3232
<ItemGroup>
33-
<Compile Remove="DefaultDbProviderFactories.cs" Condition="'$(TargetFramework)' != 'netcoreapp2.0'"/>
33+
<Compile Remove="ConnectionConfigurationProvider.cs" Condition="'$(TargetFramework)' != 'net46'" />
34+
<Compile Remove="DefaultDbProviderFactories.cs" Condition="'$(TargetFramework)' != 'netcoreapp2.0'" />
3435
</ItemGroup>
3536
</Project>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using Shuttle.Core.Contract;
2+
3+
namespace Shuttle.Core.Data
4+
{
5+
public class ConnectionConfiguration
6+
{
7+
public ConnectionConfiguration(string name, string providerName, string connectionString)
8+
{
9+
Guard.AgainstNullOrEmptyString(name, nameof(name));
10+
Guard.AgainstNullOrEmptyString(providerName, nameof(providerName));
11+
Guard.AgainstNullOrEmptyString(connectionString, nameof(connectionString));
12+
13+
Name = name;
14+
ProviderName = providerName;
15+
ConnectionString = connectionString;
16+
}
17+
18+
public string Name { get; }
19+
public string ProviderName { get; }
20+
public string ConnectionString { get; }
21+
}
22+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System;
2+
using System.Configuration;
3+
using Shuttle.Core.Contract;
4+
5+
namespace Shuttle.Core.Data
6+
{
7+
public class ConnectionConfigurationProvider : IConnectionConfigurationProvider
8+
{
9+
public ConnectionConfiguration Get(string name)
10+
{
11+
Guard.AgainstNullOrEmptyString(name, nameof(name));
12+
13+
var settings = ConfigurationManager.ConnectionStrings[name];
14+
15+
if (settings == null)
16+
{
17+
throw new InvalidOperationException(string.Format(Resources.ConnectionStringMissing, name));
18+
}
19+
20+
return new ConnectionConfiguration(name, settings.ProviderName, settings.ConnectionString);
21+
}
22+
}
23+
}

Shuttle.Core.Data/ConnectionStringService.cs

Lines changed: 0 additions & 71 deletions
This file was deleted.

Shuttle.Core.Data/DatabaseContextFactory.cs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,36 +7,39 @@ namespace Shuttle.Core.Data
77
{
88
public class DatabaseContextFactory : IDatabaseContextFactory
99
{
10+
public IConnectionConfigurationProvider ConfigurationProvider { get; }
1011
private string _connectionString;
1112
private string _connectionStringName;
1213
private IDbConnection _dbConnection;
1314
private string _providerName;
1415

15-
public DatabaseContextFactory(IDbConnectionFactory dbConnectionFactory, IDbCommandFactory dbCommandFactory,
16+
public DatabaseContextFactory(IConnectionConfigurationProvider connectionConfigurationProvider,
17+
IDbConnectionFactory dbConnectionFactory, IDbCommandFactory dbCommandFactory,
1618
IDatabaseContextCache databaseContextCache)
1719
{
20+
Guard.AgainstNull(connectionConfigurationProvider, nameof(connectionConfigurationProvider));
1821
Guard.AgainstNull(dbConnectionFactory, nameof(dbConnectionFactory));
1922
Guard.AgainstNull(dbCommandFactory, nameof(dbCommandFactory));
2023
Guard.AgainstNull(databaseContextCache, nameof(databaseContextCache));
2124

25+
ConfigurationProvider = connectionConfigurationProvider;
2226
DbConnectionFactory = dbConnectionFactory;
2327
DbCommandFactory = dbCommandFactory;
2428
DatabaseContextCache = databaseContextCache;
2529

2630
DatabaseContext.Assign(databaseContextCache);
2731
}
2832

29-
public IDatabaseContext Create(string connectionStringName)
33+
public IDatabaseContext Create(string name)
3034
{
31-
var settings = ConfigurationManager.ConnectionStrings[connectionStringName];
35+
var configuration = ConfigurationProvider.Get(name);
3236

33-
if (settings == null)
37+
if (configuration == null)
3438
{
35-
throw new InvalidOperationException(string.Format(Resources.ConnectionStringMissing,
36-
connectionStringName));
39+
throw new InvalidOperationException(string.Format(Resources.ConnectionConfigurationMissing, GetType().FullName, name));
3740
}
3841

39-
return Create(settings.ProviderName, settings.ConnectionString);
42+
return Create(configuration.ProviderName, configuration.ConnectionString);
4043
}
4144

4245
public IDatabaseContext Create(string providerName, string connectionString)
@@ -114,7 +117,7 @@ public static IDatabaseContextFactory Default(IDbProviderFactories dbProviderFac
114117
var dbConnectionFactory = new DbConnectionFactory(dbProviderFactories);
115118
#endif
116119

117-
return new DatabaseContextFactory(dbConnectionFactory, new DbCommandFactory(), new ThreadStaticDatabaseContextCache());
120+
return new DatabaseContextFactory(new ConnectionConfigurationProvider(), dbConnectionFactory, new DbCommandFactory(), new ThreadStaticDatabaseContextCache());
118121
}
119122

120123
private void ClearConfiguredValues()

0 commit comments

Comments
 (0)