yavsc/src/test/Mandatory/ServerSideFixture.cs

182 lines
4.9 KiB
C#
Raw Normal View History

using System;
2019-01-05 13:28:17 +00:00
using System.Data.Common;
using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Hosting.Internal;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.OptionsModel;
using Yavsc.Lib;
using Yavsc.Services;
2018-07-20 02:27:53 +02:00
using Yavsc;
2019-01-05 13:28:17 +00:00
using Yavsc.Models;
2018-08-01 06:12:42 +02:00
using Xunit;
2018-09-04 16:40:02 +02:00
using Npgsql;
2018-07-20 02:27:53 +02:00
namespace test
{
2018-08-01 06:12:42 +02:00
[Trait("regres", "no")]
public class ServerSideFixture : IDisposable {
2018-09-03 13:56:35 +02:00
SiteSettings _siteSetup;
ILogger _logger;
IApplication _app;
EMailer _mailer;
ILoggerFactory _loggerFactory;
IEmailSender _mailSender;
2018-08-03 02:59:37 +02:00
public static string ApiKey => "53f4d5da-93a9-4584-82f9-b8fdf243b002" ;
2018-09-03 13:56:35 +02:00
2019-01-05 13:28:17 +00:00
public ApplicationDbContext DbContext { get; private set; }
2018-09-03 13:56:35 +02:00
public SiteSettings SiteSetup
{
get
{
return _siteSetup;
}
set
{
_siteSetup = value;
}
}
public IEmailSender MailSender
{
get
{
return _mailSender;
}
set
{
_mailSender = value;
}
}
public IApplication App
{
get
{
return _app;
}
set
{
_app = value;
}
}
2018-09-04 16:40:02 +02:00
internal void UpgradeDb()
{
Microsoft.Data.Entity.Commands.Program.Main(
new string [] { "database", "update" });
}
2018-09-03 13:56:35 +02:00
public ILogger Logger
{
get
{
return _logger;
}
set
{
_logger = value;
}
}
2018-09-04 16:40:02 +02:00
public bool DbCreated { get; private set; }
2018-09-03 13:56:35 +02:00
2018-08-03 02:59:37 +02:00
//
public ServerSideFixture()
{
2018-08-01 06:12:42 +02:00
InitTestHost();
2018-09-03 13:56:35 +02:00
Logger.LogInformation("ServerSideFixture created.");
}
2018-07-20 02:27:53 +02:00
2018-08-01 06:12:42 +02:00
[Fact]
void InitTestHost()
{
2018-09-04 16:40:02 +02:00
var host = new WebHostBuilder();
var hostengnine = host
.UseEnvironment("Development")
.UseServer("test")
2018-07-20 02:27:53 +02:00
.UseStartup<test.Startup>()
.Build();
2018-09-03 13:56:35 +02:00
App = hostengnine.Start();
_mailer = App.Services.GetService(typeof(EMailer)) as EMailer;
_loggerFactory = App.Services.GetService(typeof(ILoggerFactory)) as ILoggerFactory;
2018-09-04 16:40:02 +02:00
Logger = _loggerFactory.CreateLogger<ServerSideFixture> ();
2018-09-03 13:56:35 +02:00
var siteSetup = App.Services.GetService(typeof(IOptions<SiteSettings>)) as IOptions<SiteSettings>;
SiteSetup = siteSetup.Value;
MailSender = App.Services.GetService(typeof(IEmailSender)) as IEmailSender;
2019-01-05 13:28:17 +00:00
var builder = new DbConnectionStringBuilder();
builder.ConnectionString = Startup.DbSettings.Testing;
Logger.LogInformation("testing database:" +builder["Database"]);
TestingDatabase = (string) builder["Database"];
2018-09-04 16:40:02 +02:00
CheckDbExistence();
if (!DbCreated)
CreateTestDb();
2019-01-05 13:28:17 +00:00
DbContext = App.Services.GetService(typeof(ApplicationDbContext)) as ApplicationDbContext;
}
2019-01-05 13:28:17 +00:00
public string TestingDatabase { get; private set; }
public void CheckDbExistence()
2018-09-04 16:40:02 +02:00
{
using (
2019-01-05 13:28:17 +00:00
NpgsqlConnection cx = new NpgsqlConnection(Startup.DbSettings.DatabaseCtor))
2018-09-04 16:40:02 +02:00
{
cx.Open();
var command = cx.CreateCommand();
2019-01-05 13:28:17 +00:00
command.CommandText = $"SELECT 1 FROM pg_database WHERE datname='{TestingDatabase}';";
DbCreated = (command.ExecuteScalar()!=null);
2018-09-04 16:40:02 +02:00
2019-01-05 13:28:17 +00:00
_logger.LogInformation($"DbCreated:{DbCreated}");
2018-09-04 16:40:02 +02:00
cx.Close();
}
}
2019-01-05 13:28:17 +00:00
/* Needs a connection string parsing */
2018-09-04 16:40:02 +02:00
2019-01-05 13:28:17 +00:00
public void CreateTestDb()
2018-09-04 16:40:02 +02:00
{
2019-01-05 13:28:17 +00:00
if (!DbCreated)
2018-09-04 16:40:02 +02:00
using (
2019-01-05 13:28:17 +00:00
NpgsqlConnection cx = new NpgsqlConnection(Startup.DbSettings.DatabaseCtor))
2018-09-04 16:40:02 +02:00
{
cx.Open();
var command = cx.CreateCommand();
2019-01-05 13:28:17 +00:00
command.CommandText = $"create database \"{TestingDatabase}\";";
command.ExecuteNonQuery();
2018-09-04 16:40:02 +02:00
2019-01-05 13:28:17 +00:00
_logger.LogInformation($"database created.");
2018-09-04 16:40:02 +02:00
cx.Close();
}
}
public void DropTestDb()
{
if (DbCreated)
using (
2019-01-05 13:28:17 +00:00
NpgsqlConnection cx = new NpgsqlConnection(Startup.DbSettings.DatabaseCtor))
2018-09-04 16:40:02 +02:00
{
cx.Open();
var command = cx.CreateCommand();
2019-01-05 13:28:17 +00:00
command.CommandText = $"drop database \"{TestingDatabase}\"";
2018-09-04 16:40:02 +02:00
command.ExecuteNonQuery();
_logger.LogInformation($"database dropped");
cx.Close();
}
2019-01-05 13:28:17 +00:00
}
public void Dispose()
{
2018-09-03 13:56:35 +02:00
Logger.LogInformation("Disposing");
}
}
2018-07-20 02:27:53 +02:00
}