private ISysTreeNode GetTargetNode(SubjectNode subjectNode, string folderPath) { string[] nodes = folderPath.Split(System.Char.Parse(@"\")); ISysTreeNode root = subjectNode; foreach (var node in nodes) { List SubNodes = root.NewList(); bool exists = false; foreach (SubjectNode sub in SubNodes) { if (sub.Name == node) { exists = true; continue; } } if (!exists) //not exists { root = root.AddNode(node); root.Post(); } else { root = root.FindChildNode(node); } } return(root); }
public static bool ExportBusinessFlowToQC(BusinessFlow businessFlow, TestSet mappedTestSet, string uploadPath, ObservableList <ExternalItemFieldBase> testSetFields, ref string result) { TestSet testSet; ObservableList <ActivitiesGroup> existingActivitiesGroups = new ObservableList <ActivitiesGroup>(); try { if (mappedTestSet == null) { //##create new Test Set in QC TestSetFactory TestSetF = (TestSetFactory)mTDConn.TestSetFactory; testSet = (TestSet)TestSetF.AddItem(System.DBNull.Value); //set the upload path TestSetTreeManager treeM = (TestSetTreeManager)mTDConn.TestSetTreeManager; ISysTreeNode testSetParentFolder = (ISysTreeNode)treeM.get_NodeByPath(uploadPath); testSet.TestSetFolder = testSetParentFolder.NodeID; } else { //##update existing test set //testSet = mappedTestSet; testSet = ImportFromQC.GetQCTestSet(mappedTestSet.ID.ToString()); TSTestFactory testsF = (TSTestFactory)testSet.TSTestFactory; List tsTestsList = testsF.NewList(""); foreach (TSTest tsTest in tsTestsList) { ActivitiesGroup ag = businessFlow.ActivitiesGroups.Where(x => (x.ExternalID == tsTest.TestId.ToString() && x.ExternalID2 == tsTest.ID.ToString())).FirstOrDefault(); if (ag == null) { testsF.RemoveItem(tsTest.ID); } else { existingActivitiesGroups.Add(ag); } } } //set item fields foreach (ExternalItemFieldBase field in testSetFields) { if (field.ToUpdate || field.Mandatory) { if (string.IsNullOrEmpty(field.SelectedValue) == false && field.SelectedValue != "NA") { testSet[field.ID] = field.SelectedValue; } else { try { testSet[field.ID] = "NA"; } catch { } } } } //post the test set testSet.Name = businessFlow.Name; try { testSet.Post(); } catch (Exception ex) { if (ex.Message.Contains("The Test Set already exists")) { result = "Cannot export " + GingerDicser.GetTermResValue(eTermResKey.BusinessFlow) + "- The Test Set already exists in the selected folder. "; Reporter.ToLog(eLogLevel.ERROR, result, ex); return(false); } //Searching for the testset in case it was created in ALM although getting exception TestSetFactory TSetFact = mTDConn.TestSetFactory; TDFilter tsFilter = TSetFact.Filter; TestSetTreeManager treeM = (TestSetTreeManager)mTDConn.TestSetTreeManager; ISysTreeNode testSetParentFolder = (ISysTreeNode)treeM.get_NodeByPath(uploadPath); try { tsFilter["CY_FOLDER_ID"] = "" + testSetParentFolder.NodeID + ""; } catch (Exception e) { tsFilter["CY_FOLDER_ID"] = "\"" + testSetParentFolder.Path.ToString() + "\""; Reporter.ToLog(eLogLevel.ERROR, $"Method - {MethodBase.GetCurrentMethod().Name}, Error - {e.Message}", e); } List TestsetList = TSetFact.NewList(tsFilter.Text); foreach (TestSet set in TestsetList) { if (set.Name == businessFlow.Name) { testSet = set; break; } } } businessFlow.ExternalID = testSet.ID.ToString(); //Add missing test cases TSTestFactory testCasesF = testSet.TSTestFactory; foreach (ActivitiesGroup ag in businessFlow.ActivitiesGroups) { if (existingActivitiesGroups.Contains(ag) == false && string.IsNullOrEmpty(ag.ExternalID) == false && ImportFromQC.GetQCTest(ag.ExternalID) != null) { TSTest tsTest = testCasesF.AddItem(ag.ExternalID); if (tsTest != null) { ag.ExternalID2 = tsTest.ID;//the test case instance ID in the test set- used for exporting the execution details } } else { foreach (ActivityIdentifiers actIdent in ag.ActivitiesIdentifiers) { ExportActivityAsTestStep(ImportFromQC.GetQCTest(ag.ExternalID), (Activity)actIdent.IdentifiedActivity); } } } return(true); } catch (Exception ex) { result = "Unexpected error occurred- " + ex.Message; Reporter.ToLog(eLogLevel.ERROR, "Failed to export the " + GingerDicser.GetTermResValue(eTermResKey.BusinessFlow) + " to QC/ALM", ex); return(false); } }
/// <summary> /// Export Activities Group details to QC, can be used for creating new matching QC Test Case or updating an existing one /// </summary> /// <param name="activitiesGroup">Activities Group to Export</param> /// <param name="mappedTest">The QC Test Case which mapped to the Activities Group (in case exist) and needs to be updated</param> /// <param name="uploadPath">Upload path in QC Test Plan</param> /// <param name="result">Export error result</param> /// <returns></returns> public static bool ExportActivitiesGroupToQC(ActivitiesGroup activitiesGroup, Test mappedTest, string uploadPath, ObservableList <ExternalItemFieldBase> testCaseFields, ref string result) { Test test; try { if (mappedTest == null) { //##create new Test Case in QC TestFactory TestF = (TestFactory)mTDConn.TestFactory; test = (Test)TestF.AddItem(System.DBNull.Value); test.Type = "MANUAL"; //set the upload path TreeManager treeM = (TreeManager)mTDConn.TreeManager; ISysTreeNode testParentFolder = (ISysTreeNode)treeM.get_NodeByPath(uploadPath); test["TS_SUBJECT"] = testParentFolder.NodeID; } else { //##update existing test case test = ImportFromQC.GetQCTest(activitiesGroup.ExternalID); //delete the un-needed steps DesignStepFactory stepF = test.DesignStepFactory; List stepsList = stepF.NewList(""); foreach (DesignStep step in stepsList) { if (activitiesGroup.ActivitiesIdentifiers.Where(x => x.IdentifiedActivity.ExternalID == step.ID.ToString()).FirstOrDefault() == null) { stepF.RemoveItem(step.ID); } } //delete the existing parameters StepParams testParams = test.Params; if (testParams.Count > 0) { for (int indx = 0; indx < testParams.Count; indx++) { testParams.DeleteParam(testParams.ParamName[indx]); testParams.Save(); } } } //set item fields foreach (ExternalItemFieldBase field in testCaseFields) { if (field.ToUpdate || field.Mandatory) { if (string.IsNullOrEmpty(field.SelectedValue) == false && field.SelectedValue != "NA") { test[field.ID] = field.SelectedValue; } else { try { test[field.ID] = "NA"; } catch { } } } } //post the test test.Name = activitiesGroup.Name; test.Post(); activitiesGroup.ExternalID = test.ID.ToString(); activitiesGroup.ExternalID2 = test.ID.ToString(); //Add/update all test steps + Parameters foreach (ActivityIdentifiers actIdent in activitiesGroup.ActivitiesIdentifiers) { ExportActivityAsTestStep(test, (Activity)actIdent.IdentifiedActivity); } return(true); } catch (Exception ex) { result = "Unexpected error occurred- " + ex.Message; Reporter.ToLog(eLogLevel.ERROR, "Failed to export the Activities Group to QC/ALM", ex); return(false); } }