/// <summary>
        /// Ensures the Merchello database has been installed.
        /// </summary>
        /// <returns>
        /// The <see cref="bool"/>.
        /// </returns>
        internal bool EnsureDatabase()
        {
            var databaseSchemaCreation = new DatabaseSchemaCreation(_database, _logger, new DatabaseSchemaHelper(_database, _logger, _sqlSyntaxProvider), _sqlSyntaxProvider);
            var schemaResult           = databaseSchemaCreation.ValidateSchema();
            var databaseVersion        = schemaResult.DetermineInstalledVersion();

            if (databaseVersion != new Version("0.0.0"))
            {
                return(true);
            }

            // install the database
            var schemaHelper = new MerchelloDatabaseSchemaHelper(this._database, this._logger, this._sqlSyntaxProvider);

            schemaHelper.CreateDatabaseSchema();

            var baseDataCreation = new BaseDataCreation(this._database, this._logger);

            baseDataCreation.InitializeBaseData("merchTypeField");
            baseDataCreation.InitializeBaseData("merchInvoiceStatus");
            baseDataCreation.InitializeBaseData("merchOrderStatus");
            baseDataCreation.InitializeBaseData("merchWarehouse");
            baseDataCreation.InitializeBaseData("merchGatewayProviderSettings");
            baseDataCreation.InitializeBaseData("merchStoreSetting");
            baseDataCreation.InitializeBaseData("merchShipmentStatus");

            return(false);
        }
Example #2
0
        public virtual void DatabaseSchemaCreation_Returns_DatabaseSchemaResult_Where_DetermineInstalledVersion_Is_4_7_0()
        {
            // Arrange
            var db     = GetConfiguredDatabase();
            var schema = new DatabaseSchemaCreation(db);

            //Create db schema and data from old Total.sql file for Sql Ce
            string statements = GetDatabaseSpecificSqlScript();

            // replace block comments by whitespace
            statements = FindComments.Replace(statements, " ");
            // execute all non-empty statements
            foreach (string statement in statements.Split(";".ToCharArray()))
            {
                string rawStatement = statement.Replace("GO", "").Trim();
                if (rawStatement.Length > 0)
                {
                    db.Execute(new Sql(rawStatement));
                }
            }

            // Act
            var result = schema.ValidateSchema();

            // Assert
            var expected = new Version(4, 7, 0);

            Assert.AreEqual(expected, result.DetermineInstalledVersion());
        }
Example #3
0
        /// <summary>
        /// The uninstall database schema.
        /// </summary>
        internal void UninstallDatabaseSchema()
        {
            _logger.Info <MerchelloDatabaseSchemaHelper>("Uninstalling Merchello database schema");
            var creation = new DatabaseSchemaCreation(_db, _logger, _umbSchemaHelper, _syntaxProvider);

            creation.UninstallDatabaseSchema();
            _logger.Info <MerchelloDatabaseSchemaHelper>("Merchello database schema removed");
        }
        public override void FixtureSetup()
        {
            base.FixtureSetup();

            var serviceContext = (ServiceContext)MerchelloContext.Current.Services;

            _databaseSchemaCreation = new DatabaseSchemaCreation(serviceContext.DatabaseUnitOfWorkProvider.GetUnitOfWork().Database);
        }
        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 = '******', userPassword = '******', 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();
        }
Example #6
0
        internal void CreateDatabaseSchemaDo(IMigrationEntryService migrationEntryService)
        {
            _logger.Info <Database>("Initializing database schema creation");

            var creation = new DatabaseSchemaCreation(_db, _logger, _syntaxProvider);

            creation.InitializeDatabaseSchema();

            _logger.Info <Database>("Finalized database schema creation");
        }
Example #7
0
        /// <summary>
        /// The create database schema.
        /// </summary>
        public void CreateDatabaseSchema()
        {
            _logger.Info <MerchelloDatabaseSchemaHelper>("Initializing database schema creation");

            var creation = new DatabaseSchemaCreation(_db, _logger, _umbSchemaHelper, _syntaxProvider);

            creation.InitializeDatabaseSchema();

            _logger.Info <MerchelloDatabaseSchemaHelper>("Finalized database schema creation");
        }
Example #8
0
        public void Init()
        {
            var syntax = (DbSyntax)Enum.Parse(typeof(DbSyntax), ConfigurationManager.AppSettings["syntax"]);
            var worker = new DbPreTestDataWorker {
                SqlSyntax = syntax
            };

            _database = worker.Database;
            var deletions = new DatabaseSchemaCreation(_database);

            deletions.UninstallDatabaseSchema();
        }
Example #9
0
        public void Init()
        {
            var syntax = (DbSyntax)Enum.Parse(typeof(DbSyntax), ConfigurationManager.AppSettings["syntax"]);

            _worker = new DbPreTestDataWorker {
                SqlSyntax = syntax
            };

            var schemaHelper = new DatabaseSchemaHelper(_worker.Database, _worker.TestLogger, _worker.SqlSyntaxProvider);
            var deletions    = new DatabaseSchemaCreation(_worker.Database, _worker.TestLogger, schemaHelper, _worker.SqlSyntaxProvider);

            deletions.UninstallDatabaseSchema();
        }
Example #10
0
        public void DatabaseSchemaCreation_Produces_DatabaseSchemaResult_With_Zero_Errors()
        {
            // Arrange
            var db     = DatabaseContext.Database;
            var schema = new DatabaseSchemaCreation(db);

            // Act
            var result = schema.ValidateSchema();

            // Assert
            Assert.That(result.Errors.Count, Is.EqualTo(0));
            Assert.AreEqual(result.DetermineInstalledVersion(), UmbracoVersion.Current);
        }
Example #11
0
        internal DatabaseSchemaResult ValidateDatabaseSchema()
        {
            if (_configured == false || (string.IsNullOrEmpty(_connectionString) || string.IsNullOrEmpty(ProviderName)))
            {
                return(new DatabaseSchemaResult());
            }

            if (_result == null)
            {
                var database = new UmbracoDatabase(_connectionString, ProviderName);
                var dbSchema = new DatabaseSchemaCreation(database);
                _result = dbSchema.ValidateSchema();
            }
            return(_result);
        }
Example #12
0
        /// <summary>
        /// Undoes the specified package name.
        /// </summary>
        /// <param name="packageName">Name of the package.</param>
        /// <param name="xmlData">The XML data.</param>
        /// <returns></returns>
        public bool Undo(string packageName, System.Xml.XmlNode xmlData)
        {
            try
            {
                var deletions = new DatabaseSchemaCreation(Umbraco.Core.ApplicationContext.Current.DatabaseContext.Database);
                deletions.UninstallDatabaseSchema();

                return(true);
            }
            catch (Exception ex)
            {
                var message = string.Concat("Error at undo ", this.Alias(), " package action: ", ex);
                LogHelper.Error(typeof(CreateDatabase), message, ex);
            }

            return(false);
        }
Example #13
0
        internal static void CreateDatabaseSchema(this Database db, bool guardConfiguration)
        {
            if (guardConfiguration && ApplicationContext.Current.IsConfigured)
            {
                throw new Exception("Umbraco is already configured!");
            }

            NewTable += PetaPocoExtensions_NewTable;

            LogHelper.Info <Database>("Initializing database schema creation");

            var creation = new DatabaseSchemaCreation(db);

            creation.InitializeDatabaseSchema();

            LogHelper.Info <Database>("Finalized database schema creation");

            NewTable -= PetaPocoExtensions_NewTable;
        }
Example #14
0
        /// <summary>
        /// Executes the specified package name.
        /// </summary>
        /// <param name="packageName">Name of the package.</param>
        /// <param name="xmlData">The XML data.</param>
        /// <returns></returns>
        public bool Execute(string packageName, System.Xml.XmlNode xmlData)
        {
            try
            {
                var creation = new DatabaseSchemaCreation(Umbraco.Core.ApplicationContext.Current.DatabaseContext.Database);
                creation.InitializeDatabaseSchema();

                var  creationData       = new BaseDataCreation(Umbraco.Core.ApplicationContext.Current.DatabaseContext.Database);
                bool dataCreationResult = CreateInitialMerchelloData(creationData);

                return(true);
            }
            catch (Exception ex)
            {
                var message = string.Concat("Error at install ", this.Alias(), " package action: ", ex);
                LogHelper.Error(typeof(CreateDatabase), message, ex);
            }

            return(false);
        }
Example #15
0
        private void RebuildDatabase()
        {
            // migration
            var schema = new DatabaseSchemaCreation(Database);

            // drop all the tables
            schema.UninstallDatabaseSchema();

            // install the schema
            schema.InitializeDatabaseSchema();

            // add the default data
            var baseDataCreation = new BaseDataCreation(Database);

            baseDataCreation.InitializeBaseData("merchDBTypeField");
            baseDataCreation.InitializeBaseData("merchInvoiceStatus");
            baseDataCreation.InitializeBaseData("merchOrderStatus");
            baseDataCreation.InitializeBaseData("merchWarehouse");
            baseDataCreation.InitializeBaseData("merchGatewayProviderSettings");
            baseDataCreation.InitializeBaseData("merchStoreSetting");
        }
Example #16
0
        internal DatabaseSchemaResult ValidateDatabaseSchema()
        {
            if (_configured == false || (string.IsNullOrEmpty(_connectionString) || string.IsNullOrEmpty(ProviderName)))
            {
                return(new DatabaseSchemaResult());
            }

            if (_result == null)
            {
                if (SystemUtilities.GetCurrentTrustLevel() != AspNetHostingPermissionLevel.Unrestricted &&
                    ProviderName == Constants.DatabaseProviders.MySql)
                {
                    throw new InvalidOperationException("Cannot use MySql in Medium Trust configuration");
                }

                var database = new UmbracoDatabase(_connectionString, ProviderName, _logger);
                var dbSchema = new DatabaseSchemaCreation(database, _logger, SqlSyntax);
                _result = dbSchema.ValidateSchema();
            }
            return(_result);
        }
        private void SetupSqlCe(string path, ILogger logger)
        {
            var dbName = string.Concat("Umb", Guid.NewGuid(), ".sdf");

            AppDomain.CurrentDomain.SetData("DataDirectory", path);
            var sqlCeConnectionString = $"Datasource=|DataDirectory|\\{dbName};Flush Interval=1;";

            _dbFile = Path.Combine(path, dbName);

            //only create the db one time
            if (_initDbBytes == null)
            {
                using (var engine = new SqlCeEngine(sqlCeConnectionString))
                {
                    engine.CreateDatabase();
                }

                //use the db  to create the initial schema so we can reuse in each bench
                using (_dbSqlCe = new UmbracoDatabase(
                           sqlCeConnectionString,
                           Constants.DatabaseProviders.SqlCe,
                           logger))
                {
                    var creation = new DatabaseSchemaCreation(_dbSqlCe, logger, _sqlCeSyntax);
                    creation.InitializeDatabaseSchema();
                }
                _initDbBytes = File.ReadAllBytes(_dbFile);
            }
            else
            {
                File.WriteAllBytes(_dbFile, _initDbBytes);
            }

            //create the db
            _dbSqlCe = new UmbracoDatabase(
                sqlCeConnectionString,
                Constants.DatabaseProviders.SqlCe,
                logger);
        }
Example #18
0
        /// <summary>
        /// Ensures the Merchello database has been installed.
        /// </summary>
        /// <returns>
        /// The <see cref="bool"/>.
        /// </returns>
        internal bool EnsureDatabase()
        {
            var databaseSchemaCreation = new DatabaseSchemaCreation(_database, _logger, new DatabaseSchemaHelper(_database, _logger, _sqlSyntaxProvider), _sqlSyntaxProvider);
            var schemaResult           = databaseSchemaCreation.ValidateSchema();
            var databaseVersion        = schemaResult.DetermineInstalledVersion();

            if (databaseVersion != new Version("0.0.0"))
            {
                return(true);
            }

            // install the database
            var schemaHelper = new MerchelloDatabaseSchemaHelper(this._database, this._logger, this._sqlSyntaxProvider);

            schemaHelper.CreateDatabaseSchema();

            var baseDataCreation = new BaseDataCreation(this._database, this._logger);

            baseDataCreation.InitializeBaseData("merchTypeField");
            baseDataCreation.InitializeBaseData("merchInvoiceStatus");
            baseDataCreation.InitializeBaseData("merchOrderStatus");
            baseDataCreation.InitializeBaseData("merchWarehouse");
            baseDataCreation.InitializeBaseData("merchGatewayProviderSettings");
            baseDataCreation.InitializeBaseData("merchStoreSetting");
            baseDataCreation.InitializeBaseData("merchShipmentStatus");

            // Add 'merchello' to the admin group
            var ug = new UserGroup2AppDto {
                UserGroupId = 1, AppAlias = "merchello"
            };

            _database.Insert(ug);

            // TODO clear cache

            return(false);
        }
Example #19
0
        /// <summary>
        /// Executes the Migration runner.
        /// </summary>
        /// <param name="database">
        /// The database.
        /// </param>
        /// <returns>
        /// A value indicating whether or not the migration was successful.
        /// </returns>
        private bool UpgradeMerchello(Database database)
        {
            var databaseSchemaCreation = new DatabaseSchemaCreation(_database, _logger, new DatabaseSchemaHelper(_database, _logger, _sqlSyntaxProvider), _sqlSyntaxProvider);
            var schemaResult           = databaseSchemaCreation.ValidateSchema();
            var dbVersion = schemaResult.DetermineInstalledVersion();

            if (dbVersion != MerchelloVersion.Current)
            {
                try
                {
                    _logger.Info <CoreMigrationManager>("Merchello database upgraded required.  Initializing Upgrade.");

                    var resolver = new MigrationResolver(_logger, PluginManager.Current.ResolveMerchelloMigrations());

                    var migrations = resolver.OrderedUpgradeMigrations(
                        MerchelloConfiguration.ConfigurationStatusVersion,
                        MerchelloVersion.Current);

                    bool upgraded;
                    try
                    {
                        foreach (var m in migrations)
                        {
                            m.Up();
                        }

                        upgraded = true;
                    }
                    catch (Exception ex)
                    {
                        _logger.Error <CoreMigrationManager>("Merchello migration failed", ex);
                        upgraded = false;
                    }


                    //var entryService = ApplicationContext.Current.Services.MigrationEntryService;


                    //var runner = new MigrationRunner(
                    //    entryService,
                    //    _logger,
                    //    new SemVersion(MerchelloConfiguration.ConfigurationStatusVersion),
                    //    new SemVersion(MerchelloVersion.Current),
                    //    MerchelloConfiguration.MerchelloMigrationName);

                    //var upgraded = runner.Execute(database);

                    if (upgraded)
                    {
                        var migrationKey = this.EnsureMigrationKey(schemaResult);

                        var record = new MigrationRecord()
                        {
                            MigrationKey   = migrationKey,
                            CurrentVersion = dbVersion.ToString(),
                            TargetVersion  = MerchelloVersion.Current.ToString(),
                            DbProvider     = database.GetDatabaseProvider().ToString(),
                            InstallDate    = DateTime.Now,
                            IsUpgrade      = true
                        };

                        this.OnUpgraded(record);

                        _logger.Info <CoreMigrationManager>("Merchello Schema Migration completed successfully");
                    }

                    _logger.Debug <CoreMigrationManager>("Merchello migration runner returned false.");
                }
                catch (Exception ex)
                {
                    _logger.Error <CoreMigrationManager>("Merchello Database Schema Upgrade Failed", ex);
                    throw;
                }
            }
            else
            {
                // this is a new install
                var migrationKey = this.EnsureMigrationKey(schemaResult);

                var record = new MigrationRecord()
                {
                    MigrationKey   = migrationKey,
                    CurrentVersion = MerchelloConfiguration.ConfigurationStatus,
                    TargetVersion  = MerchelloVersion.Current.ToString(),
                    DbProvider     = database.GetDatabaseProvider().ToString(),
                    InstallDate    = DateTime.Now,
                    IsUpgrade      = !MerchelloConfiguration.ConfigurationStatus.Equals("0.0.0")
                };
                this.OnUpgraded(record);
            }

            MerchelloConfiguration.ConfigurationStatus = MerchelloVersion.Current.ToString();

            return(true);
        }
Example #20
0
        /// <summary>
        /// Completely uninstalls Merchello's database schema
        /// </summary>
        public void UninstallDatabaseSchema()
        {
            var uninstaller = new DatabaseSchemaCreation(_database);

            uninstaller.UninstallDatabaseSchema();
        }
Example #21
0
        internal void UninstallDatabaseSchema()
        {
            var creation = new DatabaseSchemaCreation(_db, _logger, _syntaxProvider);

            creation.UninstallDatabaseSchema();
        }
Example #22
0
        public void Successfully_Create_Default_Database_Schema()
        {
            var creation = new DatabaseSchemaCreation(_database);

            creation.InitializeDatabaseSchema();
        }
Example #23
0
        public void Can_Drop_All_Database_Tables()
        {
            var deletions = new DatabaseSchemaCreation(_database);

            deletions.UninstallDatabaseSchema();
        }
Example #24
0
        internal static void UninstallDatabaseSchema(this Database db)
        {
            var creation = new DatabaseSchemaCreation(db);

            creation.UninstallDatabaseSchema();
        }
Example #25
0
        /// <summary>
        /// Creates a new version of Merchello's Database Schema
        /// </summary>
        public void InitializeDatabaseSchema()
        {
            var creation = new DatabaseSchemaCreation(_database);

            creation.InitializeDatabaseSchema();
        }
Example #26
0
        /// <summary>
        /// Executes the Migration runner.
        /// </summary>
        /// <param name="database">
        /// The database.
        /// </param>
        /// <returns>
        /// A value indicating whether or not the migration was successful.
        /// </returns>
        private bool UpgradeMerchello(Database database)
        {
            var databaseSchemaCreation = new DatabaseSchemaCreation(database);
            var schemaResult           = databaseSchemaCreation.ValidateSchema();
            var dbVersion = schemaResult.DetermineInstalledVersion();

            if (dbVersion != MerchelloVersion.Current)
            {
                try
                {
                    LogHelper.Info <CoreMigrationManager>("Merchello database upgraded required.  Initializing Upgrade.");
                    var runner = new MigrationRunner(
                        MerchelloConfiguration.ConfigurationStatusVersion,
                        MerchelloVersion.Current,
                        MerchelloConfiguration.MerchelloMigrationName);
                    var upgraded = runner.Execute(database);
                    if (upgraded)
                    {
                        var migrationKey = this.EnsureMigrationKey(schemaResult);

                        var record = new MigrationRecord()
                        {
                            MigrationKey   = migrationKey,
                            CurrentVersion = dbVersion.ToString(),
                            TargetVersion  = MerchelloVersion.Current.ToString(),
                            DbProvider     = database.GetDatabaseProvider().ToString(),
                            InstallDate    = DateTime.Now,
                            IsUpgrade      = true
                        };

                        this.OnUpgraded(record);

                        LogHelper.Info <CoreMigrationManager>("Merchello Schema Migration completed successfully");
                    }

                    LogHelper.Debug <CoreMigrationManager>("Merchello migration runner returned false.");
                }
                catch (Exception ex)
                {
                    LogHelper.Error <CoreMigrationManager>("Merchello Database Schema Upgrade Failed", ex);
                    throw;
                }
            }
            else
            {
                // this is a new install
                var migrationKey = this.EnsureMigrationKey(schemaResult);

                var record = new MigrationRecord()
                {
                    MigrationKey   = migrationKey,
                    CurrentVersion = MerchelloConfiguration.ConfigurationStatus,
                    TargetVersion  = MerchelloVersion.Current.ToString(),
                    DbProvider     = database.GetDatabaseProvider().ToString(),
                    InstallDate    = DateTime.Now,
                    IsUpgrade      = !MerchelloConfiguration.ConfigurationStatus.Equals("0.0.0")
                };
                this.OnUpgraded(record);
            }

            MerchelloConfiguration.ConfigurationStatus = MerchelloVersion.Current.ToString();

            return(true);
        }
        /// <summary>
        /// Executes the Migration runner.
        /// </summary>
        /// <param name="database">
        /// The database.
        /// </param>
        /// <returns>
        /// A value indicating whether or not the migration was successful.
        /// </returns>
        private bool UpgradeMerchello(Database database)
        {
            var databaseSchemaCreation = new DatabaseSchemaCreation(_database, _logger, new DatabaseSchemaHelper(_database, _logger, _sqlSyntaxProvider), _sqlSyntaxProvider);
            var schemaResult           = databaseSchemaCreation.ValidateSchema();
            var dbVersion = schemaResult.DetermineInstalledVersion();

            var upgraded = false;

            if (dbVersion != MerchelloVersion.Current)
            {
                try
                {
                    _logger.Info <CoreMigrationManager>("Merchello database upgraded required.  Initializing Upgrade.");

                    var resolver = new MigrationResolver(_logger, PluginManager.Current.ResolveMerchelloMigrations());

                    var migrations = resolver.OrderedUpgradeMigrations(
                        MerchelloConfiguration.ConfigurationStatusVersion,
                        MerchelloVersion.Current).ToList();

                    var context = InitializeMigrations(migrations, _database, _database.GetDatabaseProvider());

                    try
                    {
                        ExecuteMigrations(context, _database);

                        upgraded = true;
                    }
                    catch (Exception ex)
                    {
                        _logger.Error <CoreMigrationManager>("Merchello migration failed", ex);
                        upgraded = false;
                    }


                    _logger.Debug <CoreMigrationManager>("Merchello migration runner returned false.");
                }
                catch (Exception ex)
                {
                    _logger.Error <CoreMigrationManager>("Merchello Database Schema Upgrade Failed", ex);
                    throw;
                }
            }

            var currentVersion = dbVersion.ToString();

            if (!upgraded)
            {
                currentVersion = MerchelloConfiguration.ConfigurationStatusVersion.ToString();
            }

            var migrationKey = this.EnsureMigrationKey(schemaResult);

            var record = new MigrationRecord()
            {
                MigrationKey   = migrationKey,
                CurrentVersion = currentVersion,
                TargetVersion  = MerchelloVersion.Current.ToString(),
                DbProvider     = database.GetDatabaseProvider().ToString(),
                InstallDate    = DateTime.Now,
                IsUpgrade      = currentVersion != "0.0.0"
            };

            this.OnUpgraded(record);

            _logger.Info <CoreMigrationManager>("Merchello Schema Migration completed successfully");

            MerchelloConfiguration.ConfigurationStatus = MerchelloVersion.Current.ToString();

            return(true);
        }