Example #1
0
        public void ShouldCreateTasksWithCorrectExecutionOrder()
        {
            // Arrange
            ManifestReader reader = this.CreateManifestReader();

            Mock <IDatabaseTaskFactory> factory = new Mock <IDatabaseTaskFactory>();
            Mock <IDatabaseTask>        task    = new Mock <IDatabaseTask>();

            factory.Setup(f => f.CanCreate(It.IsAny <XElement>())).Returns(true);
            factory.Setup(f => f.Create(It.IsAny <XElement>(), It.IsAny <int>(), It.IsAny <IDatabaseVersion>())).Returns(task.Object);

            reader.Factories = new[] { factory.Object };

            // Act
            IDatabaseVersion version = reader.Read(GetManifest(), ManifestPath, this.databaseArchive.Object);

            // Assert
            int expectedOrder = 0;

            foreach (IDatabaseTask createdTask in version.Tasks)
            {
                factory.Verify(f => f.Create(It.IsAny <XElement>(), expectedOrder, It.IsAny <IDatabaseVersion>()));
                expectedOrder++;
            }
        }
Example #2
0
        public ScriptTask(string fileName, int executionOrder, IDatabaseVersion version, IMessageService messageService, IPropertyService propertyService)
            : base(fileName, executionOrder, messageService)
        {
            this.version         = version;
            this.propertyService = propertyService;

            this.StringSplitRegex = GetStringSplitRegex();
        }
Example #3
0
        public void ShouldSetManifestPath()
        {
            // Arrange
            ManifestReader reader = this.CreateManifestReader();

            // Act
            IDatabaseVersion version = reader.Read(GetManifest(), ManifestPath, databaseArchive.Object);

            // Assert
            Assert.Equal(ManifestPath, version.ManifestPath);
        }
Example #4
0
        private IDatabaseTask CreateTask(XElement element, IDatabaseVersion version)
        {
            if (this.Factories != null)
            {
                IDatabaseTaskFactory factory = this.Factories.FirstOrDefault(f => f.CanCreate(element));
                if (factory != null)
                {
                    return(factory.Create(element, element.ElementsBeforeSelf().Count(), version));
                }
            }

            return(null);
        }
Example #5
0
        public void ShouldUseProviderToCreateVersion()
        {
            // Arrange
            ManifestReader reader         = this.CreateManifestReader();
            NumericVersion numericVersion = new NumericVersion(14);

            versionProvider.Setup(v => v.CreateVersion("14")).Returns(numericVersion);

            // Act
            IDatabaseVersion version = reader.Read(GetManifest(), ManifestPath, databaseArchive.Object);

            // Assert
            Assert.Equal(numericVersion, version.Version);
        }
Example #6
0
        /// <summary>
        /// Checks whether the specified version has been fully installed.
        /// </summary>
        /// <param name="session">The hibernate session.</param>
        /// <param name="version">The version to check.</param>
        /// <returns>true if the version exists and all its tasks have been installed, otherwise false.</returns>
        private bool CheckVersion(ISession session, IDatabaseVersion version)
        {
            var installedVersion = this.VersionProvider.GetVersion(session, version.Version);

            if (installedVersion == null)
            {
                this.MessageService.WriteLine(string.Format("Version {0} has not been installed.",
                                                            version.Version.VersionText));

                return(false);
            }

            return(CheckTasks(version, installedVersion));
        }
Example #7
0
        public void ShouldUseTaskFactoryToCreateTasks()
        {
            // Arrange
            ManifestReader reader = this.CreateManifestReader();

            Mock <IDatabaseTaskFactory> factory = new Mock <IDatabaseTaskFactory>();
            Mock <IDatabaseTask>        task    = new Mock <IDatabaseTask>();

            factory.Setup(f => f.CanCreate(It.Is <XElement>(r => r.Name == "script"))).Returns(true);
            factory.Setup(f => f.Create(It.Is <XElement>(r => r.Name == "script"), 0, It.IsAny <IDatabaseVersion>())).Returns(task.Object);

            reader.Factories = new[] { factory.Object };

            // Act
            IDatabaseVersion version = reader.Read(GetManifest(OneTaskManifestPath), OneTaskManifestPath, this.databaseArchive.Object);

            // Assert
            Assert.Same(task.Object, version.Tasks.Single());
        }
Example #8
0
        /// <summary>
        /// Checks whether all the tasks in the specified version have been run.
        /// </summary>
        /// <param name="version">The database version.</param>
        /// <param name="installedVersion">The current installed version.</param>
        /// <returns>true if all the tasks have been installed, otherwise false.</returns>
        private bool CheckTasks(IDatabaseVersion version, VersionBase installedVersion)
        {
            bool hasOutputVersion  = false;
            bool allTasksInstalled = true;

            foreach (var task in version.Tasks)
            {
                if (!this.VersionProvider.HasExecutedScript(installedVersion, version.Version, task))
                {
                    if (!hasOutputVersion)
                    {
                        this.MessageService.WriteLine(string.Format("Version {0} missing:", version.Version.VersionText));
                        hasOutputVersion = true;
                    }

                    this.MessageService.WriteLine("  " + task.FileName);
                    allTasksInstalled = false;
                }
            }

            return(allTasksInstalled);
        }
 public IDatabaseTask Create(XElement element, int executionOrder, IDatabaseVersion version)
 {
     return(new ScriptTask(element.Attribute(XName.Get("file")).Value, executionOrder, version, this.MessageService, this.PropertyService));
 }
Example #10
0
        /// <summary>
        /// compares this IDbVersion to another
        /// </summary>
        /// <param name="other"></param>
        /// <returns></returns>
        public int CompareTo(IDatabaseVersion other)
        {
            Version otherVersion = new Version(other.VersionString);

            int comparisonResult = this._underlyingVersion.CompareTo(otherVersion);
            return comparisonResult;
        }
Example #11
0
 private IEnumerable <IDatabaseTask> CreateTasks(XElement element, IDatabaseVersion version)
 {
     return(element.Elements()
            .Select(e => this.CreateTask(e, version))
            .OfType <IDatabaseTask>()); // Use to remove nulls
 }