public void CreatingScheduledJobSucceeds()
        {
            // Arrange
            var job = new ScheduledJob()
            {
                Crontab = "* * * * *"
            };

            // Act
            var sut = new ScheduledJobScheduler(job);

            // Assert
            Assert.IsTrue(sut.IsValid());
        }
        public void GetNextScheduleForFiveStarsReturnsCurrentMinute()
        {
            // Arrange
            var scheduledJob = new ScheduledJob()
            {
                Crontab = "* * * * *"
            };

            var sut = new ScheduledJobScheduler(scheduledJob);

            var now = DateTimeOffset.Now;
            // Act
            var result = sut.GetNextSchedule(now);

            // Assert
            Assert.AreEqual(now.Minute, result.Minute);
        }
        public void IsScheduledToRunForFiveStarsReturnsTrue()
        {
            // Arrange
            var scheduledJob = new ScheduledJob()
            {
                Crontab = "* * * * *"
            };

            var sut = new ScheduledJobScheduler(scheduledJob);

            var now = DateTimeOffset.Now;
            
            // Act
            var result = sut.IsScheduledToRun(now);

            // Assert
            Assert.IsTrue(result);
        }
        public void GetNextScheduleForFiveStarsReturnsMinValue()
        {
            // Arrange
            var scheduledJob = new ScheduledJob()
            {
                Crontab = "*/5 * * * *"
            };

            var sut = new ScheduledJobScheduler(scheduledJob);

            var now = new DateTimeOffset(2000, 08, 15, 05, 42, 13, TimeSpan.FromHours(0));

            // Act
            var result = sut.GetNextSchedule(now);

            // Assert
            Assert.AreEqual(DateTimeOffset.MinValue, result);
        }
        public ScheduledJobScheduler(ScheduledJob scheduledJob)
        {
            Contract.Requires(null != scheduledJob);

            job = scheduledJob;
        }
        public void IsScheduledToRunSucceeds7()
        {
            var now = new DateTimeOffset(2016, 11, 15, 19, 29, 59, 999, DateTimeOffset.Now.Offset);
            now = new DateTimeOffset(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0, 1, now.Offset);

            var job = new ScheduledJob()
            {
                Crontab = "0 0 0 12 1 ? 2017"
            };
            var sut = new ScheduledJobScheduler(job);

            // Act
            Assert.IsFalse(sut.IsCrontabExpression());
            Assert.IsTrue(sut.IsQuartzExpression());

            var result = sut.IsScheduledToRun(now);

            // Assert
            Assert.IsFalse(result);
        }
        public void GetNextScheduleFromQuartzExpressionThatIsWithinThisMinuteSucceeds4()
        {
            var withinThisMinute = new DateTimeOffset(2016, 11, 14, 14, 7, 0, 0, DateTimeOffset.Now.Offset);
            var expected = new DateTimeOffset(2016, 11, 14, 14, 7, 0, 0, withinThisMinute.Offset);
            
            var job = new ScheduledJob()
            {
                Crontab = "0 07 14 1/1 * ? *"
            };
            var sut = new ScheduledJobScheduler(job);

            // Act
            var result = sut.GetNextScheduleFromQuartzExpression(withinThisMinute);

            // Assert
            Assert.AreEqual(expected, result);
        }
        public void GetNextScheduleFromQuartzExpressionThatIsNotWithinThisMinuteSucceeds1()
        {
            var withinThisMinute = new DateTimeOffset(2016, 11, 14, 8, 17, 35, 123, DateTimeOffset.Now.Offset);
            
            var job = new ScheduledJob()
            {
                Crontab = "0 0 0 ? 1/1 5#3"
            };
            var sut = new ScheduledJobScheduler(job);

            // Act
            var result = sut.GetNextScheduleFromQuartzExpression(withinThisMinute);

            // Assert
            Assert.AreEqual(DateTimeOffset.MinValue, result);
        }
        public void GetNextScheduleFromQuartzExpressionSucceeds()
        {
            // Arrange
            var withinThisMinute = DateTimeOffset.Now;
            var expected = withinThisMinute;
            expected = expected.AddSeconds(-1 * expected.Second);
            expected = expected.AddMilliseconds(-1 * expected.Millisecond);
            
            var job = new ScheduledJob()
            {
                Crontab = "0 0/1 * 1/1 * ? *"
            };
            var sut = new ScheduledJobScheduler(job);

            // Act
            var result = sut.GetNextScheduleFromQuartzExpression(withinThisMinute);

            // Assert
            Assert.AreNotEqual(DateTimeOffset.MinValue, result);
            Assert.IsTrue(Math.Floor(Math.Abs((expected - result).TotalMilliseconds)).Equals(0));
        }
        public void IsValidQuartzExpressionWithValidQuartzExpressionReturnsTrue()
        {
            // Arrange
            var job = new ScheduledJob()
            {
                Crontab = "0 0/1 * 1/1 * ? *"
            };
            var sut = new ScheduledJobScheduler(job);

            // Act
            var result = sut.IsQuartzExpression();

            // Assert
            Assert.IsTrue(result);
        }
        public void IsValidQuartzExpressionWithInvalidExpressionReturnsFalse()
        {
            // Arrange
            var job = new ScheduledJob()
            {
                Crontab = "* 18 * **"
            };
            var sut = new ScheduledJobScheduler(job);

            // Act
            var result = sut.IsQuartzExpression();

            // Assert
            Assert.IsFalse(result);
        }
        public void IsValidCrontabExpressionWithValidExpressionReturnsTrue()
        {
            // Arrange
            var job = new ScheduledJob()
            {
                Crontab = "* 18 * * *"
            };
            var sut = new ScheduledJobScheduler(job);

            // Act
            var result = sut.IsCrontabExpression();

            // Assert
            Assert.IsTrue(result);
        }
        public void GetNextScheduleForFiveOnesReturnsMinValue()
        {
            // Arrange
            var scheduledJob = new ScheduledJob()
            {
                Crontab = "1 1 1 1 1"
            };

            var sut = new ScheduledJobScheduler(scheduledJob);

            var now = DateTimeOffset.Now;
            
            // Act
            var result = sut.GetNextSchedule(now);

            // Assert
            Assert.AreEqual(DateTimeOffset.MinValue, result);
        }
        public List<ScheduledJob> GetJobs()
        {
            var scheduledJobs = new List<ScheduledJob>();

            var scheduledJob1 = new ScheduledJob()
            {
                Crontab = "00 03 * * *"
                ,
                Action = "InternalWorkflow"
                ,
                ScheduledJobParameters = "{\"Id\":\"com.swisscom.cms.agentbasedbackup.v002.RunScheduledBackup\",\"Parameters\":\"{\\\"nodeId\\\":\\\"14158\\\"}\"}"
                ,
                ParallelInvocation = "DoNotStartNewInstance"
                ,
                MaximumRuntimeMinutes = 10
                ,
                AutoDeleteIfNotScheduledDays = 10
                ,
                MaxRestartAttempts = 0
                ,
                MaxRestartWaitTimeMinutes = 1
                ,
                HistoryDepth = 0
                ,
                Parameters = "{}"
                ,
                EntityKindId = (long) Constants.EntityKindId.ScheduledJob
                ,
                ParentId = 14158L
                ,
                Id = 14159L
                ,
                Tid = new Guid("ad8f50df-2a5d-4ea5-9fcc-05882f16a9fe")
                ,
                Name = "ValidInternalWorkflow"
                ,
                Description = "ValidInternalWorkflow Description"
                ,
                CreatedById = 1011L
                ,
                ModifiedById = 1011L
                ,
                Created = new DateTimeOffset(2015, 01, 01, 08, 15, 42, TimeSpan.FromHours(2))
                ,
                Modified = new DateTimeOffset(2015, 01, 01, 08, 15, 42, TimeSpan.FromHours(2))
            };

            var scheduledJob2 = new ScheduledJob()
            {
                Crontab = "* * * * *"
                ,
                Action = "ExternalWorkflow"
                ,
                ScheduledJobParameters = "{\"Id\":\"com.swisscom.cms.agentbasedbackup.v002.RunScheduledBackup\",\"Parameters\":\"{\\\"nodeId\\\":\\\"14158\\\"}\"}"
                ,
                ParallelInvocation = "DoNotStartNewInstance"
                ,
                MaximumRuntimeMinutes = 10
                ,
                AutoDeleteIfNotScheduledDays = 10
                ,
                MaxRestartAttempts = 0
                ,
                MaxRestartWaitTimeMinutes = 1
                ,
                HistoryDepth = 0
                ,
                Parameters = "{}"
                ,
                EntityKindId = (long) Constants.EntityKindId.ScheduledJob
                ,
                ParentId = 24158L
                ,
                Id = 24159L
                ,
                Tid = new Guid("ad8f50df-2a5d-4ea5-9fcc-05882f16a9fe")
                ,
                Name = "ValidExternalWorkflow"
                ,
                Description = "ValidExternalWorkflow Description"
                ,
                CreatedById = 1011L
                ,
                ModifiedById = 1011L
                ,
                Created = new DateTimeOffset(2016, 01, 01, 08, 15, 42, TimeSpan.FromHours(2))
                ,
                Modified = new DateTimeOffset(2016, 01, 01, 08, 15, 42, TimeSpan.FromHours(2))
            };

            var scheduledJob3 = new ScheduledJob()
            {
                Crontab = "00 03 * * *"
                ,
                Action = "InternalWorkflow"
                ,
                ScheduledJobParameters = "{\"WrongId\":\"com.swisscom.cms.agentbasedbackup.v002.RunScheduledBackup\",\"Parameters\":\"{\\\"nodeId\\\":\\\"14158\\\"}\"}"
                ,
                ParallelInvocation = "DoNotStartNewInstance"
                ,
                MaximumRuntimeMinutes = 10
                ,
                AutoDeleteIfNotScheduledDays = 10
                ,
                MaxRestartAttempts = 0
                ,
                MaxRestartWaitTimeMinutes = 1
                ,
                HistoryDepth = 0
                ,
                Parameters = "{}"
                ,
                EntityKindId = (long) Constants.EntityKindId.ScheduledJob
                ,
                ParentId = 14158L
                ,
                Id = 14159L
                ,
                Tid = new Guid("ad8f50df-2a5d-4ea5-9fcc-05882f16a9fe")
                ,
                Name = "InvalidInternalWorkflow"
                ,
                Description = "InvalidInternalWorkflow Description"
                ,
                CreatedById = 1011L
                ,
                ModifiedById = 1011L
                ,
                Created = new DateTimeOffset(2015, 01, 01, 08, 15, 42, TimeSpan.FromHours(2))
                ,
                Modified = new DateTimeOffset(2015, 01, 01, 08, 15, 42, TimeSpan.FromHours(2))
            };

            var scheduledJob4 = new ScheduledJob()
            {
                Crontab = "00 03 * * *"
                ,
                Action = "ExternalWorkflow"
                ,
                ScheduledJobParameters = "{\"WrongId\":\"com.swisscom.cms.agentbasedbackup.v002.RunScheduledBackup\",\"Parameters\":\"{\\\"nodeId\\\":\\\"14158\\\"}\"}"
                ,
                ParallelInvocation = "DoNotStartNewInstance"
                ,
                MaximumRuntimeMinutes = 10
                ,
                AutoDeleteIfNotScheduledDays = 10
                ,
                MaxRestartAttempts = 0
                ,
                MaxRestartWaitTimeMinutes = 1
                ,
                HistoryDepth = 0
                ,
                Parameters = "{}"
                ,
                EntityKindId = (long) Constants.EntityKindId.ScheduledJob
                ,
                ParentId = 14158L
                ,
                Id = 14159L
                ,
                Tid = new Guid("ad8f50df-2a5d-4ea5-9fcc-05882f16a9fe")
                ,
                Name = "InvalidExternalWorkflow"
                ,
                Description = "InvalidExternalWorkflow Description"
                ,
                CreatedById = 1011L
                ,
                ModifiedById = 1011L
                ,
                Created = new DateTimeOffset(2015, 01, 01, 08, 15, 42, TimeSpan.FromHours(2))
                ,
                Modified = new DateTimeOffset(2015, 01, 01, 08, 15, 42, TimeSpan.FromHours(2))
            };

            scheduledJobs.Add(scheduledJob1);
            scheduledJobs.Add(scheduledJob2);
            scheduledJobs.Add(scheduledJob3);
            scheduledJobs.Add(scheduledJob4);

            return scheduledJobs;
        }