private async Task WriteBuildDetails(Build build, List <TestRun> testRuns, CodeCoverageSummary coverage, ISink sink) { CodeCoverageStatistics linesCovered = coverage?.CoverageData?.FirstOrDefault()?.CoverageStats?.FirstOrDefault(s => s.Label == LinesCoverageStatsLabel); int totalTests = testRuns?.Sum(r => r.TotalTests) ?? 0; int passedTests = testRuns?.Sum(r => r.PassedTests) ?? 0; int ignoredTests = testRuns?.Sum(r => r.IncompleteTests + r.NotApplicableTests + r.UnanalyzedTests) ?? 0; await sink.Write( new string[] { build.Id.ToString(), build.BuildNumber, build.Definition?.Name, build.RequestedBy?.DisplayName, build.RequestedFor?.DisplayName, build.Repository?.Name, build.QueueTime?.ToString("s"), build.StartTime?.ToString("s"), build.FinishTime?.ToString("s"), build.SourceBranch, build.SourceVersion, build.Result.ToString(), totalTests.ToString(), passedTests.ToString(), ignoredTests.ToString(), linesCovered?.Covered.ToString(), linesCovered?.Total.ToString() }); }
private async Task WriteBuildDetailsForRepository(string projectName, ISink sink) { IPagedList <Build> builds = await buildClient.GetBuildsAsync2(projectName, null, null, null, null, null, null, null, BuildStatus.Completed); foreach (Build build in builds) { CodeCoverageSummary coverage = await testManagementClient.GetCodeCoverageSummaryAsync(projectName, build.Id); List <TestRun> testRuns = await testManagementClient.GetTestRunsAsync(projectName, build.Uri.ToString()); await WriteBuildDetails(build, testRuns, coverage, sink); } }