示例#1
0
        public void Update_Database_Runs_New_Everytime_Script()
        {
            //arrange
            string scriptsDirectory = Path.Combine("Scripts", GetType().Name.Replace("Tester", ""));

            string scriptFileMd5 = ChangeScriptExecutor.GetFileMD5Hash(Path.Combine(scriptsDirectory, "Everytime", "TestScript.sql"));
            var    settings      = new ConnectionSettings(".\\sqlexpress", "aliasqltest", true, null, null);

            new ConsoleAliaSQL().UpdateDatabase(settings, scriptsDirectory, RequestedDatabaseAction.Drop);

            //act
            bool success = new ConsoleAliaSQL().UpdateDatabase(settings, scriptsDirectory, RequestedDatabaseAction.Update);

            //assert
            int records = 0;

            DatabaseIntegrationHelpers.AssertUsdAppliedDatabaseScriptTable(settings, reader =>
            {
                while (reader.Read())
                {
                    records++;
                    reader["ScriptFile"].ShouldEqual("TestScript.sql");
                    reader["hash"].ShouldEqual(scriptFileMd5);
                }
            });

            success.ShouldEqual(true);
            records.ShouldEqual(1);
        }
        public void CorrectlyExecutesScriptIfItHasntAlreadyBeenExecuted()
        {
            ConnectionSettings settings     = getConnectionSettings();
            string             scriptFile   = @"c:\scripts\Update\01_Test.sql";
            string             fileContents = "file contents...";

            MockRepository          mocks            = new MockRepository();
            IScriptExecutionTracker executionTracker = mocks.CreateMock <IScriptExecutionTracker>();
            IFileSystem             fileSystem       = mocks.CreateMock <IFileSystem>();
            IQueryExecutor          queryExecutor    = mocks.CreateMock <IQueryExecutor>();
            ITaskObserver           taskObserver     = mocks.CreateMock <ITaskObserver>();

            Expect.Call(executionTracker.ScriptAlreadyExecuted(settings, "01_Test.sql")).Return(false);
            taskObserver.Log("Executing: 01_Test.sql");
            Expect.Call(fileSystem.ReadTextFile(scriptFile)).Return(fileContents);
            queryExecutor.ExecuteNonQuery(settings, fileContents, true);
            executionTracker.MarkScriptAsExecuted(settings, "01_Test.sql", taskObserver);

            mocks.ReplayAll();

            IChangeScriptExecutor executor = new ChangeScriptExecutor(executionTracker, queryExecutor, fileSystem);

            executor.Execute(scriptFile, settings, taskObserver);

            mocks.VerifyAll();
        }
示例#3
0
        public void RunsScriptsWithTransactionalStopWordsNonTransactional()
        {
            ConnectionSettings settings     = getConnectionSettings();
            string             scriptFile   = @"c:\scripts\Update\01_Test.sql";
            string             fileContents = "CREATE DATABASE ...";

            MockRepository          mocks            = new MockRepository();
            IScriptExecutionTracker executionTracker = mocks.StrictMock <IScriptExecutionTracker>();
            IFileSystem             fileSystem       = mocks.StrictMock <IFileSystem>();
            IQueryExecutor          queryExecutor    = mocks.StrictMock <IQueryExecutor>();
            ITaskObserver           taskObserver     = mocks.StrictMock <ITaskObserver>();

            Expect.Call(executionTracker.ScriptAlreadyExecuted(settings, "01_Test.sql")).Return(false);
            taskObserver.Log("Executing: 01_Test.sql");
            Expect.Call(fileSystem.ReadTextFile(scriptFile)).Return(fileContents);
            Expect.Call(queryExecutor.ScriptSupportsTransactions(fileContents)).Return(false);
            queryExecutor.ExecuteNonQuery(settings, fileContents, true);
            executionTracker.MarkScriptAsExecuted(settings, "01_Test.sql", taskObserver);

            mocks.ReplayAll();

            IChangeScriptExecutor executor = new ChangeScriptExecutor(executionTracker, queryExecutor, fileSystem);

            executor.Execute(scriptFile, settings, taskObserver);

            mocks.VerifyAll();
        }
        public void CorrectlyLogsWarningWhenScriptHasAlreadyBeenExecuted()
        {
            ConnectionSettings settings   = getConnectionSettings();
            string             scriptFile = @"c:\scripts\Update\01_Test.sql";

            MockRepository          mocks            = new MockRepository();
            IScriptExecutionTracker executionTracker = mocks.CreateMock <IScriptExecutionTracker>();
            ITaskObserver           taskObserver     = mocks.CreateMock <ITaskObserver>();

            Expect.Call(executionTracker.ScriptAlreadyExecuted(settings, "01_Test.sql")).Return(true);
            taskObserver.Log("Skipping (already executed): 01_Test.sql");

            mocks.ReplayAll();

            IChangeScriptExecutor executor = new ChangeScriptExecutor(executionTracker, null, null);

            executor.Execute(scriptFile, settings, taskObserver);

            mocks.VerifyAll();
        }
示例#5
0
        public void DoesNotExecuteScriptsInBaseLineMode()
        {
            ConnectionSettings settings   = getConnectionSettings();
            string             scriptFile = @"c:\scripts\Update\01_Test.sql";

            MockRepository          mocks            = new MockRepository();
            IScriptExecutionTracker executionTracker = mocks.StrictMock <IScriptExecutionTracker>();
            ITaskObserver           taskObserver     = mocks.StrictMock <ITaskObserver>();

            DoNotExpect.Call(executionTracker.ScriptAlreadyExecuted(settings, "01_Test.sql"));
            taskObserver.Log("Skipping (already executed): 01_Test.sql");

            mocks.ReplayAll();

            IChangeScriptExecutor executor = new ChangeScriptExecutor(executionTracker, null, null);

            executor.Execute(scriptFile, settings, taskObserver);

            mocks.VerifyAll();
        }