protected void CreateMocksAndInitialiseObjectUnderTest()
		{
			mockTrigger = new DynamicMock(typeof (ITrigger));
			mockDateTime = new DynamicMock(typeof (DateTimeProvider));

			trigger = new FilterTrigger((DateTimeProvider) mockDateTime.MockInstance);
			trigger.InnerTrigger = (ITrigger) mockTrigger.MockInstance;
			trigger.StartTime = "10:00";
			trigger.EndTime = "11:00";
			trigger.WeekDays = new DayOfWeek[] {DayOfWeek.Wednesday};
			trigger.BuildCondition = BuildCondition.NoBuild;
		}
		public void ShouldOnlyBuildBetween7AMAnd7PMOnWeekdays()
		{
			FilterTrigger outerTrigger = new FilterTrigger((DateTimeProvider) mockDateTime.MockInstance);
			outerTrigger.StartTime = "19:00";
			outerTrigger.EndTime = "7:00";
			outerTrigger.InnerTrigger = trigger;
			
			trigger.StartTime = "0:00";
			trigger.EndTime = "23:59:59";
			trigger.WeekDays = new DayOfWeek[] { DayOfWeek.Saturday, DayOfWeek.Sunday };
			IntegrationRequest request = ModificationExistRequest();
			mockTrigger.SetupResult("Fire", request);
			
			mockDateTime.SetupResult("Now", new DateTime(2006, 8, 10, 11, 30, 0, 0)); // Thurs midday
            Assert.AreEqual(request, outerTrigger.Fire(), "outerTrigger.Fire()");
			
			mockDateTime.SetupResult("Now", new DateTime(2006, 8, 10, 19, 30, 0, 0)); // Thurs evening
            Assert.IsNull(outerTrigger.Fire(), "outerTrigger.Fire()");			

			mockDateTime.SetupResult("Now", new DateTime(2006, 8, 12, 11, 30, 0, 0)); // Sat midday
            Assert.IsNull(outerTrigger.Fire(), "outerTrigger.Fire()");			

			mockDateTime.SetupResult("Now", new DateTime(2006, 8, 12, 19, 30, 0, 0)); // Sat evening
            Assert.IsNull(outerTrigger.Fire(), "outerTrigger.Fire()");			
		}
		public void ShouldHandleNestedFilterTriggers()
		{
			string xml =
				@"<filterTrigger startTime=""19:00"" endTime=""07:00"">
                    <trigger type=""filterTrigger"" startTime=""0:00"" endTime=""23:59:59"">
                        <trigger type=""intervalTrigger"" name=""continuous"" seconds=""900"" buildCondition=""ForceBuild""/>
                        <weekDays>
                            <weekDay>Saturday</weekDay>
                            <weekDay>Sunday</weekDay>
                        </weekDays>
                    </trigger>
				  </filterTrigger>";
			trigger = (FilterTrigger) NetReflector.Read(xml);
            Assert.AreEqual(typeof(FilterTrigger), trigger.InnerTrigger.GetType(), "trigger.InnerTrigger type");
            Assert.AreEqual(typeof(IntervalTrigger), ((FilterTrigger)trigger.InnerTrigger).InnerTrigger.GetType(), "trigger.InnerTrigger.InnerTrigger type");
		}
		public void ShouldMinimallyPopulateFromReflector()
		{
			string xml =
				string.Format(
					@"<filterTrigger>
											<trigger type=""scheduleTrigger"" time=""12:00:00"" />
										</filterTrigger>");
			trigger = (FilterTrigger) NetReflector.Read(xml);
            Assert.AreEqual("00:00:00", trigger.StartTime, "trigger.StartTime");
            Assert.AreEqual("23:59:59", trigger.EndTime, "trigger.EndTime");
            Assert.AreEqual(typeof(ScheduleTrigger), trigger.InnerTrigger.GetType(), "trigger.InnerTrigger type");
            Assert.AreEqual(7, trigger.WeekDays.Length, "trigger.WeekDays.Length");
            Assert.AreEqual(BuildCondition.NoBuild, trigger.BuildCondition, "trigger.BuildCondition");
		}
		public void ShouldFullyPopulateFromReflector()
		{
			string xml =
				string.Format(
					@"<filterTrigger startTime=""8:30:30"" endTime=""22:30:30"" buildCondition=""ForceBuild"">
											<trigger type=""scheduleTrigger"" time=""12:00:00""/>
											<weekDays>
												<weekDay>Monday</weekDay>
												<weekDay>Tuesday</weekDay>
											</weekDays>
										</filterTrigger>");
			trigger = (FilterTrigger) NetReflector.Read(xml);
            Assert.AreEqual("08:30:30", trigger.StartTime, "trigger.StartTime");
            Assert.AreEqual("22:30:30", trigger.EndTime, "trigger.EndTime");
			Assert.AreEqual(typeof (ScheduleTrigger), trigger.InnerTrigger.GetType(), "trigger.InnerTrigger type");
			Assert.AreEqual(DayOfWeek.Monday, trigger.WeekDays[0], "trigger.WeekDays[0]");
			Assert.AreEqual(DayOfWeek.Tuesday, trigger.WeekDays[1], "trigger.WeekDays[1]");
			Assert.AreEqual(BuildCondition.ForceBuild, trigger.BuildCondition, "trigger.BuildCondition");
		}