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 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);
        }