public void ThatNoScriptsDoesntFail()
        {
            var databaseServiceMock        = new Mock <IDatabaseService>(MockBehavior.Strict);
            var configurationServiceMock   = new Mock <IConfigurationService>(MockBehavior.Strict);
            var scriptServiceMock          = new Mock <IScriptService>(MockBehavior.Strict);
            var fileServiceMock            = new Mock <IFileService>(MockBehavior.Strict);
            var scriptMessageFormatterMock = new Mock <IScriptMessageFormatter>(MockBehavior.Strict);

            IDictionary <int, IScriptFile> availableScripts = new Dictionary <int, IScriptFile>();
            IDictionary <int, IChangeLog>  changeLogs       = new Dictionary <int, IChangeLog>();

            string changeScript = "Change Script";

            // FileService Setup
            fileServiceMock.Setup(file => file.CleanupPastRuns()).Verifiable();
            fileServiceMock.Setup(file => file.GetScriptFiles()).Returns(availableScripts).Verifiable();
            fileServiceMock.Setup(file => file.WriteChangeScript(It.Is <string>(s => s == changeScript))).Verifiable();
            fileServiceMock.Setup(file => file.WriteScriptList(It.IsAny <Dictionary <int, IScriptFile> >())).Verifiable();

            // Database Service Setup
            databaseServiceMock.Setup(db => db.GetAppliedChanges()).Returns(changeLogs).Verifiable();

            // Configuration Service Setup
            configurationServiceMock.Setup(config => config.LastChangeToApply).Returns(1000).Verifiable();
            configurationServiceMock.Setup(config => config.OutputFile).Returns("File Location").Verifiable();
            configurationServiceMock.Setup(config => config.ScriptListFile).Returns("ScriptListFileLocation").Verifiable();
            configurationServiceMock.Setup(config => config.RootDirectory).Returns("Root Directory").Verifiable();

            // Script Formatter setup
            scriptMessageFormatterMock.Setup(fm => fm.FormatCollection(It.IsAny <ICollection <int> >())).Returns("String Formatted.").Verifiable();

            // Script Service Setup
            scriptServiceMock.Setup(script => script.BuildChangeScript(It.IsAny <IDictionary <int, IScriptFile> >())).Returns(changeScript).Verifiable();

            DeploymentService deploymentService = new DeploymentService(databaseServiceMock.Object, configurationServiceMock.Object, scriptServiceMock.Object, fileServiceMock.Object, scriptMessageFormatterMock.Object);

            deploymentService.BuildDeploymentScript();

            // File Verifies
            fileServiceMock.Verify(file => file.CleanupPastRuns(), Times.Exactly(1));
            fileServiceMock.Verify(file => file.GetScriptFiles(), Times.Exactly(1));
            fileServiceMock.Verify(file => file.WriteChangeScript(It.Is <string>(s => s == changeScript)), Times.Never());
            fileServiceMock.Verify(file => file.WriteScriptList(It.IsAny <Dictionary <int, IScriptFile> >()), Times.Never());

            // Database Verifies
            databaseServiceMock.Verify(db => db.GetAppliedChanges(), Times.Exactly(0));

            // Configuration Service Verifies
            configurationServiceMock.Verify(config => config.LastChangeToApply, Times.Never());
            configurationServiceMock.Verify(config => config.OutputFile, Times.Never());
            configurationServiceMock.Verify(config => config.ScriptListFile, Times.Never());
            configurationServiceMock.Verify(config => config.RootDirectory, Times.AtLeastOnce());

            // Script Formamter Verifies.
            scriptMessageFormatterMock.Verify(fm => fm.FormatCollection(It.IsAny <ICollection <int> >()), Times.Never());

            // Script Service Verifies
            scriptServiceMock.Verify(script => script.BuildChangeScript(It.IsAny <IDictionary <int, IScriptFile> >()), Times.Never());
        }
        public void ThatLastChangesToApplyDetected()
        {
            var databaseServiceMock        = new Mock <IDatabaseService>(MockBehavior.Strict);
            var configurationServiceMock   = new Mock <IConfigurationService>(MockBehavior.Strict);
            var scriptServiceMock          = new Mock <IScriptService>(MockBehavior.Strict);
            var fileServiceMock            = new Mock <IFileService>(MockBehavior.Strict);
            var scriptMessageFormatterMock = new Mock <IScriptMessageFormatter>(MockBehavior.Strict);

            IDictionary <int, IScriptFile> availableScripts = this.GetScripts();
            IDictionary <int, IChangeLog>  changeLogs       = this.GetChangeLogs();

            string changeScript = "Change Script";

            // FileService Setup
            fileServiceMock.Setup(file => file.CleanupPastRuns()).Verifiable();
            fileServiceMock.Setup(file => file.GetScriptFiles()).Returns(availableScripts).Verifiable();
            fileServiceMock.Setup(file => file.WriteChangeScript(It.Is <string>(s => s == changeScript))).Verifiable();
            fileServiceMock.Setup(file => file.WriteUndoScript(It.Is <string>(s => s == changeScript))).Verifiable();
            fileServiceMock.Setup(file => file.WriteScriptList(It.IsAny <Dictionary <int, IScriptFile> >())).Verifiable();

            // Database Service Setup
            databaseServiceMock.Setup(db => db.GetAppliedChanges()).Returns(changeLogs).Verifiable();

            // Configuration Service Setup
            configurationServiceMock.Setup(config => config.LastChangeToApply).Returns(7).Verifiable();
            configurationServiceMock.Setup(config => config.OutputFile).Returns("File Location").Verifiable();
            configurationServiceMock.Setup(config => config.UndoOutputFile).Returns("File Location").Verifiable();
            configurationServiceMock.Setup(config => config.ScriptListFile).Returns("ScriptListFileLocation").Verifiable();

            // Script Formatter setup
            scriptMessageFormatterMock.Setup(fm => fm.FormatCollection(It.IsAny <ICollection <int> >())).Returns("String Formatted.").Verifiable();

            // Script Service Setup
            int passedCount = 0;

            scriptServiceMock.Setup(script => script.BuildChangeScript(It.IsAny <IDictionary <int, IScriptFile> >())).Callback <IDictionary <int, IScriptFile> >((files => passedCount = files.Count)).Returns(changeScript).Verifiable();
            scriptServiceMock.Setup(script => script.BuildUndoScript(It.IsAny <IDictionary <int, IScriptFile> >())).Callback <IDictionary <int, IScriptFile> >((files => passedCount = files.Count)).Returns(changeScript).Verifiable();

            DeploymentService deploymentService = new DeploymentService(databaseServiceMock.Object, configurationServiceMock.Object, scriptServiceMock.Object, fileServiceMock.Object, scriptMessageFormatterMock.Object);

            deploymentService.BuildDeploymentScript();

            // File Verifies
            fileServiceMock.Verify(file => file.CleanupPastRuns(), Times.Exactly(1));
            fileServiceMock.Verify(file => file.GetScriptFiles(), Times.Exactly(1));
            fileServiceMock.Verify(file => file.WriteChangeScript(It.Is <string>(s => s == changeScript)), Times.Exactly(1));
            fileServiceMock.Verify(file => file.WriteScriptList(It.IsAny <Dictionary <int, IScriptFile> >()), Times.Exactly(1));

            // Database Verifies
            databaseServiceMock.Verify(db => db.GetAppliedChanges(), Times.Exactly(1));

            // Configuration Service Verifies
            configurationServiceMock.Verify(config => config.LastChangeToApply, Times.AtLeastOnce());
            configurationServiceMock.Verify(config => config.OutputFile, Times.AtLeastOnce());
            configurationServiceMock.Verify(config => config.UndoOutputFile, Times.AtLeastOnce());
            configurationServiceMock.Verify(config => config.ScriptListFile, Times.AtLeastOnce());

            // Script Formamter Verifies.
            scriptMessageFormatterMock.Verify(fm => fm.FormatCollection(It.IsAny <ICollection <int> >()), Times.AtLeastOnce());

            // Script Service Verifies
            scriptServiceMock.Verify(script => script.BuildChangeScript(It.IsAny <IDictionary <int, IScriptFile> >()), Times.Exactly(1));
            scriptServiceMock.Verify(script => script.BuildUndoScript(It.IsAny <IDictionary <int, IScriptFile> >()), Times.Exactly(1));
            Assert.That(passedCount, Is.EqualTo(2));
        }
Exemplo n.º 3
0
        public void ThatBuildScriptDeploymentWorks()
        {
            Mock <IDatabaseService>        databaseServiceMock        = new Mock <IDatabaseService>(MockBehavior.Strict);
            Mock <IConfigurationService>   configurationServiceMock   = new Mock <IConfigurationService>(MockBehavior.Strict);
            Mock <IScriptService>          scriptServiceMock          = new Mock <IScriptService>(MockBehavior.Strict);
            Mock <IFileService>            fileServiceMock            = new Mock <IFileService>(MockBehavior.Strict);
            Mock <IScriptMessageFormatter> scriptMessageFormatterMock =
                new Mock <IScriptMessageFormatter>(MockBehavior.Strict);

            IDictionary <decimal, IScriptFile> availableScripts = this.GetScripts();
            IDictionary <decimal, IChangeLog>  changeLogs       = this.GetChangeLogs();

            string changeScript = "Change Script";

            // FileService Setup
            fileServiceMock.Setup(file => file.CleanupPastRuns()).Verifiable();
            fileServiceMock.Setup(file => file.GetScriptFiles()).Returns(availableScripts).Verifiable();
            fileServiceMock.Setup(file => file.WriteChangeScript(It.Is <string>(s => s == changeScript))).Verifiable();
            fileServiceMock.Setup(file => file.WriteUndoScript(It.Is <string>(s => s == changeScript))).Verifiable();
            fileServiceMock.Setup(file => file.WriteScriptList(It.IsAny <Dictionary <decimal, IScriptFile> >()))
            .Verifiable();

            // Database Service Setup
            databaseServiceMock.Setup(db => db.GetAppliedChanges()).Returns(changeLogs).Verifiable();

            // Configuration Service Setup
            configurationServiceMock.Setup(config => config.LastChangeToApply).Returns(1000).Verifiable();
            configurationServiceMock.Setup(config => config.OutputFile).Returns("File Location").Verifiable();
            configurationServiceMock.Setup(config => config.UndoOutputFile).Returns("File Location").Verifiable();
            configurationServiceMock.Setup(config => config.ScriptListFile)
            .Returns("ScriptListFileLocation")
            .Verifiable();

            // Script Formatter setup
            scriptMessageFormatterMock.Setup(fm => fm.FormatCollection(It.IsAny <ICollection <decimal> >()))
            .Returns("String Formatted.")
            .Verifiable();

            // Script Service Setup
            scriptServiceMock.Setup(script => script.BuildChangeScript(It.IsAny <IDictionary <decimal, IScriptFile> >()))
            .Returns(changeScript)
            .Verifiable();
            scriptServiceMock.Setup(script => script.BuildUndoScript(It.IsAny <IDictionary <decimal, IScriptFile> >()))
            .Returns(changeScript)
            .Verifiable();

            configurationServiceMock.Setup(c => c.DatabaseService).Returns(databaseServiceMock.Object);

            DeploymentService deploymentService = new DeploymentService(
                configurationServiceMock.Object,
                scriptServiceMock.Object,
                fileServiceMock.Object,
                scriptMessageFormatterMock.Object);

            deploymentService.BuildDeploymentScript();

            // File Verifies
            fileServiceMock.Verify(file => file.CleanupPastRuns(), Times.Exactly(1));
            fileServiceMock.Verify(file => file.GetScriptFiles(), Times.Exactly(1));
            fileServiceMock.Verify(
                file => file.WriteChangeScript(It.Is <string>(s => s == changeScript)),
                Times.Exactly(1));
            fileServiceMock.Verify(
                file => file.WriteUndoScript(It.Is <string>(s => s == changeScript)),
                Times.Exactly(1));
            fileServiceMock.Verify(
                file => file.WriteScriptList(It.IsAny <Dictionary <decimal, IScriptFile> >()),
                Times.Exactly(1));

            // Database Verifies
            databaseServiceMock.Verify(db => db.GetAppliedChanges(), Times.Exactly(1));

            // Configuration Service Verifies
            configurationServiceMock.Verify(config => config.LastChangeToApply, Times.AtLeastOnce());
            configurationServiceMock.Verify(config => config.OutputFile, Times.AtLeastOnce());
            configurationServiceMock.Verify(config => config.UndoOutputFile, Times.AtLeastOnce());
            configurationServiceMock.Verify(config => config.ScriptListFile, Times.AtLeastOnce());

            // Script Formamter Verifies.
            scriptMessageFormatterMock.Verify(
                fm => fm.FormatCollection(It.IsAny <ICollection <decimal> >()),
                Times.AtLeastOnce());

            // Script Service Verifies
            scriptServiceMock.Verify(
                script => script.BuildChangeScript(It.IsAny <IDictionary <decimal, IScriptFile> >()),
                Times.Exactly(1));
            scriptServiceMock.Verify(
                script => script.BuildUndoScript(It.IsAny <IDictionary <decimal, IScriptFile> >()),
                Times.Exactly(1));
        }