public void Setting_the_build_configuration_details_in_the_configuration()
        {
            // Given
            string[] expectedConfigurations = new string[] { "Demo_A", "Hemo_Matt", "Test_XYZ" };
            var      configuration          = CreateConfiguration();

            CreateMockFactory();
            foreach (var configurationId in expectedConfigurations)
            {
                configuration.Add(new InformationRadiatorItemConfigurationField()
                {
                    ID = "BuildConfiguration", Value = configurationId
                });
            }

            // When
            var target = new TeamCityPresenter(configuration);

            // Then
            foreach (var configurationId in expectedConfigurations)
            {
                Assert.IsTrue(target.Configurations.Any(s => s == configurationId));
            }
            _mockServer.VerifyAll();
        }
        private void Reading_the_build_status_of_a_single_XYZ_build_configuration(
            string expectedConfiguration, string expectedName,
            Model.BuildStatus serverStatus, BuildStatus expectedStatus)
        {
            // Given
            var configuration = CreateConfiguration();

            CreateMockFactory();
            configuration.Add(new InformationRadiatorItemConfigurationField()
            {
                ID = "BuildConfiguration", Value = expectedConfiguration
            });

            var target = new TeamCityPresenter(configuration);

            string      actualConfiguration = null;
            BuildStatus actualStatus        = BuildStatus.Unknown;
            string      actualName          = null;

            target.BuildStatusUpdate += (sender, e) =>
            {
                actualConfiguration = e.BuildConfiguration;
                actualStatus        = e.Status;
                actualName          = e.Name;
            };

            _mockServer.Setup(m => m.ReadBuildStatusAsync(expectedConfiguration));

            // When
            _mockTimer.Raise(m => m.Tick += null, EventArgs.Empty);

            // Then
            // All calls to the server should be done by now
            _mockServer.VerifyAll();

            // When
            // Fake the server returning the build status
            _mockServer.Raise(m => m.ReadBuildStatusComplete += null,
                              new TeamCity.Model.ReadBuildStatusCompleteEventArgs(
                                  serverStatus, expectedConfiguration, expectedName));

            Assert.AreEqual((double)30000, _factory._interval, (double)0.1);
            Assert.AreEqual(expectedConfiguration, actualConfiguration);
            Assert.AreEqual(expectedStatus, actualStatus);
            Assert.AreEqual(expectedName, actualName);
            _mockTimer.VerifyAll();
        }
        public void Setting_to_not_use_the_default_branch_in_the_build_configuration()
        {
            // Given
            var configuration = CreateConfiguration();

            CreateMockFactory(useDefaultBranch: false);

            configuration.Add(new InformationRadiatorItemConfigurationField()
            {
                ID = "OnlyDefaultBranch", Value = "false"
            });

            // When
            var target = new TeamCityPresenter(configuration);

            // Then
            _mockServer.VerifyAll();
        }
        public void No_server_and_login_details_in_the_configuration()
        {
            // Given
            string expectedHostName = "localhost";
            string expectedUserName = "******";
            string expectedPassword = "******";
            var    configuration    = new InformationRadiatorItemConfiguration();

            CreateMockFactory();

            // When
            var target = new TeamCityPresenter(configuration);

            // Then
            Assert.AreEqual(expectedHostName, _factory._hostName);
            Assert.AreEqual(expectedUserName, _factory._userName);
            Assert.AreEqual(expectedPassword, _factory._password);
            _mockServer.VerifyAll();
        }
        public void Setting_the_server_and_login_details_via_the_configuration()
        {
            // Given
            string expectedHostName = "Gladys";
            string expectedUserName = "******";
            string expectedPassword = "******";
            var    configuration    = CreateConfiguration(expectedHostName, expectedUserName, expectedPassword);

            CreateMockFactory();

            // When
            var target = new TeamCityPresenter(configuration);

            // Then
            Assert.AreEqual(expectedHostName, _factory._hostName);
            Assert.AreEqual(expectedUserName, _factory._userName);
            Assert.AreEqual(expectedPassword, _factory._password);
            _mockServer.VerifyAll();
        }
        private void Reading_the_build_status_of_a_multiple_build_configuration(
            string[] expectedConfigurations,
            string[] expectedNames,
            Model.BuildStatus[] serverStatus,
            BuildStatus[] expectedStatus,
            Exception[] throwException = null)
        {
            // Given
            var configuration = CreateConfiguration();

            CreateMockFactory();
            foreach (var config in expectedConfigurations)
            {
                configuration.Add(new InformationRadiatorItemConfigurationField()
                {
                    ID = "BuildConfiguration", Value = config
                });
            }

            var target = new TeamCityPresenter(configuration);

            string      actualConfiguration = null;
            BuildStatus actualStatus        = BuildStatus.Unknown;
            string      actualName          = null;

            target.BuildStatusUpdate += (sender, e) =>
            {
                actualConfiguration = e.BuildConfiguration;
                actualStatus        = e.Status;
                actualName          = e.Name;
            };

            foreach (var config in expectedConfigurations)
            {
                _mockServer.Setup(m => m.ReadBuildStatusAsync(config));
            }

            // When
            _mockTimer.Raise(m => m.Tick += null, EventArgs.Empty);

            // Then
            // All calls to the server should be done by now
            _mockServer.VerifyAll();

            // When
            // Fake the server returning the build status
            for (int i = 0; i < expectedConfigurations.Length; i++)
            {
                actualConfiguration = null;
                actualStatus        = BuildStatus.Unknown;

                if (throwException == null || throwException[i] == null)
                {
                    _mockServer.Raise(m => m.ReadBuildStatusComplete += null,
                                      new TeamCity.Model.ReadBuildStatusCompleteEventArgs(
                                          serverStatus[i], expectedConfigurations[i], expectedNames[i]));
                }
                else
                {
                    _mockServer.Raise(m => m.ReadBuildStatusError += null,
                                      new TeamCity.Model.ReadBuildStatusErrorEventArgs(
                                          throwException[i], expectedConfigurations[i]));
                }

                Assert.AreEqual(expectedStatus[i], actualStatus);
                Assert.AreEqual(expectedConfigurations[i], actualConfiguration);
                Assert.AreEqual(expectedNames[i], actualName);
            }

            _mockTimer.VerifyAll();
        }