Skip to content

Commit fb39cfd

Browse files
authored
Merge pull request #50 from mjohanss/master
Integration tests for web
2 parents e78495e + dc0f73c commit fb39cfd

39 files changed

+3202
-54
lines changed

src/Server/Coderr.Server.Infrastructure/ConnectionFactory.cs

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
#if NET452
2-
using System;
32
using System.Configuration;
43
using System.Data;
54
using System.Data.Common;
6-
using System.Runtime.CompilerServices;
75

86
namespace codeRR.Server.Infrastructure
97
{
@@ -16,33 +14,23 @@ public class DbConnectionFactory
1614
/// Opens a connection
1715
/// </summary>
1816
/// <returns>open connection</returns>
19-
public static IDbConnection Open(string connectionStringName, bool throwIfMissing)
17+
public static IDbConnection Open(ConnectionStringSettings connectionString, bool throwIfMissing)
2018
{
21-
var conStr = ConfigurationManager.ConnectionStrings[connectionStringName];
22-
if (conStr == null)
23-
{
24-
if (throwIfMissing)
25-
throw new ConfigurationErrorsException(
26-
$"Expected a <connectionString> named '{connectionStringName}' in web.config");
27-
return null;
28-
}
29-
30-
31-
var provider = DbProviderFactories.GetFactory(conStr.ProviderName);
19+
var provider = DbProviderFactories.GetFactory(connectionString.ProviderName);
3220
if (provider == null)
3321
throw new ConfigurationErrorsException(
34-
$"Sql provider '{conStr.ProviderName}' was not found/registered.");
22+
$"Sql provider '{connectionString.ProviderName}' was not found/registered.");
3523

3624
var connection = provider.CreateConnection();
37-
connection.ConnectionString = conStr.ConnectionString + ";connect timeout=22;";
25+
connection.ConnectionString = connectionString.ConnectionString + ";connect timeout=22;";
3826
try
3927
{
4028
connection.Open();
4129
}
4230
catch (DataException ex)
4331
{
4432
throw new DataException(
45-
$"Failed to connect to '{conStr.ConnectionString}'. See inner exception for the reason.", ex);
33+
$"Failed to connect to '{connectionString.ConnectionString}'. See inner exception for the reason.", ex);
4634
}
4735

4836
return connection;

src/Server/Coderr.Server.ReportAnalyzer/Inbound/SaveReportHandler.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
using System.Text;
99
using System.Threading.Tasks;
1010
using codeRR.Server.App.Core.Reports.Config;
11-
using codeRR.Server.Infrastructure.Configuration;
1211
using codeRR.Server.ReportAnalyzer.Inbound.Models;
1312
using codeRR.Server.ReportAnalyzer.LibContracts;
1413
using Coderr.Server.PluginApi.Config;
@@ -40,8 +39,8 @@ public SaveReportHandler(IMessageQueue queue, IAdoNetUnitOfWork unitOfWork, Conf
4039
{
4140
_unitOfWork = unitOfWork;
4241
_queue = queue ?? throw new ArgumentNullException(nameof(queue));
43-
var config= configStore.Load<ReportConfig>();
44-
_maxSizeForJsonErrorReport = config?.MaxReportJsonSize ?? 1000000;
42+
var config = configStore.Load<ReportConfig>();
43+
_maxSizeForJsonErrorReport = config.MaxReportJsonSize;
4544
}
4645

4746
public void AddFilter(Func<NewReportDTO, bool> filter)
@@ -141,7 +140,7 @@ private NewReportDTO DeserializeBody(byte[] body)
141140
if (json.Length > _maxSizeForJsonErrorReport)
142141
return null;
143142

144-
//to support clients that still use the OneTrueError client library.
143+
// to support clients that still use the OneTrueError client library.
145144
json = json.Replace("OneTrueError", "codeRR");
146145

147146
return JsonConvert.DeserializeObject<NewReportDTO>(json,

src/Server/Coderr.Server.SqlServer.Tests/ConnectionFactory.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
using System.Configuration;
2-
using System.Data;
1+
using System.Data;
32
using System.Data.SqlClient;
4-
using codeRR.Server.Infrastructure;
3+
using codeRR.Server.SqlServer.Tools;
54
using Griffin.Data;
65

76
namespace codeRR.Server.SqlServer.Tests
@@ -12,7 +11,7 @@ public static IAdoNetUnitOfWork Create()
1211
{
1312
var connection = new SqlConnection
1413
{
15-
ConnectionString = ConfigurationManager.ConnectionStrings["Db"].ConnectionString
14+
ConnectionString = ConnectionStringHelper.GetConnectionString().ConnectionString
1615
};
1716
connection.Open();
1817
return new AdoNetUnitOfWork(connection, true);
@@ -22,7 +21,7 @@ public static IDbConnection OpenConnection()
2221
{
2322
var connection = new SqlConnection
2423
{
25-
ConnectionString = ConfigurationManager.ConnectionStrings["Db"].ConnectionString
24+
ConnectionString = ConnectionStringHelper.GetConnectionString().ConnectionString
2625
};
2726
connection.Open();
2827
return connection;

src/Server/Coderr.Server.SqlServer.Tests/TestTools.cs

Lines changed: 96 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Data;
4+
using System.Data.SqlClient;
5+
using System.IO;
6+
using codeRR.Server.Api.Core.Applications;
47
using codeRR.Server.App.Core.Accounts;
58
using codeRR.Server.App.Core.Applications;
69
using codeRR.Server.App.Core.Users;
7-
using codeRR.Server.Infrastructure.Configuration;
810
using codeRR.Server.ReportAnalyzer;
911
using codeRR.Server.ReportAnalyzer.Domain.Incidents;
1012
using codeRR.Server.ReportAnalyzer.Domain.Reports;
@@ -85,6 +87,98 @@ public void CreateDatabase()
8587
}
8688
}
8789

90+
public void CreateDatabase(string name, string path)
91+
{
92+
var dataFilename = Path.Combine(path, name + ".mdf");
93+
var logFilename = Path.Combine(path, name + ".log");
94+
95+
using (var con = ConnectionFactory.OpenConnection())
96+
{
97+
var sql = $@"CREATE DATABASE [{name}]
98+
ON PRIMARY (
99+
NAME={name}_data,
100+
FILENAME = '{dataFilename}'
101+
)
102+
LOG ON (
103+
NAME={name}_log,
104+
FILENAME = '{logFilename}'
105+
)";
106+
107+
using (var cmd = con.CreateCommand())
108+
{
109+
cmd.CommandText = sql;
110+
cmd.ExecuteNonQuery();
111+
}
112+
}
113+
}
114+
115+
public void CreateAndInitializeDatabase(string path, string databaseName, string connectionString, string baseUrl)
116+
{
117+
_dbName = databaseName;
118+
var databasePath = path;
119+
var builder = new SqlConnectionStringBuilder(connectionString);
120+
121+
Environment.SetEnvironmentVariable("coderr_ConnectionString", $"Data Source={builder.DataSource}");
122+
123+
CreateDatabase(_dbName, databasePath);
124+
125+
Environment.SetEnvironmentVariable("coderr_ConnectionString", connectionString);
126+
127+
var schemaManager = new SchemaManager(SqlServerTools.OpenConnection);
128+
schemaManager.CreateInitialStructure();
129+
schemaManager.UpgradeDatabaseSchema();
130+
131+
InsertSettingsInfoDatabase(baseUrl);
132+
}
133+
134+
public void InsertSettingsInfoDatabase(string baseUrl)
135+
{
136+
using (var con = ConnectionFactory.OpenConnection())
137+
{
138+
var sql = $@"INSERT INTO Settings (Section, Name, Value) VALUES
139+
('BaseConfig', 'AllowRegistrations', 'False'),
140+
('BaseConfig', 'BaseUrl', '{baseUrl}'),
141+
('BaseConfig', 'SenderEmail', 'webtests@coderrapp.com'),
142+
('BaseConfig', 'SupportEmail', 'webtests@coderrapp.com'),
143+
('ErrorTracking', 'ActivateTracking', 'True'),
144+
('ErrorTracking', 'ContactEmail', 'webtests@coderrapp.com'),
145+
('ErrorTracking', 'InstallationId', '068e0fc19e90460c86526693488289ee'),
146+
('SmtpSettings', 'AccountName', ''),
147+
('SmtpSettings', 'AccountPassword', ''),
148+
('SmtpSettings', 'SmtpHost', 'localhost'),
149+
('SmtpSettings', 'PortNumber', '25'),
150+
('SmtpSettings', 'UseSSL', 'False')
151+
";
152+
using (var cmd = con.CreateCommand())
153+
{
154+
cmd.CommandText = sql;
155+
cmd.ExecuteNonQuery();
156+
}
157+
}
158+
}
159+
160+
public Application GetApplication(int id)
161+
{
162+
using (var uow = CreateUnitOfWork())
163+
{
164+
var repository = new ApplicationRepository(uow);
165+
return repository.GetByIdAsync(id).GetAwaiter().GetResult();
166+
}
167+
}
168+
169+
public void ActivateAccount(int accountId)
170+
{
171+
using (var uow = CreateUnitOfWork())
172+
{
173+
var accountRepository = new AccountRepository(uow);
174+
var account = accountRepository.GetByIdAsync(accountId).GetAwaiter().GetResult();
175+
account.Activate();
176+
accountRepository.UpdateAsync(account).GetAwaiter().GetResult();
177+
178+
uow.SaveChanges();
179+
}
180+
}
181+
88182
public IAdoNetUnitOfWork CreateUnitOfWork()
89183
{
90184
return new AdoNetUnitOfWork(OpenConnection(), false);
@@ -122,7 +216,7 @@ protected void CreateUserAndApplication(IAdoNetUnitOfWork uow, out int accountId
122216
userRepos.CreateAsync(user).GetAwaiter().GetResult();
123217

124218
var appRepos = new ApplicationRepository(uow);
125-
var app = new Application(account.Id, "MinApp");
219+
var app = new Application(account.Id, "MyTestApp") { ApplicationType = TypeOfApplication.DesktopApplication };
126220
appRepos.CreateAsync(app).GetAwaiter().GetResult();
127221
var member = new ApplicationTeamMember(app.Id, account.Id, "Admin");
128222
appRepos.CreateAsync(member).GetAwaiter().GetResult();

src/Server/Coderr.Server.SqlServer.Tests/codeRR.Server.SqlServer.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
</PropertyGroup>
77
<ItemGroup>
88
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.5.0" />
9+
<PackageReference Include="Microsoft.VisualStudio.TestPlatform.ObjectModel" Version="14.0.0" />
910
<PackageReference Include="xunit" Version="2.3.1" />
1011
<PackageReference Include="FluentAssertions" Version="4.19.4" />
1112
<PackageReference Include="NSubstitute" Version="3.1.0" />

src/Server/Coderr.Server.SqlServer/SqlServerTools.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
using System;
2-
using System.Configuration;
32
using System.Data;
43
using System.Data.Common;
54
using System.Data.SqlClient;
65
using System.Diagnostics.CodeAnalysis;
76
using codeRR.Server.Infrastructure;
7+
using codeRR.Server.SqlServer.Tools;
88

99
namespace codeRR.Server.SqlServer
1010
{
@@ -26,8 +26,8 @@ private bool IsConnectionConfigured
2626
{
2727
get
2828
{
29-
return ConfigurationManager.ConnectionStrings["Db"] != null &&
30-
!string.IsNullOrEmpty(ConfigurationManager.ConnectionStrings["Db"].ConnectionString);
29+
var connectionString = ConnectionStringHelper.GetConnectionString();
30+
return !string.IsNullOrEmpty(connectionString?.ConnectionString);
3131
}
3232
}
3333

@@ -109,7 +109,7 @@ public static IDbConnection OpenConnection(string connectionString)
109109

110110
public static IDbConnection OpenConnection()
111111
{
112-
var conStr = ConfigurationManager.ConnectionStrings["Db"];
112+
var conStr = ConnectionStringHelper.GetConnectionString();
113113
var provider = DbProviderFactories.GetFactory(conStr.ProviderName);
114114
var connection = provider.CreateConnection();
115115
connection.ConnectionString = conStr.ConnectionString;
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+
4+
namespace codeRR.Server.SqlServer.Tools
5+
{
6+
public static class ConnectionStringHelper
7+
{
8+
public static ConnectionStringSettings GetConnectionString()
9+
{
10+
var connectionStringName = ConfigurationManager.AppSettings["ConnectionStringName"] ?? "Db";
11+
12+
var connectionString = ConfigurationManager.ConnectionStrings[connectionStringName];
13+
14+
var environmentConnectionString = Environment.GetEnvironmentVariable("coderr_ConnectionString");
15+
if (!string.IsNullOrEmpty(environmentConnectionString))
16+
{
17+
connectionString = new ConnectionStringSettings(connectionStringName, environmentConnectionString, connectionString.ProviderName);
18+
}
19+
20+
return connectionString;
21+
}
22+
}
23+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<configuration>
3+
<connectionStrings>
4+
<add name="Db" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog={databaseName};Integrated Security=True" providerName="System.Data.SqlClient" />
5+
</connectionStrings>
6+
</configuration>

0 commit comments

Comments
 (0)