public async Task <List <TestRailResult> > RecordResultAsync(TestContext context, string version = null, string comment = null, TimeSpan?elapsed = null) { var(caseIds, defects) = ReadAttributesOnTest(context); string defectsFixedComment = null; if (defects.Length > 0 && context.Result.Outcome.Status == TestStatus.Passed) { defectsFixedComment = "**This test passed**, although there's known defects related to this test. The defects could be already fixed."; } string notPassedComment = context.Result.Outcome.Status switch { TestStatus.Passed => null, TestStatus.Skipped => null, _ => context.Result.Assertions.Select(a => $"{a.Message}\n\n{a.StackTrace}").LastOrDefault() }; string status = defects.Count() > 0 ? _config.StatusMapping.WithDefect : context.Result.Outcome.Status switch { TestStatus.Passed => _config.StatusMapping.Passed, TestStatus.Failed => _config.StatusMapping.Failed, TestStatus.Skipped => _config.StatusMapping.Skipped, TestStatus.Inconclusive => _config.StatusMapping.Inconclusive, TestStatus.Warning => _config.StatusMapping.Warning, _ => _config.StatusMapping.Inconclusive, }; var results = new List <TestRailResult>(); foreach (var(isFilteredCases, ids) in _client.SplitCaseIdsByFilter(caseIds)) { var partial = await _client.RecordResultAsync( ids, new TestResult { Version = version, Status = isFilteredCases ? status : _config.StatusMapping.FilteringResidue, Defects = defects, Comment = new[] { defectsFixedComment, comment, notPassedComment } .Where(c => !string.IsNullOrEmpty(c)) .DefaultIfEmpty().Aggregate((a, b) => $"{a}\n\n{b}"), Elapsed = elapsed ?? TimeSpan.Zero, } ); results.AddRange(partial); } return(results); } }