public async Task <List <TestSummaryItem> > GetTestRunSummaryWithPriorityAsync() { using (new PerformanceMeasurementBlock("Get Test Run Summary from TCM", _logger)) { TestResultDetailsParserForRun summaryByRun = null; IReadOnlyDictionary <TestOutcomeForPriority, TestResultDetailsParserForPriority> testResultDetailsByOutcomeForPriorityGroup = new Dictionary <TestOutcomeForPriority, TestResultDetailsParserForPriority>(); var tasksToAwait = new List <Task>(); var runSummaryFetchTask = Task.Run(async() => { using (new PerformanceMeasurementBlock("Get test summary data by test run", _logger)) { var result = await GetTestResultsDetailsAsync(); summaryByRun = new TestResultDetailsParserForRun(result, _logger); } }); tasksToAwait.Add(runSummaryFetchTask); if (_emailReportConfig.ReportDataConfiguration.GroupTestSummaryBy == TestResultsGroupingType.Priority) { var prioritySummaryFetchTask = Task.Run(async() => { using (new PerformanceMeasurementBlock("Get test summary data by priority", _logger)) { testResultDetailsByOutcomeForPriorityGroup = await GetTestSummaryDataByPriorityAsync(); } }); tasksToAwait.Add(prioritySummaryFetchTask); } await Task.WhenAll(tasksToAwait); if (summaryByRun == null) { throw new EmailReportException("unable to fetch summary data from tcm"); } _logger.LogInformation("parsing data to get Test run ids"); return(GetSummaryByRun(summaryByRun, testResultDetailsByOutcomeForPriorityGroup)); } }
/// <summary> /// Merges the tcm summary data grouped by test run, & tcm summary data grouped by priority to create summary object /// </summary> /// <returns>Returns a Dictionary of Summary item grouped by test run</returns> private List <TestSummaryItem> GetSummaryByRun( TestResultDetailsParserForRun testResultByRun, IReadOnlyDictionary <TestOutcomeForPriority, TestResultDetailsParserForPriority> testResultsForPriorityByOutcome) { var summaryItemByRun = testResultByRun.GetSummaryItems(); foreach (var summaryItem in summaryItemByRun) { var totalCountForTestOutcomeByPriority = new Dictionary <int, Dictionary <TestOutcomeForPriority, int> >(); summaryItem.TestCountForOutcomeByPriority = totalCountForTestOutcomeByPriority; foreach (var supportedTestOutcome in testResultsForPriorityByOutcome.Keys) { IReadOnlyDictionary <int, int> resultCountByPriority = testResultsForPriorityByOutcome[supportedTestOutcome].GetTestResultsForRun( int.Parse(summaryItem.Id)); foreach (var priority in resultCountByPriority.Keys) { if (!totalCountForTestOutcomeByPriority.ContainsKey(priority)) { totalCountForTestOutcomeByPriority[priority] = new Dictionary <TestOutcomeForPriority, int>(); } Dictionary <TestOutcomeForPriority, int> testCountByOutcome = totalCountForTestOutcomeByPriority[priority]; if (!testCountByOutcome.ContainsKey(supportedTestOutcome)) { testCountByOutcome[supportedTestOutcome] = 0; } testCountByOutcome[supportedTestOutcome] += resultCountByPriority[priority]; } } } return(summaryItemByRun); }