Files
Umbraco-CMS/src/Umbraco.Tests/TestHelpers/BaseSeleniumTest.cs
T

157 lines
5.9 KiB
C#

using System;
using System.Data.SqlServerCe;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Linq.Dynamic;
using System.Runtime.InteropServices;
using System.Text;
using System.Web.Management;
using Moq;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using Umbraco.Core;
using Umbraco.Core.Logging;
using Umbraco.Core.Persistence;
using Umbraco.Core.Persistence.Migrations.Initial;
using Umbraco.Core.Persistence.SqlSyntax;
namespace Umbraco.Tests.TestHelpers
{
public class BaseSeleniumTest
{
internal IWebDriver Driver;
internal string BaseUrl;
private StringBuilder _verificationErrors;
private UmbracoDatabase _database;
protected ApplicationContext ApplicationContext
{
get { return ApplicationContext.Current; }
}
[SetUp]
public virtual void Initialize()
{
// Disable medium trust
var transform = TransformWebConfig("Release");
var assemblyPath = TestHelper.CurrentAssemblyDirectory;
assemblyPath = Path.Combine(assemblyPath, @"..\..\..\Umbraco.Web.UI\");
var webUiPath = Path.GetFullPath(new Uri(assemblyPath).LocalPath);
var installedPackagesConfig = string.Format("{0}App_Data\\packages\\installed\\installedPackages.config", webUiPath);
if (File.Exists(installedPackagesConfig))
File.Delete(installedPackagesConfig);
var databaseDataPath = string.Format(@"{0}\App_Data\Umbraco.sdf", webUiPath);
var connectionString = string.Format(@"Data Source={0}", databaseDataPath);
//Create the Sql CE database
using (var engine = new SqlCeEngine(connectionString))
{
if (File.Exists(databaseDataPath) == false)
engine.CreateDatabase();
}
var syntaxProvider = new SqlCeSyntaxProvider();
SqlSyntaxContext.SqlSyntaxProvider = syntaxProvider;
_database = new UmbracoDatabase(connectionString, Constants.DatabaseProviders.SqlCe, Mock.Of<ILogger>());
// First remove anything in the database
var creation = new DatabaseSchemaCreation(_database, Mock.Of<ILogger>(), syntaxProvider);
creation.UninstallDatabaseSchema();
// Then populate it with fresh data
_database.CreateDatabaseSchema(false);
_database.Execute("UPDATE umbracoUser SET userName = 'admin', userPassword = 'W477AMlLwwJQeAGlPZKiEILr8TA=', userEmail = 'none' WHERE id = 0"); // password: test
// Recycle app pool so the new user can log in
//var webConfigFilePath = string.Format(@"{0}\web.config", webUiPath);
//File.SetLastWriteTime(webConfigFilePath, DateTime.Now);
// Disable medium trust
transform = TransformWebConfig("Release");
Driver = new FirefoxDriver();
BaseUrl = "http://localhost:61639/";
_verificationErrors = new StringBuilder();
}
[TearDown]
public virtual void TearDown()
{
try
{
Driver.Quit();
}
catch (Exception)
{
// Ignore errors if unable to close the browser
}
// Re-enable medium trust
var transform = TransformWebConfig("Debug");
Assert.AreEqual("", _verificationErrors.ToString());
}
private static string TransformWebConfig(string configurationToUse)
{
var assemblyPath = TestHelper.CurrentAssemblyDirectory;
var toolsPath = Path.Combine(assemblyPath, @"..\..\..\..\tools\ConfigTransformTool\");
var webUiPath = Path.GetFullPath(new Uri(Path.Combine(assemblyPath, @"..\..\..\Umbraco.Web.UI\")).LocalPath);
var fileToTransform = webUiPath + "web.config";
var transformFile = string.Format("{0}web.Template.{1}.config", webUiPath, configurationToUse);
var psi = new ProcessStartInfo(string.Format("{0}ctt.exe", toolsPath), string.Format("s:\"{0}\" t:\"{1}\" d:\"{2}\" pw v", fileToTransform, transformFile, fileToTransform))
{
WorkingDirectory = Environment.CurrentDirectory,
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true
};
string[] result = {string.Empty};
using (var process = new Process { StartInfo = psi })
{
// delegate for writing the process output to the response output
Action<Object, DataReceivedEventArgs> dataReceived = ((sender, e) =>
{
if (e.Data != null) // sometimes a random event is received with null data, not sure why - I prefer to leave it out
{
result[0] += e.Data;
result[0] += "\r\n";
}
});
process.OutputDataReceived += new DataReceivedEventHandler(dataReceived);
process.ErrorDataReceived += new DataReceivedEventHandler(dataReceived);
// start the process and start reading the standard and error outputs
process.Start();
process.BeginErrorReadLine();
process.BeginOutputReadLine();
// wait for the process to exit
process.WaitForExit();
// an exit code other than 0 generally means an error
if (process.ExitCode != 0)
{
result[0] = result[0] + "\r\n - Exited with exitcode " + process.ExitCode;
}
}
return result[0];
}
}
}