using System;
using System.Data.SqlServerCe;
using System.IO;
using NUnit.Framework;
using Umbraco.Core.Persistence;
using Umbraco.Core.Persistence.SqlSyntax;
namespace Umbraco.Tests.TestHelpers
{
///
/// Use this abstract class for tests that requires direct access to the PetaPoco object.
/// This base test class will use the database setup with ConnectionString and ProviderName from the test implementation
/// populated with the umbraco db schema.
///
/// Can be used to test against an Sql Ce, Sql Server and MySql database
[TestFixture]
public abstract class BaseDatabaseTest
{
private Database _database;
[SetUp]
public virtual void Initialize()
{
string path = TestHelper.CurrentAssemblyDirectory;
AppDomain.CurrentDomain.SetData("DataDirectory", path);
//If the Database Provider is Sql Ce we need to ensure the database
if (ProviderName.Contains("SqlServerCe"))
{
//Delete database file before continueing
string filePath = string.Concat(path, "\\test.sdf");
if (File.Exists(filePath))
{
File.Delete(filePath);
}
//Create the Sql CE database
var engine = new SqlCeEngine(ConnectionString);
engine.CreateDatabase();
}
SyntaxConfig.SqlSyntaxProvider = SyntaxProvider;
//Create the umbraco database
_database = new Database(ConnectionString, ProviderName);
_database.Initialize();
}
public abstract string ConnectionString { get; }
public abstract string ProviderName { get; }
public abstract ISqlSyntaxProvider SyntaxProvider { get; }
protected Database Database
{
get { return _database; }
}
[TearDown]
public virtual void TearDown()
{
AppDomain.CurrentDomain.SetData("DataDirectory", null);
}
}
}