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); }
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); }
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); }
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); }