public static void SetLightColorFromBuildState(Build buildFromSource, Light light)
 {
     switch (buildFromSource.State)
     {
         case Build.BuildState.Success:
             {
                 light.LightColor = Light.Color.Green;
                 light.TurnOn(buildFromSource.IsBuilding);
                 break;
             }
         case Build.BuildState.Unstable:
             {
                 light.LightColor = Light.Color.Yellow;
                 light.TurnOn(buildFromSource.IsBuilding);
                 break;
             }
         case Build.BuildState.Failure:
             {
                 light.LightColor = Light.Color.Red;
                 light.TurnOn(buildFromSource.IsBuilding);
                 break;
             }
         case Build.BuildState.Aborted:
         case Build.BuildState.Unknown:
             {
                 light.TurnOff();
                 break;
             }
         default:
             {
                 throw new UnknownBuildStateException(buildFromSource.State.ToString());
             }
     }
 }
        public void PausingServiceManagerShouldShowPausedState()
        {
            var buildToSimulate = new Build { BuildNumber = "1", IsBuilding = false, State = Build.BuildState.Failure };
            var buildServiceManagerToTest = SetupMockData(buildToSimulate);

            _threadTask = Task.Factory.StartNew(buildServiceManagerToTest.Run);

            buildServiceManagerToTest.Pause();

            Assert.AreEqual(BuildServiceManager.State.Paused, buildServiceManagerToTest.CurrentState);

            buildServiceManagerToTest.Stop();

            _threadTask.Wait();
        }
        public void GetCurrentBuildFindsLatestBuildState()
        {
            var lastCompletedBuild = new Build {BuildNumber = "1", Link = "lastCompletedBuildUrl"};

            SetupMockConnectionHelper(MockUrl, XDocument.Parse(
                String.Format("<root><lastBuild><number>{0}</number><url>{1}</url></lastBuild><build><number>{2}</number><url>{3}</url></build></root>", ExpectedResult.BuildNumber, ExpectedResult.Link, lastCompletedBuild.BuildNumber, lastCompletedBuild.Link)));

            SetupMockConnectionHelper(ExpectedResult.ApiLink, XDocument.Parse("<build><building>true</building></build>"));
            SetupMockConnectionHelper(lastCompletedBuild.ApiLink, XDocument.Parse("<build><result>Failure</result></build>"));

            _buildRepositoryToTest = new BuildRepository(_mockHelper.Object);

            var buildToTest = _buildRepositoryToTest.GetCurrentBuild(MockUrl);

            Assert.AreEqual(Build.BuildState.Failure, buildToTest.State);
        }
        public void ChangingSourceInBuildServiceManagerShouldShowNewSourceStatus()
        {
            var buildToSimulate = new Build {IsBuilding = false, State = Build.BuildState.Unknown};
            var newSourceBuildState = new Build {IsBuilding = true, State = Build.BuildState.Failure};

            var buildServiceManagerToTest = SetupMockData(buildToSimulate);

            _threadTask = Task.Factory.StartNew(buildServiceManagerToTest.Run);

            buildServiceManagerToTest.BuildSource = new User {Build = newSourceBuildState};

            Thread.Sleep(WaitTime);

            buildServiceManagerToTest.Stop();

            _threadTask.Wait();

            Assert.AreEqual(Light.Color.Red, buildServiceManagerToTest.Light.LightColor);
            Assert.AreNotEqual(0, _flashTurnOnCount);
        }
        public void ResetBuildServiceManagerShouldTurnOffAllLights()
        {
            var buildToSimulate = new Build { BuildNumber = "1", IsBuilding = false, State = Build.BuildState.Failure };
            var buildServiceManagerToTest = SetupMockData(buildToSimulate);

            _threadTask = Task.Factory.StartNew(buildServiceManagerToTest.Run);

            Thread.Sleep(WaitTime);

            //pause so we can reset the turn off count
            buildServiceManagerToTest.Pause();

            Thread.Sleep(WaitTime);

            _turnOffCount = 0;

            buildServiceManagerToTest.Reset();

            //verify that the all light colors have been turned off
            Assert.AreEqual(3, _turnOffCount);

            buildServiceManagerToTest.Stop();

            _threadTask.Wait();
        }
        private BuildServiceManager SetupMockData(Build buildToSimulate)
        {
            var source = new User
                    {
                        Build = buildToSimulate,
                        UpdateFrequency = 1
                    };

            return SetupMockData(source);
        }
        public void RunBuildServiceManagerWithUnstableBuild()
        {
            var buildToSimulate = new Build { BuildNumber = "1", IsBuilding = false, State = Build.BuildState.Unstable };
            var buildServiceManagerToTest = SetupMockData(buildToSimulate);

            _threadTask = Task.Factory.StartNew(buildServiceManagerToTest.Run);

            Thread.Sleep(WaitTime);

            buildServiceManagerToTest.Stop();

            _threadTask.Wait();

            //verify that the light has been set to yellow
            Assert.AreEqual(Light.Color.Yellow, buildServiceManagerToTest.Light.LightColor);
            Assert.AreEqual(0, _flashTurnOnCount);
        }
        public void RunBuildServiceManagerWithSuccessfulBuild()
        {
            var buildToSimulate = new Build {BuildNumber = "1", IsBuilding = true, State = Build.BuildState.Success};
            var buildServiceManagerToTest = SetupMockData(buildToSimulate);

            _threadTask = Task.Factory.StartNew(buildServiceManagerToTest.Run);

            Thread.Sleep(WaitTime);

            buildServiceManagerToTest.Stop();

            _threadTask.Wait();

            Assert.AreEqual(Light.Color.Green, buildServiceManagerToTest.Light.LightColor);
            Assert.AreNotEqual(0, _flashTurnOnCount);
        }
        private void GetBuildDetails(Build build)
        {
            if (build.ApiLink.Length <= 0) return;

            var lastBuildDetailsResponseXml = _connectionHelper.GetXmlResponse(build.ApiLink);

            var buildingElement = lastBuildDetailsResponseXml.Descendants("building").FirstOrDefault();

            if (buildingElement != null)
            {
                build.IsBuilding = Convert.ToBoolean(buildingElement.Value);
            }

            var resultElement = lastBuildDetailsResponseXml.Descendants("result").FirstOrDefault();

            if (resultElement == null) return;

            Build.BuildState buildValue;

            if (Enum.TryParse(resultElement.Value.ToLower(), true, out buildValue))
            {
                build.State = buildValue;
            }
            else
            {
                throw new UnknownBuildStateException(resultElement.Value);
            }
        }
        private void GetBuildStateForBuildInProgress(Build build, string rootUrl)
        {
            if (!build.IsBuilding) return;

            var pastBuilds = GetBuilds(rootUrl);

            foreach (var pastBuild in pastBuilds.Where(pastBuild => !pastBuild.BuildNumber.Equals(build.BuildNumber)))
            {
                GetBuildDetails(pastBuild);

                if (pastBuild.State.Equals(Build.BuildState.Unknown) || pastBuild.State.Equals(Build.BuildState.Aborted))
                {
                    continue;
                }

                build.State = pastBuild.State;

                break;
            }
        }