public void WeeklyRule_OnlyEndTime_MustHaveSpecifiedStatusFromMidnightToEndTime()
        {
            var rule = new WeeklyRule(DayOfWeek.Tuesday, AvailabilityStatus.Booked, endTime: new TimeSpan(10, 30, 00));

            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 11, 14, 00, 00, 00), null) == AvailabilityStatus.Booked);
            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 11, 14, 08, 00, 00), null) == AvailabilityStatus.Booked);
            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 11, 14, 10, 30, 00), null) == AvailabilityStatus.Undefined);
        }
        public void WeeklyRule_OnlyTime_MustHaveSpecifiedStatusOnlyAtThisTime()
        {
            var rule = new WeeklyRule(DayOfWeek.Tuesday, AvailabilityStatus.Booked, time: new TimeSpan(10, 30, 00));

            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 11, 14, 10, 30, 00), null) == AvailabilityStatus.Booked);
            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 11, 14, 09, 00, 00), null) == AvailabilityStatus.Undefined);
            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 11, 14, 10, 31, 00), null) == AvailabilityStatus.Undefined);
        }
        public void WeeklyRuleStartDateTest()
        {
            var rule = new WeeklyRule(DayOfWeek.Tuesday, AvailabilityStatus.NotBookable, startDate: new DateTime(2017, 3, 14));

            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 3, 7), null) == AvailabilityStatus.Undefined);
            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 3, 14), null) == AvailabilityStatus.NotBookable);
            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 3, 21), null) == AvailabilityStatus.NotBookable);
            Assert.IsTrue(rule.GetStatus(new DateTime(2018, 3, 20), null) == AvailabilityStatus.NotBookable);
            Assert.IsTrue(rule.GetStatus(new DateTime(2018, 3, 21), null) == AvailabilityStatus.Undefined);
        }
        public void WeeklyRule_TimeAndEndTime_MustHaveSpecifiedStatusBetweenThisTimes()
        {
            var startTime = new TimeSpan(08, 30, 00);
            var endTime   = new TimeSpan(10, 45, 00);

            var rule = new WeeklyRule(DayOfWeek.Tuesday, AvailabilityStatus.Free, time: startTime, endTime: endTime);

            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 11, 14, 08, 30, 00), null) == AvailabilityStatus.Free);
            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 11, 14, 09, 45, 00), null) == AvailabilityStatus.Free);
            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 11, 14, 10, 45, 00), null) == AvailabilityStatus.Undefined);
        }
        public void WeeklyRuleTimeTest()
        {
            var rule = new WeeklyRule(DayOfWeek.Thursday, AvailabilityStatus.Free, new TimeSpan(10, 30, 0));

            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 2, 2, 10, 0, 0), null) == AvailabilityStatus.Undefined);
            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 2, 2, 10, 29, 0), null) == AvailabilityStatus.Undefined);
            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 2, 2, 10, 30, 0), null) == AvailabilityStatus.Free);
            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 2, 2, 10, 31, 0), null) == AvailabilityStatus.Undefined);
            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 2, 2, 20, 30, 0), null) == AvailabilityStatus.Undefined);
            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 3, 2, 10, 30, 0), null) == AvailabilityStatus.Free);
        }
        public void WeeklyRuleWholeDayTest()
        {
            var rule = new WeeklyRule(DayOfWeek.Wednesday, AvailabilityStatus.Booked);

            Assert.IsTrue(rule.GetStatus(new DateTime(2016, 10, 31), null) == AvailabilityStatus.Undefined);
            Assert.IsTrue(rule.GetStatus(new DateTime(2016, 11, 2), null) == AvailabilityStatus.Booked);
            Assert.IsTrue(rule.GetStatus(new DateTime(2016, 11, 3), null) == AvailabilityStatus.Undefined);
            Assert.IsTrue(rule.GetStatus(new DateTime(2016, 11, 4), null) == AvailabilityStatus.Undefined);
            Assert.IsTrue(rule.GetStatus(new DateTime(2016, 11, 5), null) == AvailabilityStatus.Undefined);
            Assert.IsTrue(rule.GetStatus(new DateTime(2016, 11, 6), null) == AvailabilityStatus.Undefined);
        }
        public void WeeklyRule_NoEventIdsSpecified_MustHaveSpecifiedStatusAtAllEvents()
        {
            var rule = new WeeklyRule(DayOfWeek.Tuesday, AvailabilityStatus.Free, eventIds: null);

            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 11, 14), new Event {
                Id = 3
            }) == AvailabilityStatus.Free);
            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 11, 14), new Event {
                Id = 4
            }) == AvailabilityStatus.Free);
            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 11, 14), new Event {
                Id = 5
            }) == AvailabilityStatus.Free);
            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 11, 14), new Event {
                Id = 2
            }) == AvailabilityStatus.Free);
        }
        public void WeeklyRule_EmptyEventIdList_MustHaveSpecifiedStatusAtAllEvents()
        {
            var eventIds = new List <int> {
            };

            var rule = new WeeklyRule(DayOfWeek.Tuesday, AvailabilityStatus.Free, eventIds: eventIds);

            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 11, 14), new Event {
                Id = 3
            }) == AvailabilityStatus.Free);
            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 11, 14), new Event {
                Id = 4
            }) == AvailabilityStatus.Free);
            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 11, 14), new Event {
                Id = 5
            }) == AvailabilityStatus.Free);
            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 11, 14), new Event {
                Id = 2
            }) == AvailabilityStatus.Free);
        }
        public void WeeklyRule_2EventIds_MustHaveSpecifiedStatusOnlyAtTheseEvents()
        {
            var eventIds = new List <int> {
                3, 4
            };

            var rule = new WeeklyRule(DayOfWeek.Tuesday, AvailabilityStatus.Free, eventIds: eventIds);

            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 11, 14), new Event {
                Id = 3
            }) == AvailabilityStatus.Free);
            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 11, 14), new Event {
                Id = 4
            }) == AvailabilityStatus.Free);
            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 11, 14), new Event {
                Id = 5
            }) == AvailabilityStatus.Undefined);
            Assert.IsTrue(rule.GetStatus(new DateTime(2017, 11, 14), new Event {
                Id = 2
            }) == AvailabilityStatus.Undefined);
        }