public void FileSystemScriptProvider_SuccessfullyStoresDowngradeScripts() { var upgradeScriptProvider = new FileSystemScriptProvider("FileSystemScripts\\Up", new FileSystemScriptOptions() { IncludeSubDirectories = true }); var downgradeScriptProvider = new FileSystemScriptProvider("FileSystemScripts\\Down", new FileSystemScriptOptions() { IncludeSubDirectories = true }); 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))); } }
/// <summary> /// </summary> /// <param name="directoryPath">Path to SQL upgrade scripts</param> /// <param name="options">Different options for the file system script provider</param> /// <param name="sqlScriptOptions">The sql script options</param> public CustomFileSystemScriptProvider(string directoryPath, CustomFileSystemScriptOptions options, SqlScriptOptions sqlScriptOptions) { this.options = options ?? throw new ArgumentNullException(nameof(options)); if (sqlScriptOptions == null) { throw new ArgumentNullException(nameof(sqlScriptOptions)); } this.directoryPath = directoryPath ?? throw new ArgumentNullException(nameof(directoryPath)); scriptProvider = new FileSystemScriptProvider(directoryPath, options, sqlScriptOptions); }