private async Task <TestResultData[]> GetTestResultsWithBugRefsAsync(TestResultsDetailsForGroup resultsForGroup)
        {
            var results = await resultsForGroup.Results
                          .ParallelSelectAsync(async resultIdObj =>
            {
                var resultData = new TestResultData();

                resultData.TestResult =
                    await _tcmApiHelper.GetTestResultByIdAsync(int.Parse(resultIdObj.TestRun.Id), resultIdObj.Id);

                // Remove flaky tests
                if (resultData.TestResult.IsTestFlaky())
                {
                    return(null);
                }

                resultData.AssociatedBugRefs =
                    await _tcmApiHelper.QueryTestResultBugsAsync(
                        resultData.TestResult.AutomatedTestName,
                        resultData.TestResult.Id);

                return(resultData);
            });

            //Remove all null values from array
            results = results.Where(r => r != null).ToArray();
            return(results);
        }
        /// <summary>
        /// Get Duration, TotalTests & test count by outcome
        /// Calculating total duration, as the tcm data has duration by test outcome only.
        /// </summary>
        protected void ParseBaseData(TestResultsDetailsForGroup resultsForGroup, TestSummaryItem summaryItem)
        {
            summaryItem.TotalTests         = resultsForGroup.Results.Count;
            summaryItem.TestCountByOutCome = new Dictionary <TestOutcome, int>();

            foreach (var aggregatedResultsByOutcome in resultsForGroup.ResultsCountByOutcome)
            {
                summaryItem.TestCountByOutCome[aggregatedResultsByOutcome.Key] =
                    aggregatedResultsByOutcome.Value.Count;
                summaryItem.Duration += aggregatedResultsByOutcome.Value.Duration;
            }
        }
        private static TestRunInfo ReadGroupByValue(TestResultsDetailsForGroup resultsForGroup)
        {
            var jobj = resultsForGroup.GroupByValue as JObject;

            if (jobj == null)
            {
                throw new InvalidTestResultDataException("Unable to parse json value for GroupByValue");
            }

            var serializableRunInfo = jobj.ToObject <TestRunInfo>();

            if (serializableRunInfo == null || serializableRunInfo.Id <= 0)
            {
                throw new InvalidTestResultDataException($"Invalid run id detected in json - {serializableRunInfo?.Id}");
            }
            return(serializableRunInfo);
        }
        /// <summary>
        ///     Returns a summary item for a given tcm data object for a test run.
        /// </summary>
        private TestSummaryItem GetTestRunSummaryInfo(TestResultsDetailsForGroup resultsForGroup)
        {
            _logger.LogInformation($"Getting Test summary data for test run - {resultsForGroup.GroupByValue}");

            TestRunInfo runInfo = ReadGroupByValue(resultsForGroup);

            var summaryItem = new TestSummaryItem
            {
                Name = string.IsNullOrWhiteSpace(runInfo.Name)
                    ? runInfo.Id.ToString()
                    : runInfo.Name,
                Id = runInfo.Id.ToString()
            };

            ParseBaseData(resultsForGroup, summaryItem);

            return(summaryItem);
        }
 public override string GetGroupByValue(TestResultsDetailsForGroup group)
 {
     return(ReadGroupByValue(group).Name);
 }
 public abstract string GetGroupByValue(TestResultsDetailsForGroup group);
 public override string GetGroupByValue(TestResultsDetailsForGroup group)
 {
     return(GetPriority(group.GroupByValue).ToString());
 }