Example #1
0
        public void StaticScriptProvider_SuccessfullyStoresDowngradeScripts()
        {
            var upgradeScriptProvider = new StaticScriptProvider(new List <SqlScript>()
            {
                new SqlScript("NameOfYourScript", @"CREATE TABLE [dbo].[Values](
                     [Id] [int] NOT NULL,
                     [Value1] [int] NOT NULL,
                     [Value2] [int] NULL,
                     CONSTRAINT [PK_Values] PRIMARY KEY CLUSTERED 
                    (
                     [Id] ASC
                    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
                    ) ON [PRIMARY]")
            });

            var downgradeScriptProvider = new StaticScriptProvider(new List <SqlScript>()
            {
                new SqlScript("NameOfYourScript", "DROP TABLE [dbo].[Values]")
            });

            var upgradeEngineBuilder = DeployChanges.To
                                       .SqlDatabase(connectionString)
                                       .WithScripts(upgradeScriptProvider)
                                       .WithDowngradeTableProvider <SqlDowngradeEnabledTableJournal>(downgradeScriptProvider, new DefaultDowngradeScriptFinder())
                                       .LogToNowhere();

            var result = upgradeEngineBuilder.BuildWithDowngrade(true).PerformUpgrade();

            //Assert
            Assert.AreEqual(true, result.Successful);

            Dictionary <string, string> executedScriptsAndDowngradeScripts = GetExecutedScriptsFromDatabase(connectionString);
            var upgradeScripts   = upgradeScriptProvider.GetScripts(null);
            var downgradeScripts = downgradeScriptProvider.GetScripts(null);

            Assert.AreEqual(executedScriptsAndDowngradeScripts.Count, upgradeScripts.Count());

            foreach (var storedDowngradeScript in executedScriptsAndDowngradeScripts.Values.Where(v => !string.IsNullOrEmpty(v)))
            {
                Assert.IsTrue(downgradeScripts.Any(script => script.Contents.Equals(storedDowngradeScript)));
            }
        }