public void ShouldReturnTheFirstSequence()
        {
            //Act
            var options = new StartupTasksOptions();
            var result  = options.Sequence;

            //Assert
            Assert.AreSame(options.Groups[0].Sequence, result);
        }
        public void ShouldCreateANewStartupTasksOptions()
        {
            //Act
            var result = new StartupTasksOptions();

            //Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(StartupTasksOptions));
        }
        public void ShouldReturnAnEmptySequence()
        {
            //Act
            var options = new StartupTasksOptions();
            var result  = options.Sequence;

            //Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(List <TaskExecutionParameters>));
        }
        public void ShouldNotAddANewSequenceIfTheFirstSequenceIsEmptyUsingWithGroup()
        {
            //Arrange
            var options = new StartupTasksOptions();

            //Act
            options.WithGroup(s => null);
            var result = options.Groups;

            //Assert
            Assert.AreEqual(1, result.Count);
        }
        public void ShouldAddANewSequenceUsingWithGroup()
        {
            //Arrange
            var options = new StartupTasksOptions();

            //Act
            options.UsingThisExecutionOrder(s => s.First <TaskAlpha>())
            .WithGroup(s => s.First <TaskBeta>());
            var result = options.Groups;

            //Assert
            Assert.AreEqual(2, result.Count);
        }
        public void ShouldReturnAListOfSequenceWithOneSequence()
        {
            //Act
            var options = new StartupTasksOptions();
            var result  = options.Groups;

            //Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(List <ISequenceSpecification>));
            Assert.AreEqual(1, result.Count);
            Assert.IsNotNull(result[0]);
            Assert.IsInstanceOfType(result[0], typeof(SequenceSpecification));
        }
        public void ShouldReturnASequenceSpecification()
        {
            //Act
            var options = new StartupTasksOptions();

            options.UsingThisExecutionOrder(s => s.First <TaskAlpha>().Then <TaskBeta>());
            var result = options.Sequence;

            //Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(List <TaskExecutionParameters>));
            Assert.AreEqual(typeof(TaskAlpha), result[0].TaskType);
            Assert.AreEqual(typeof(TaskBeta), result[1].TaskType);
        }
        public void ShouldReturnTheLastSequenceUsingAndGroup()
        {
            //Arrange
            var options = new StartupTasksOptions();

            options.WithGroup(s => s.First <TaskAlpha>())
            .AndGroup(s => s.First <TaskBeta>());

            //Act
            var result = options.Sequence;

            //Assert
            Assert.AreEqual(options.Groups[1].Sequence, result);
        }
        public void ShouldReturnAStartupTaskOptionsUsingAndGroup()
        {
            //Arrange
            var options = new StartupTasksOptions();

            options.WithGroup(s => s.First <TaskAlpha>());

            //Act
            var result = options.AndGroup(s => s.First <TaskBeta>());

            //Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(StartupTasksOptions));
            Assert.AreSame(options, result);
        }
        public void ShouldSpecifySequenceForGroups()
        {
            //Act
            var options = new StartupTasksOptions();

            options.WithGroup(s => s.First <TaskAlpha>().Then <TaskBeta>())
            .AndGroup(s => s.First <TaskGamma>().Then().TheRest());
            var result = options.Groups;

            //Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result[0], typeof(ISequenceSpecification));
            Assert.IsInstanceOfType(result[0], typeof(SequenceSpecification));
            Assert.AreEqual(typeof(TaskAlpha), result[0].Sequence[0].TaskType);
            Assert.AreEqual(typeof(TaskBeta), result[0].Sequence[1].TaskType);
            Assert.IsInstanceOfType(result[1], typeof(ISequenceSpecification));
            Assert.IsInstanceOfType(result[1], typeof(SequenceSpecification));
            Assert.AreEqual(typeof(TaskGamma), result[1].Sequence[0].TaskType);
            Assert.AreEqual(typeof(IStartupTask), result[1].Sequence[1].TaskType);
        }