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);
        }
Example #2
0
        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);
        }