示例#1
0
        public async Task LastBuildResult_ReturnsInfoCorrectlyMapped(string status, CiBuildResultStatus resultStatus)
        {
            var buildId = _fixture.Create <string>();
            var build   = _fixture
                          .Build <Build>()
                          .With(b => b.Status, status)
                          .Create();

            A.CallTo(() => _teamcityClient.Builds.LastBuildByBuildConfigId(buildId))
            .Returns(build);

            A.CallTo(() => _teamcityClient.Builds.ByBuildId(build.Id))
            .Returns(build);

            var teamCityService = new TeamCityService(_teamcityClient);
            var result          = await teamCityService.LastBuildResult(buildId);

            var expectedResult = new CiBuildResult
            {
                CiSource   = CiSource.TeamCity,
                Id         = build.Id,
                BuildId    = build.BuildType.Id,
                BuildName  = build.BuildType.Name,
                Url        = build.WebUrl,
                FinishDate = build.FinishDate,
                StartDate  = build.StartDate,
                Version    = build.Number,
                Status     = resultStatus
            };

            result.ShouldBeEquivalentTo(expectedResult);
        }
示例#2
0
        public async Task LastBuildResult_WhenBuildIsRunning_ReturnsRunningBuildStatus()
        {
            var buildId = _fixture.Create <string>();
            var build   = _fixture
                          .Build <Build>()
                          .Create();

            A.CallTo(() => _teamcityClient.Builds.LastBuildByBuildConfigId(buildId))
            .Returns(build);

            A.CallTo(() => _teamcityClient.Builds.ByBuildId(build.Id))
            .Returns(build);

            A.CallTo(() =>
                     _teamcityClient.Builds.ByBuildLocator(A <BuildLocator> .Ignored))
            .Returns(_fixture.Build <Build>().CreateMany().ToList());

            var teamCityService = new TeamCityService(_teamcityClient);
            var result          = await teamCityService.LastBuildResult(buildId);

            var expectedResult = new CiBuildResult
            {
                CiSource   = CiSource.TeamCity,
                Id         = build.Id,
                BuildId    = build.BuildType.Id,
                BuildName  = build.BuildType.Name,
                Url        = build.WebUrl,
                FinishDate = build.FinishDate,
                StartDate  = build.StartDate,
                Version    = build.Number,
                Status     = CiBuildResultStatus.Running
            };

            result.ShouldBeEquivalentTo(expectedResult);
        }
示例#3
0
        public async Task LastBuildResult_ReturnsStatisticsCorrectlyMapped()
        {
            var buildId = _fixture.Create <string>();
            var build   = _fixture
                          .Build <Build>()
                          .With(b => b.Status, "SUCCESS")
                          .Create();

            A.CallTo(() => _teamcityClient.Builds.LastBuildByBuildConfigId(buildId))
            .Returns(build);

            A.CallTo(() => _teamcityClient.Builds.ByBuildId(build.Id))
            .Returns(build);

            var stats = new List <Property>
            {
                new Property {
                    Name = "PassedTestCount", Value = "1"
                },
                new Property {
                    Name = "FailedTestCount", Value = "2"
                },
                new Property {
                    Name = "IgnoredTestCount", Value = "3"
                },
                new Property {
                    Name = "CodeCoverageAbsSCovered", Value = "4"
                },
                new Property {
                    Name = "CodeCoverageAbsSTotal", Value = "5"
                },
            };

            A.CallTo(() => _teamcityClient.Statistics.GetByBuildId(build.Id))
            .Returns(stats);

            var teamCityService = new TeamCityService(_teamcityClient);
            var result          = await teamCityService.LastBuildResult(buildId);

            var expectedResult = new CiBuildResult
            {
                CiSource                = CiSource.TeamCity,
                Id                      = build.Id,
                BuildId                 = build.BuildType.Id,
                BuildName               = build.BuildType.Name,
                Url                     = build.WebUrl,
                FinishDate              = build.FinishDate,
                StartDate               = build.StartDate,
                Version                 = build.Number,
                Status                  = CiBuildResultStatus.Success,
                NumberTestPassed        = 1,
                NumberTestFailed        = 2,
                NumberTestIgnored       = 3,
                NumberStatementsCovered = 4,
                NumberStatementsTotal   = 5
            };

            result.ShouldBeEquivalentTo(expectedResult);
        }
示例#4
0
        public async Task <CiBuildResult> LastBuildResult(string buildId)
        {
            // get last run build
            Logger.Debug("Retrieving from TeamCity last build for {buildId}", buildId);
            Build build = await GetLastBuild(buildId);

            if (build == null)
            {
                return(null);
            }

            // get build run details
            Logger.Debug("Retrieving from TeamCity build details for {buildId}", build.Id);
            Build buildDetails = await GetBuildDetails(build);

            CiBuildResult mappedBuild = Mapper.Map <Build, CiBuildResult>(buildDetails);

            // get build run statistics
            Logger.Debug("Retrieving from TeamCity build statistics for {buildId}", build.Id);
            List <Property> buildStats = await GetBuildStatistics(build);

            if (buildStats != null)
            {
                Dictionary <string, string> dict = buildStats.ToDictionary(item => item.Name, item => item.Value);
                int value;
                if (dict.ContainsKey("PassedTestCount") && int.TryParse(dict["PassedTestCount"], out value))
                {
                    mappedBuild.NumberTestPassed = value;
                }
                if (dict.ContainsKey("FailedTestCount") && int.TryParse(dict["FailedTestCount"], out value))
                {
                    mappedBuild.NumberTestFailed = value;
                }
                if (dict.ContainsKey("IgnoredTestCount") && int.TryParse(dict["IgnoredTestCount"], out value))
                {
                    mappedBuild.NumberTestIgnored = value;
                }

                if (dict.ContainsKey("CodeCoverageAbsSCovered") && int.TryParse(dict["CodeCoverageAbsSCovered"], out value))
                {
                    mappedBuild.NumberStatementsCovered = value;
                }
                if (dict.ContainsKey("CodeCoverageAbsSTotal") && int.TryParse(dict["CodeCoverageAbsSTotal"], out value))
                {
                    mappedBuild.NumberStatementsTotal = value;
                }
            }

            // check if a build for it is running
            if (await IsRunningABuild(buildId))
            {
                mappedBuild.Status = CiBuildResultStatus.Running;
            }

            // TODO: check if a build for it is in queued
            return(mappedBuild);
        }
        public async Task <Build> GetLastBuildResult(string buildId)
        {
            try
            {
                CiBuildResult lastBuildResult = await CiServerService.LastBuildResult(buildId);

                Build mappedBuild = Mapper.Map <CiBuildResult, Build>(lastBuildResult);

                return(mappedBuild);
            }
            catch (Exception ex)
            {
                Logger.Error(ex, "Error getting last build result for {buildId}...", buildId);
            }

            return(null);
        }
        public void MapsBuildsCorrectly(string status, CiBuildResultStatus resultStatus)
        {
            Build build = _fixture
                          .Build <Build>()
                          .With(b => b.Status, status)
                          .Create();

            CiBuildResult mappedResult = Mapper.Map <Build, CiBuildResult>(build);

            CiBuildResult expectedResult = new CiBuildResult
            {
                CiSource   = CiSource.TeamCity,
                Id         = build.Id,
                BuildId    = build.BuildType.Id,
                BuildName  = build.BuildType.Name,
                Url        = build.WebUrl,
                FinishDate = build.FinishDate,
                StartDate  = build.StartDate,
                Version    = build.Number,
                Status     = resultStatus
            };

            mappedResult.ShouldBeEquivalentTo(expectedResult);
        }
        public async Task GetLastBuildResult_QueriesForLastBuildResult_AndReturnsMappedValues()
        {
            InformationQuery infoQuery = new InformationQuery {
                CiServerService = _ciServerService
            };

            CiBuildResult build = _fixture
                                  .Build <CiBuildResult>()
                                  .With(p => p.Id, _fixture.Create <int>().ToString())
                                  .Create();

            A.CallTo(() => _ciServerService
                     .LastBuildResult(build.BuildId))
            .Returns(build);
            Build mappedBuild = Mapper.Map <CiBuildResult, Build>(build);

            Build result = await infoQuery.GetLastBuildResult(build.BuildId);

            A.CallTo(() => _ciServerService
                     .LastBuildResult(build.BuildId))
            .MustHaveHappened();

            result.ShouldBeEquivalentTo(mappedBuild);
        }