Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
     }));
 }
Esempio n. 4
0
        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;
                }
            });
        }
Esempio n. 5
0
        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);
            }));
        }