Пример #1
0
        public void TriggerDeleteDontDisableTest()
        {
            string[] script1  = { CreateTestTable1, CreateDeleteTriggerOnTable1, CreateInsertTriggerOnTable1, CreateUpdateTriggerOnTable1 };
            string[] script2  = { CreateTestTable1, InsertTestTable1_one, CreateDeleteTriggerOnTable1, CreateInsertTriggerOnTable1, CreateUpdateTriggerOnTable1 };
            string   expected =
                @"PRINT 'Deleting 1 row(s) from [dbo].[TestTable1].';
GO
DELETE FROM [dbo].[TestTable1] WHERE [ID] = 1;
GO
";
            var options = new DataUpgradeOptions {
                DisableTriggers = false
            };

            ExecuteTest(script1, script2, expected, options: options);
        }
Пример #2
0
        public void TriggerInsertDontDisableTest()
        {
            string[] script1  = { CreateTestTable1, InsertTestTable1_one, CreateDeleteTriggerOnTable1, CreateInsertTriggerOnTable1, CreateUpdateTriggerOnTable1 };
            string[] script2  = { CreateTestTable1, CreateDeleteTriggerOnTable1, CreateInsertTriggerOnTable1, CreateUpdateTriggerOnTable1 };
            string   expected =
                @"PRINT 'Inserting 1 row(s) into [dbo].[TestTable1].';
GO
INSERT INTO [dbo].[TestTable1] ([ID], [Value])
VALUES (1, 'one');
GO
";
            var options = new DataUpgradeOptions {
                DisableTriggers = false
            };

            ExecuteTest(script1, script2, expected, options: options);
        }
Пример #3
0
        public void TriggerUpdateDontDisableTest()
        {
            string[] script1  = { CreateTestTable1, InsertTestTable1_one, CreateDeleteTriggerOnTable1, CreateInsertTriggerOnTable1, CreateUpdateTriggerOnTable1 };
            string[] script2  = { CreateTestTable1, InsertTestTable1_uno, CreateDeleteTriggerOnTable1, CreateInsertTriggerOnTable1, CreateUpdateTriggerOnTable1 };
            string   expected =
                @"PRINT 'Updating 1 row(s) in [dbo].[TestTable1].';
GO
UPDATE [dbo].[TestTable1]
SET [Value] = 'one'
WHERE [ID] = 1;
GO
";
            var options = new DataUpgradeOptions {
                DisableTriggers = false
            };

            ExecuteTest(script1, script2, expected, options: options);
        }
Пример #4
0
        private string ExecuteTest
        (
            IEnumerable <String> sourceScript,
            IEnumerable <String> targetScript,
            string expectedScript      = null,
            bool expectedResult        = true,
            DataUpgradeOptions options = null
        )
        {
            try
            {
                // Create the source database.
                DropAndCreateDatabase(SourceDatabaseName, sourceScript);
            }
            catch (Exception ex)
            {
                throw new Exception("Source database initialization failed.", ex);
            }

            try
            {
                // Create the target database.
                DropAndCreateDatabase(TargetDatabaseName, targetScript);
            }
            catch (Exception ex)
            {
                throw new Exception("Target database initialization failed.", ex);
            }

            var    target = GetDataUpgradeScripter();
            bool   actualResult;
            string actualScript;

            using (StringWriter writer = new StringWriter())
            {
                // Call GenerateScript and verify the result and writer output are as expected.
                actualResult = target.GenerateScript(writer, options);
                Assert.AreEqual(expectedResult, actualResult, "GenerateScript() return value not as expected (it should be false when there are no data changes; otherwise, true).");
                actualScript = writer.ToString();
                // If expectedScript is null, then the test did not require us to
                // verify the expected script is an exact string match.
                // Write it out to the output so it can be viewed.
                if (expectedScript == null)
                {
                    Console.WriteLine("\r\n\r\n--------------\r\nActual Script:\r\n--------------");
                    Console.WriteLine(actualScript);
                }
                else
                {
                    // We don't require the test to include the SET ANSI_NULLS... boilerplate in the expected script.
                    // Remove it from the actual.
                    if
                    (
                        !expectedScript.StartsWith("SET ANSI_NULLS") &&
                        actualScript.StartsWith("SET ANSI_NULLS") &&
                        actualScript.Contains("GO\r\n")
                    )
                    {
                        actualScript = actualScript.Substring(actualScript.IndexOf("GO\r\n") + 4);
                    }
                    Assert.AreEqual(expectedScript, actualScript, "GenerateScript() output script not as expected.");
                }
            }

            // If there is script to run, then run it to verify works properly.
            if (actualResult && actualScript != null)
            {
                try
                {
                    // Execute the script to ensure there are no errors in it.
                    Execute(actualScript.Split(new[] { "\r\nGO\r\n" }, StringSplitOptions.RemoveEmptyEntries));
                }
                catch (Exception ex)
                {
                    throw new Exception("The generated script failed to execute properly.", ex);
                }
                using (StringWriter writer = new StringWriter())
                {
                    // Call GenerateScript and verify that the upgrade script succeeded in synchronizing all the changes.
                    bool   syncResult           = target.GenerateScript(writer);
                    string unsynchronizedScript = writer.ToString();
                    Assert.AreEqual(String.Empty, unsynchronizedScript, "The generated script failed to synchronize all changes. The 'actual' value shows the script of what is not in sync.");
                    Assert.IsFalse(syncResult, "The generated script failed to synchronize all changes.");
                }
            }

            return(actualScript);
        }