private List <TestObjectViewModel> RecursiveSuiteCollector(TestObjectViewModel item, ITestSuiteBase suite, List <TestObjectViewModel> selectedItems) { IStaticTestSuite staticSuite = null; IDynamicTestSuite dynamicSuite = null; IRequirementTestSuite requirmentSuite = null; ITestSuiteBase suiteBase = TfsShared.Instance.SourceTestProject.TestSuites.Find(item.ID); if (suiteBase.TestSuiteType == TestSuiteType.StaticTestSuite) { staticSuite = (IStaticTestSuite)suiteBase; if (item.IsChecked) { selectedItems.AddRange(staticSuite.TestCases.Select(test => new TestObjectViewModel(test) { TestSuiteId = suite.Id })); if (staticSuite.SubSuites.Count > 0) { foreach (ITestSuiteBase subSuite in staticSuite.SubSuites) { var children = item.Children.Where(t => t.ID > 0 && t.ID == subSuite.Id); if (children.Count() > 0) { RecursiveSuiteCollector(children.First(), subSuite, selectedItems); } } } } } else if ((suite.TestSuiteType == TestSuiteType.DynamicTestSuite) && (item.IsChecked)) { dynamicSuite = (IDynamicTestSuite)suite; selectedItems.AddRange(dynamicSuite.TestCases.Select(test => new TestObjectViewModel(test) { TestSuiteId = suite.Id })); } else if ((suite.TestSuiteType == TestSuiteType.RequirementTestSuite) && (item.IsChecked)) { requirmentSuite = (IRequirementTestSuite)suite; selectedItems.AddRange(requirmentSuite.TestCases.Select(test => new TestObjectViewModel(test) { TestSuiteId = suite.Id })); } return(selectedItems); }
private TestObjectViewModel HasSelectedItem(IEnumerable <TestObjectViewModel> suites, TestObjectViewModel selectedSuite) { foreach (TestObjectViewModel suite in suites) { if (suite == null) { continue; } if (suite.IsSelected) { selectedSuite = suite; } else if (suite.Children.Count > 0) { selectedSuite = HasSelectedItem(suite.Children, selectedSuite); } } return(selectedSuite); }
public JsonResult GetTestBizObject(string schemaCode, string method) { return(ExecuteFunctionRun(() => { ActionResult result = new ActionResult(); result = ParseParam(schemaCode, ""); if (!result.Success) { return Json(result, JsonRequestBehavior.AllowGet); } TestObjectViewModel model = new TestObjectViewModel(); model.SchemaCode = schemaCode; List <Item> methods = GetMethods(); List <Item> propertyGrid = GetPropertyGrid(); bool isVisible;//是否显示子表 List <Item> associationNames = GetAssociationNames(out isVisible); if (string.IsNullOrEmpty(model.AssociationName) && null != associationNames.FirstOrDefault()) { model.AssociationName = associationNames.FirstOrDefault().Text; } List <Item> associatedColunms = GetAssociatedColunms(); List <AssociatedObjectRowViewModel> AssociatedObjectGrid = GetAssociatedObjectGrid(model.AssociationName); if (string.IsNullOrEmpty(model.Method)) { model.Method = method; } result.Extend = new { TestBizObject = model, Methods = methods, PropertyGrid = propertyGrid, AssociationNames = associationNames, PanelAssociation = isVisible, AssociatedColunms = associatedColunms, Available = false }; return Json(result, JsonRequestBehavior.AllowGet); })); }
private async Task DuplicateTestCases(List <TestObjectViewModel> selectedItems, bool duplicate) { await Task.Factory.StartNew(() => { TestObjectViewModel selectedSuite = null; selectedSuite = HasSelectedItem(_mappingViewModel.TestPlans, selectedSuite); ITestPlan plan = TfsShared.Instance.TargetTestProject.TestPlans.Find(selectedSuite._testObject.TestPlanID); try { foreach (TestObjectViewModel test in selectedItems) { var parentTestSuites = new Stack(); ITestSuiteBase sourceSuite = TfsShared.Instance.SourceTestProject.TestSuites.Find(test.TestSuiteId); ITestCase testCase = TfsShared.Instance.SourceTestProject.TestCases.Find(test.ID); WorkItem targetWorkItem = null; #region Create duplicate test cases if (duplicate) { WorkItem duplicateWorkItem = null; //if (!DuplicatedTestCase.Any(t => t.OldID.Equals(test.ID))) //{ if ((sourceSuite.TestSuiteType != TestSuiteType.RequirementTestSuite) && (sourceSuite.TestSuiteType != TestSuiteType.DynamicTestSuite)) { duplicateWorkItem = testCase.WorkItem.Copy(TfsShared.Instance.TargetProjectWorkItemType, WorkItemCopyFlags.CopyFiles); //duplicateWorkItem.WorkItemLinks.Clear(); if (!duplicateWorkItem.IsValid()) { Logger = "Cannot Save Work Item - Stoping Migration\n" + Logger; ArrayList badFields = duplicateWorkItem.Validate(); foreach (Field field in badFields) { Logger = string.Format("Name: {0}, Reference Name: {1}, Invalid Value: {2}\n", field.Name, field.ReferenceName, field.Value) + Logger; } break; } else { duplicateWorkItem.Save(); //App.Current.Dispatcher.Invoke(() => //{ // DuplicatedTestCase.Add(new TestCaseOldNewMapping() // { // OldID = testCase.Id, // NewID = duplicateWorkItem.Id // }); //}); Logger = string.Format("Duplicate Test Case: {0} completed, new Test Case ID: {1}\n", test.ID, duplicateWorkItem.Id) + Logger; } } //} //else //{ // TestCaseOldNewMapping mapping = // DuplicatedTestCase.FirstOrDefault(t => t.OldID.Equals(test.ID)); // if (mapping == null) throw new NullReferenceException("Cannot locate new id"); // duplicateWorkItem = // TfsShared.Instance.TargetTestProject.TestCases.Find(mapping.NewID).WorkItem; // Logger = // string.Format("Test Case: {0} already exists, Test Case ID: {1}\n", test.ID, // duplicateWorkItem.Id) + Logger; //} targetWorkItem = duplicateWorkItem; } else { targetWorkItem = testCase.WorkItem; } #endregion ITestSuiteBase suite = sourceSuite; while (suite != null) { parentTestSuites.Push(suite); suite = suite.TestSuiteEntry.ParentTestSuite; } parentTestSuites.Pop(); //Source tree parent suites var parentSuite = (IStaticTestSuite)selectedSuite._testObject.TestSuiteBase; //Selected target suite bool isTestCaseParentRequirementTestSuite = false; bool isTestCaseParentDynamicTestSuite = false; foreach (ITestSuiteBase testSuite in parentTestSuites) { ITestSuiteBase existingSuite = null; isTestCaseParentRequirementTestSuite = false; isTestCaseParentDynamicTestSuite = false; if (testSuite.TestSuiteType == TestSuiteType.RequirementTestSuite) { isTestCaseParentRequirementTestSuite = true; } if (testSuite.TestSuiteType == TestSuiteType.DynamicTestSuite) { isTestCaseParentDynamicTestSuite = true; } if (parentSuite.Title.Equals(testSuite.Title)) { existingSuite = parentSuite; } else if (parentSuite.SubSuites.FirstOrDefault(t => t.Title.Equals(testSuite.Title)) != null) { var subSuite = parentSuite.SubSuites.FirstOrDefault(t => t.Title.Equals(testSuite.Title)); if (subSuite.TestSuiteType == TestSuiteType.StaticTestSuite) { parentSuite = (IStaticTestSuite)parentSuite.SubSuites.FirstOrDefault(t => t.Title.Equals(testSuite.Title)); } continue; } if (existingSuite == null) { Logger = "Creating new suite called - " + testSuite.Title + "\n" + Logger; #region New Feature switch (testSuite.TestSuiteType) { case TestSuiteType.RequirementTestSuite: var store = ((IRequirementTestSuite)testSuite).Project.WitProject.Store; var tfsRequirement = store.GetWorkItem(((IRequirementTestSuite)testSuite).RequirementId); IRequirementTestSuite newRequirementSuite = TfsShared.Instance.TargetTestProject.TestSuites.CreateRequirement(tfsRequirement); newRequirementSuite.Title = testSuite.Title; newRequirementSuite.Description = testSuite.Description; newRequirementSuite.State = testSuite.State; tfsRequirement.Save(); parentSuite.Entries.Add(newRequirementSuite); break; case TestSuiteType.StaticTestSuite: IStaticTestSuite newStaticSuite = TfsShared.Instance.TargetTestProject.TestSuites.CreateStatic(); newStaticSuite.Title = testSuite.Title; newStaticSuite.State = testSuite.State; newStaticSuite.Description = testSuite.Description; parentSuite.Entries.Add(newStaticSuite); parentSuite = newStaticSuite; break; case TestSuiteType.DynamicTestSuite: IDynamicTestSuite newDynamicSuite = TfsShared.Instance.TargetTestProject.TestSuites.CreateDynamic(); newDynamicSuite.Query = TfsShared.Instance.TargetTestProject.CreateTestQuery(((IDynamicTestSuite)testSuite).Query.QueryText); newDynamicSuite.Title = testSuite.Title; newDynamicSuite.State = testSuite.State; newDynamicSuite.Description = testSuite.Description; parentSuite.Entries.Add(newDynamicSuite); break; } #endregion } else { Logger = string.Format("Suite '{0}' already exists.\n{1}", existingSuite.Title, Logger); } plan.Save(); } if ((parentSuite.TestSuiteType == TestSuiteType.StaticTestSuite) && (isTestCaseParentRequirementTestSuite == false) && (isTestCaseParentDynamicTestSuite == false)) { ITestCase targetTestCase = TfsShared.Instance.TargetTestProject.TestCases.Find(targetWorkItem.Id); if (!parentSuite.Entries.Contains(targetTestCase)) { ITestSuiteEntry entry = parentSuite.Entries.Add(targetTestCase); entry.Configurations.Add(test.Configuration); Logger = "Adding duplicated test case completed.\n" + Logger; } } } } catch (Exception ex) { Logger = string.Format("** ERROR ** : {0}\n", ex.Message) + Logger; } }); }
private async void StartMigration() { List <TestOutcomeFilter> selectedOutcomes = _options.TestOutcomeFilters.Where(t => t.IsSelected).ToList(); TestObjectViewModel selectedSuite = null; selectedSuite = HasSelectedItem(_mappingViewModel.TestPlans, selectedSuite);//Selected Target project Suit. if (_mappingViewModel.tree.Items.Count == 0 || selectedSuite == null) { MessageBox.Show("Please select suites & test cases to copy and target test plan.", "Missing Data", MessageBoxButton.OK, MessageBoxImage.Error); return; } Logger = "Collecting Test Cases Candidates..."; _mappingViewModel.Working = true; Working = true; var firsetLevel = new List <TestObjectViewModel>(); foreach (TestObjectViewModel item in _mappingViewModel.tree.Items) { if (item.IsChecked) { firsetLevel.Add(item);//Source Project all test plan } } List <TestObjectViewModel> selectedItems = null; await Task.Run( () => { selectedItems = GetSelectedSuitesAndTests(firsetLevel, new List <TestObjectViewModel>()); }); List <TestObjectViewModel> migrationCandidates = new List <TestObjectViewModel>(); await Task.Run( () => { foreach (TestObjectViewModel test in selectedItems) { foreach (IdAndName config in test._testObject.Configurations) { TestOutcome outcome = TestHelper.Instance.GetLastTestOutcome( test._testObject.TestPlanID, test.TestSuiteId, test.ID, config.Id); if (selectedOutcomes.Any(t => t.TestOutcome.Equals(outcome))) { test.Configuration = config; migrationCandidates.Add(test); } } } }); if (migrationCandidates.Count == 0) { Logger = "No Test Cases Found.\nCopy Stopped. "; _mappingViewModel.Working = false; Working = false; return; } Logger = "Starting Copy...\n"; await DuplicateTestCases(migrationCandidates, _options.DuplicateSelected); _mappingViewModel.Working = false; Working = false; //Settings.Default.Mappings = JsonConvert.SerializeObject(DuplicatedTestCase); //Settings.Default.Save(); Logger = "Copy Completed!\n" + Logger; }
public JsonResult RunTestBizObject(string propertyGrid, TestObjectViewModel model) { return(ExecuteFunctionRun(() => { ActionResult result = new ActionResult(); result = ParseParam(model.SchemaCode, ""); if (!result.Success) { return Json(result, JsonRequestBehavior.AllowGet); } // 删除与组织结构对应的系统权限 Dictionary <string, object> valueTableFromUI = new Dictionary <string, object>(); List <Item> propertyGridList = JsonConvert.DeserializeObject <List <Item> >(propertyGrid); foreach (Item item in propertyGridList) { string itemName = item.Text; OThinker.H3.DataModel.FieldSchema field = this.Schema.GetField(itemName); if (!string.IsNullOrEmpty(field.Formula)) { continue; } string str = item.Value; // 转换成相应的类型 object obj = null; if (string.IsNullOrEmpty(str)) { obj = OThinker.Data.Convertor.GetDefaultValue(this.Schema.GetField(itemName).RealType); } else if (field.LogicType == Data.DataLogicType.BizObject || field.LogicType == Data.DataLogicType.BizObjectArray || field.RealType.IsSubclassOf(typeof(System.Array))) { obj = OThinker.Data.Convertor.XmlToObject(this.Schema.GetField(itemName).RealType, str); } else if (!OThinker.Data.Convertor.Convert( str, field.RealType, ref obj)) { //无法转换数据 result.Message = "TestBizObject.UnableConvert"; result.Success = false; return Json(result, JsonRequestBehavior.AllowGet); } valueTableFromUI.Add(itemName, obj); } // 初始化业务对象 foreach (string itemName in valueTableFromUI.Keys) { //if (string.IsNullOrEmpty(this.Schema.GetField(itemName).OnChange)) //{ this.BizObject.SetValue(itemName, valueTableFromUI[itemName]); //} } // 只设置哪些可以设置的属性 // 初始化业务对象 foreach (string itemName in valueTableFromUI.Keys) { if (this.BizObject.GetPropertyEditable(itemName))//&& !string.IsNullOrEmpty(this.Schema.GetField(itemName).OnChange)) { this.BizObject.SetValue(itemName, valueTableFromUI[itemName]); } } // 检查是不是必填 string[] itemNames = this.Schema.GetPropertyNames(); if (itemNames != null) { foreach (string itemName in itemNames) { if (this.BizObject.GetPropertyRequired(itemName) && (this.BizObject[itemName] == null || this.BizObject[itemName].ToString() == "")) { //数据{0}是必填字段 result.Message = "TestBizObject.FieldRequired"; result.Extend = itemName; return Json(result, JsonRequestBehavior.AllowGet); } } } // 调用方法 this.BizObject.Invoke(model.Method); bool editable = false; bool visiable = false; // 回写值 // 删除与组织结构对应的系统权限 foreach (Item item in propertyGridList) { string itemName = item.Text; // 转换成相应的类型 object obj = this.BizObject.GetValue(itemName); OThinker.H3.DataModel.FieldSchema field = this.BizObject.Schema.GetField(itemName); if (obj == null) { item.Value = null; } else if (field.LogicType == Data.DataLogicType.BizObject) { // text.Text = OThinker.Data.Convertor.ObjectToXml(obj); } else if (field.LogicType == Data.DataLogicType.BizObjectArray) { // text.Text = OThinker.Data.Convertor.ObjectToXml(obj); } else if (field.RealType.IsSubclassOf(typeof(System.Array))) { item.Value = OThinker.Data.Convertor.ObjectToXml(obj); } else { item.Value = obj.ToString(); } // 加载状态 editable = this.BizObject.GetPropertyEditable(itemName); visiable = this.BizObject.GetPropertyVisible(item.Text); if (!this.BizObject.GetPropertyVisible(itemName)) { visiable = false; } item.Extend = new { Edit = editable, Visible = visiable }; } var associatedColunms = new List <AssociatedObjectRowViewModel>(); if (this.Mode == 0) { associatedColunms = GetAssociatedObjectGrid(model.AssociationName); } result.Extend = new { PropertyGrid = propertyGridList, AssociatedColunms = associatedColunms, Mode = this.Mode }; return Json(result, JsonRequestBehavior.AllowGet); })); }