public void ShouldCorrectlyReportEstimatedTimeWhenANewBuildStartsDuringThePollInterval()
        {
            ProjectStatus firstBuildStatus =
                ProjectStatusFixture.New(IntegrationStatus.Success, ProjectActivity.Building, new DateTime(2007, 1, 1, 0, 0, 0));

            mockProjectManager.SetupGet(_manager => _manager.ProjectName).Returns(PROJECT_NAME).Verifiable();
            mockServerMonitor.Setup(_monitor => _monitor.GetProjectStatus(PROJECT_NAME)).Returns(firstBuildStatus).Verifiable();
            dateTimeProvider.SetNow(new DateTime(2007, 1, 1, 1, 0, 0));
            monitor.Poll();

            ProjectStatus secondBuildStatus =
                ProjectStatusFixture.New(IntegrationStatus.Success, ProjectActivity.Building, new DateTime(2007, 1, 1, 2, 0, 0));

            mockProjectManager.SetupGet(_manager => _manager.ProjectName).Returns(PROJECT_NAME).Verifiable();
            mockServerMonitor.Setup(_monitor => _monitor.GetProjectStatus(PROJECT_NAME)).Returns(secondBuildStatus).Verifiable();
            dateTimeProvider.SetNow(new DateTime(2007, 1, 1, 3, 0, 0));
            monitor.Poll();

            ProjectStatus thirdBuildStatus =
                ProjectStatusFixture.New(IntegrationStatus.Success, ProjectActivity.Building, new DateTime(2007, 1, 1, 4, 0, 0));

            mockProjectManager.SetupGet(_manager => _manager.ProjectName).Returns(PROJECT_NAME).Verifiable();
            mockServerMonitor.Setup(_monitor => _monitor.GetProjectStatus(PROJECT_NAME)).Returns(thirdBuildStatus).Verifiable();
            dateTimeProvider.SetNow(new DateTime(2007, 1, 1, 5, 0, 0));
            monitor.Poll();

            Assert.AreEqual(new TimeSpan(2, 0, 0), monitor.EstimatedTimeRemainingOnCurrentBuild);
        }
		public void SetUp()
		{
			stubProjectMonitor = new StubProjectMonitor("project");

			mockLampController = new DynamicMock(typeof(ILampController));
			mockLampController.Strict = true;
			ILampController lampController = mockLampController.MockInstance as ILampController;
			
			configuration = new X10Configuration();
			configuration.Enabled = true;
			configuration.StartTime = DateTime.Parse("08:00");
			configuration.EndTime = DateTime.Parse("18:00");
            configuration.ActiveDays[(int)DayOfWeek.Sunday] = false;
            configuration.ActiveDays[(int)DayOfWeek.Monday] = true;
            configuration.ActiveDays[(int)DayOfWeek.Tuesday] = true;
            configuration.ActiveDays[(int)DayOfWeek.Wednesday] = true;
            configuration.ActiveDays[(int)DayOfWeek.Thursday] = true;
            configuration.ActiveDays[(int)DayOfWeek.Friday] = true;
            configuration.ActiveDays[(int)DayOfWeek.Saturday] = false;
			
			stubCurrentTimeProvider = new StubCurrentTimeProvider();
			stubCurrentTimeProvider.SetNow(new DateTime(2005, 11, 03, 12, 00, 00));
			Assert.AreEqual(DayOfWeek.Thursday, stubCurrentTimeProvider.Now.DayOfWeek);

			new X10Controller(
				stubProjectMonitor, 
				stubCurrentTimeProvider, 
				configuration,
				lampController);
		}
        public void AfterASuccessfulBuildTheLastBuildTimeIsCalculated()
        {
            DateTime startTime = new DateTime(2005, 7, 20, 10, 15, 02);

            currentTimeProvider.SetNow(startTime);
            tracker.OnBuildStart();
            currentTimeProvider.SetNow(startTime.AddHours(2));
            tracker.OnSuccessfulBuild();

            Assert.AreEqual(TimeSpan.FromHours(2), tracker.LastBuildDuration);

            currentTimeProvider.SetNow(startTime);
            tracker.OnBuildStart();
            currentTimeProvider.SetNow(startTime.AddMinutes(4));

            Assert.AreEqual(TimeSpan.FromHours(2), tracker.LastBuildDuration);
            tracker.OnSuccessfulBuild();

            Assert.AreEqual(TimeSpan.FromMinutes(4), tracker.LastBuildDuration);
        }