public static void CreateRerunPlan(APIClient client, string planId, string projectID) { JObject planObject = AccessTestRail.GetPlan(client, planId); string planName = planObject.Property("name").Value.ToString(); //var json = JsonConvert.SerializeObject(planObject); ////var test = JsonConvert.SerializeObject(json); //Console.Write(json); List <Run> runIDs = AccessTestRail.GetRunsInPlan(planObject); List <Dictionary <string, object> > planEntries = new List <Dictionary <string, object> >(); List <Run> editedRuns = GetCasesInRun(client, runIDs); for (int j = 0; j < suiteIDs.Count; j++) { List <Dictionary <string, object> > runList = new List <Dictionary <string, object> >(); List <Run> runsForSuite = editedRuns.FindAll(x => x.SuiteID == suiteIDs[j]); List <int> casesInRunsInSuite = new List <int>(); List <int> configsInRunsInSuite = new List <int>(); for (int i = 0; i < runsForSuite.Count; i++) { Dictionary <string, object> runInPlanObject = StringManipulation.RunsInPlan(false, runsForSuite[i]); runList.Add(runInPlanObject); foreach (int caseID in runsForSuite[i].CaseIDs) { if (!casesInRunsInSuite.Contains(caseID)) { casesInRunsInSuite.Add(caseID); } } foreach (int configID in runsForSuite[i].ConfigIDs) { if (!configsInRunsInSuite.Contains(configID)) { configsInRunsInSuite.Add(configID); } } } object runArray = runList.ToArray(); //object configArray = allConfigIDs.ToArray(); //object caseArray = allCaseIDs.ToArray(); // we don't want all case ids here object caseArray = casesInRunsInSuite.ToArray(); object configArray = configsInRunsInSuite.ToArray(); Dictionary <string, object> planEntry = StringManipulation.PlanEntry(suiteIDs[j], false, runArray, configArray, caseArray); //create list of plan entries, convert to array, put into new plan planEntries.Add(planEntry); } object entriesArray = planEntries.ToArray(); Dictionary <string, object> newPlan = StringManipulation.NewPlan(planName + " re-run", entriesArray); //change name var json = JsonConvert.SerializeObject(newPlan); ////var test = JsonConvert.SerializeObject(json); Console.Write(json); //string json = newPlan.ToString(); //Console.Write(json); AccessTestRail.AddPlan(client, projectID, newPlan); }
public static List <Run> GetCasesInRun(APIClient client, List <Run> runs) { List <Run> fullRuns = new List <Run>(); for (int i = 0; i < runs.Count; i++) { Run currentRun = runs[i]; string runId = currentRun.RunID; int caseID = 0; string status = ""; List <int> caseIdList = new List <int>(); JArray testsArray = AccessTestRail.GetTestsInRun(client, runId); // need to get list of case ids for (int j = 0; j < testsArray.Count; j++) { JObject testObject = testsArray[j].ToObject <JObject>(); status = StringManipulation.GetStatus(testObject.Property("status_id").Value.ToString()); if (testObject.Property("case_id").Value != null && !string.IsNullOrWhiteSpace(testObject.Property("case_id").Value.ToString()) && status != "Passed") { caseID = Int32.Parse(testObject.Property("case_id").Value.ToString()); caseIdList.Add(caseID); //here we add the case id before we even check if it has failed. why!!!! } } if (status != "Passed") // we just want the case id of the test that didnt pass { int[] caseIDs = caseIdList.ToArray(); Run newRun; newRun.CaseIDs = caseIDs; newRun.Config = currentRun.Config; newRun.ConfigIDs = currentRun.ConfigIDs; newRun.RunID = currentRun.RunID; newRun.SuiteID = currentRun.SuiteID; fullRuns.Add(newRun); if (!suiteIDs.Contains(currentRun.SuiteID)) { suiteIDs.Add(currentRun.SuiteID); } foreach (int configID in newRun.ConfigIDs) { if (!allConfigIDs.Contains(configID)) { allConfigIDs.Add(configID); } } foreach (int caseIDloop in newRun.CaseIDs) { if (!allCaseIDs.Contains(caseIDloop)) { allCaseIDs.Add(caseIDloop); } } } } return(fullRuns); }