public VstsTestCaseResult CsvToVsts(CsvResultItem csvRawData, string additionalComment = null) { if (null == csvRawData) { throw new ArgumentNullException("Raw data is null!"); } var res = new VstsTestCaseResult(); //res.Id = csvRawData.Id.Replace("VSTS", string.Empty); res.Id = Regex.Replace(csvRawData.Id, @"^VSTS", string.Empty, RegexOptions.Compiled | RegexOptions.IgnoreCase); if (csvRawData.Result.ToUpper() == "PASS") { res.Outcome = "passed"; } else if (csvRawData.Result == "TBD") { var defects = GetKnownDefects(csvRawData.Description); if (defects == null) { throw new Exception($"Test {csvRawData.Id} fail without defect linked!"); } //if (defects == null) return default(VstsTestCaseResult); if (defects.Count != 0) { if (FailTagRegex.IsMatch(csvRawData.Description)) { res.Outcome = "failed"; } else if (PassTagRegex.IsMatch(csvRawData.Description)) { res.Outcome = "passed"; } //else return default(VstsTestCaseResult); else { throw new Exception($"Test {csvRawData.Id} outcome is not following specification!"); } res.AssociatedBugs = new List <string>(); res.AssociatedBugs.AddRange(defects); } } else { //return default(VstsTestCaseResult); throw new Exception($"Test {csvRawData.Id} outcome is not following specification!"); } res.Description = csvRawData.Description; res.Comment = Regex.Match(csvRawData.Note, @"(?<media>Media\d+)\.iso", RegexOptions.IgnoreCase | RegexOptions.Compiled).Groups["media"].Value; if (!string.IsNullOrWhiteSpace(additionalComment)) { res.Comment = additionalComment + "," + res.Comment; } return(res); }
public List <CsvResultItem> Parse() { var csvData = new List <CsvResultItem>(); try { using (TextFieldParser csvReader = new TextFieldParser(_filePath)) { int idIndex = 0; int descriptionIndex = 1; int ResultIndex = 7; int noteIndex = 10; csvReader.SetDelimiters(new string[] { "," }); csvReader.HasFieldsEnclosedInQuotes = true; string[] colFields; while (!(colFields = csvReader.ReadFields())[0].StartsWith("id")) { ; } List <string> requiredColumns = new List <string>() { "id", "result", "note", "description" }; foreach (var item in requiredColumns) { if (!colFields.Contains(item, StringComparer.OrdinalIgnoreCase)) { throw new Exception($"Header columns don't contains {item}"); } } for (int i = 0; i < colFields.Length; i++) { switch (colFields[i].ToLower().Trim()) { case "id": idIndex = i; break; case "result": ResultIndex = i; break; case "note": noteIndex = i; break; case "description": descriptionIndex = i; break; } } while (!csvReader.EndOfData) { string[] fieldData = csvReader.ReadFields(); var item = new CsvResultItem(); item.Id = fieldData[idIndex]; item.Description = fieldData[descriptionIndex]; item.Result = fieldData[ResultIndex]; item.Note = fieldData[noteIndex]; csvData.Add(item); } } } catch (Exception) { throw; } return(csvData); }