Exemplo n.º 1
0
 /// <summary>
 /// Removes the test case internal.
 /// </summary>
 /// <param name="testCaseToRemove">The test case to be removed.</param>
 /// <param name="suitesToSearch">The suites which will be searched.</param>
 private static void RemoveTestCaseInternal(ITestCase testCaseToRemove, ITestSuiteCollection suitesToSearch)
 {
     foreach (ITestSuiteBase currentSuite in suitesToSearch)
     {
         if (currentSuite != null)
         {
             if (currentSuite is IRequirementTestSuite)
             {
                 IRequirementTestSuite suite = currentSuite as IRequirementTestSuite;
                 if (suite.TestCases.Where(x => x.Id.Equals(testCaseToRemove.Id)).ToList().Count == 0)
                 {
                     suite.TestCases.RemoveEntries(new List <ITestSuiteEntry>()
                     {
                         testCaseToRemove.TestSuiteEntry
                     });
                 }
             }
             else if (currentSuite is IStaticTestSuite)
             {
                 foreach (var currentTestCase in currentSuite.TestCases)
                 {
                     if (currentTestCase.Id.Equals(testCaseToRemove.Id))
                     {
                         ((IStaticTestSuite)currentSuite).Entries.Remove(testCaseToRemove);
                     }
                 }
                 IStaticTestSuite suite1 = currentSuite as IStaticTestSuite;
                 if (suite1 != null && (suite1.SubSuites.Count > 0))
                 {
                     RemoveTestCaseInternal(testCaseToRemove, suite1.SubSuites);
                 }
             }
         }
     }
 }
Exemplo n.º 2
0
 public void AddTestCasesToSuite(IEnumerable <ITestCase> testCases, ITestSuiteBase destinationSuite)
 {
     if (destinationSuite.TestSuiteType == TestSuiteType.StaticTestSuite)
     {
         IStaticTestSuite staticTestSuite = destinationSuite as IStaticTestSuite;
         if (staticTestSuite != null)
         {
             staticTestSuite.Entries.AddCases(testCases);
         }
     }
     else if (destinationSuite.TestSuiteType == TestSuiteType.RequirementTestSuite)
     {
         IRequirementTestSuite requirementTestSuite = destinationSuite as IRequirementTestSuite;
         if (requirementTestSuite != null)
         {
             WorkItemStore store          = requirementTestSuite.Project.WitProject.Store;
             WorkItem      tfsRequirement = store.GetWorkItem(requirementTestSuite.RequirementId);
             foreach (ITestCase testCase in testCases)
             {
                 tfsRequirement.Links.Add(new RelatedLink(store.WorkItemLinkTypes.LinkTypeEnds["Tested By"],
                                                          testCase.WorkItem.Id));
             }
             tfsRequirement.Save();
         }
     }
     destinationSuite.Plan.Save();
 }
Exemplo n.º 3
0
        void WriteRootSuite(IRequirementTestSuite testSuite, XmlDocument xmlDoc)
        {
            XmlNode rootNode = xmlDoc.CreateElement("suite");

            xmlDoc.AppendChild(rootNode);

            XmlNode idNode = xmlDoc.CreateElement("id");

            rootNode.AppendChild(idNode);

            XmlNode rootnameNode = xmlDoc.CreateElement("name");

            rootnameNode.InnerText = testSuite.Plan.Name;
            rootNode.AppendChild(rootnameNode);

            XmlNode rootdescNode = xmlDoc.CreateElement("description");

            rootdescNode.InnerText = testSuite.Plan.Description;
            rootNode.AppendChild(rootdescNode);

            XmlNode sectionsNode = xmlDoc.CreateElement("sections");

            rootNode.AppendChild(sectionsNode);
            GetTestCases(testSuite, xmlDoc, sectionsNode);
        }
Exemplo n.º 4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="TfsTestSuite"/> class.
 /// </summary>
 /// <param name="testSuite">The test suite.</param>
 /// <param name="associatedTestPlan">The associated test plan.</param>
 public TfsTestSuite(IRequirementTestSuite testSuite, ITfsTestPlan associatedTestPlan)
 {
     AssociatedTestPlan           = associatedTestPlan;
     OriginalRequirementTestSuite = testSuite;
     Id    = OriginalRequirementTestSuite.Id;
     Title = OriginalRequirementTestSuite.Title;
     InitializeChildSuites();
 }
Exemplo n.º 5
0
        /// <summary>
        /// Pastes the test cases to suite.
        /// </summary>
        /// <param name="testManagementTeamProject">The test management team project.</param>
        /// <param name="testPlan">The test plan.</param>
        /// <param name="suiteToAddInId">The suite automatic add information unique identifier.</param>
        /// <param name="clipBoardTestCase">The clip board test case.</param>
        /// <exception cref="System.ArgumentException">New test cases cannot be added to requirement based suites!</exception>
        public static void PasteTestCasesToSuite(ITestManagementTeamProject testManagementTeamProject, ITestPlan testPlan, int suiteToAddInId, ClipBoardTestCase clipBoardTestCase)
        {
            ITestSuiteBase suiteToAddIn = testManagementTeamProject.TestSuites.Find(suiteToAddInId);

            if (suiteToAddIn is IRequirementTestSuite)
            {
                throw new ArgumentException("New test cases cannot be added to requirement based suites!");
            }
            IStaticTestSuite suiteToAddInStatic = suiteToAddIn as IStaticTestSuite;
            ITestSuiteBase   oldSuite;
            List <TestCase>  allTestCasesInPlan = null;

            if (clipBoardTestCase.TestCases[0].TestSuiteId != null)
            {
                oldSuite = testManagementTeamProject.TestSuites.Find((int)clipBoardTestCase.TestCases[0].TestSuiteId);
            }
            else
            {
                oldSuite = null;
            }

            foreach (TestCase currentTestCase in clipBoardTestCase.TestCases)
            {
                ITestCase testCaseCore = null;
                if (oldSuite is IRequirementTestSuite)
                {
                    IRequirementTestSuite suite = oldSuite as IRequirementTestSuite;
                    testCaseCore = suite.TestCases.Where(x => x.TestCase != null && x.TestCase.Id.Equals(currentTestCase.TestCaseId)).FirstOrDefault().TestCase;
                }
                else if (oldSuite is IStaticTestSuite)
                {
                    IStaticTestSuite suite = oldSuite as IStaticTestSuite;
                    testCaseCore = suite.Entries.Where(x => x.TestCase != null && x.TestCase.Id.Equals(currentTestCase.TestCaseId)).FirstOrDefault().TestCase;
                }
                else if (oldSuite == null)
                {
                    if (allTestCasesInPlan == null)
                    {
                        allTestCasesInPlan = TestCaseManager.GetAllTestCasesInTestPlan(testManagementTeamProject, testPlan);
                    }
                    testCaseCore = allTestCasesInPlan.Where(t => t.TestCaseId.Equals(currentTestCase.TestCaseId)).FirstOrDefault().ITestCase;
                }
                if (!suiteToAddInStatic.Entries.Contains(testCaseCore))
                {
                    suiteToAddInStatic.Entries.Add(testCaseCore);
                }
                if (clipBoardTestCase.ClipBoardCommand.Equals(ClipBoardCommand.Cut))
                {
                    if (oldSuite is IStaticTestSuite)
                    {
                        IStaticTestSuite suite = oldSuite as IStaticTestSuite;
                        suite.Entries.Remove(testCaseCore);
                    }
                }
            }

            testPlan.Save();
        }
Exemplo n.º 6
0
        private void GetTestCases(IRequirementTestSuite requirementTestSuite, XmlDocument xmlDoc, XmlNode node) //sectionsNode has to be "sections"
        {
            var casesNode = WriteSuite(requirementTestSuite, xmlDoc, node);                                     //WriteSuite sectionsNode has to be "sections"

            foreach (var testCase in requirementTestSuite.AllTestCases)
            {
                var caseNode = WriteTestCase(testCase, xmlDoc);
                casesNode.AppendChild(caseNode);
            }
        }
Exemplo n.º 7
0
 private void GetTestCases(IRequirementTestSuite requirementTestSuite, ExcelWorksheet worksheet)
 {
     WriteSuiteToExcel(requirementTestSuite, worksheet);
     _i++;
     foreach (var testCase in requirementTestSuite.AllTestCases)
     {
         WriteTestCaseToExcel(testCase, worksheet, _testProject);
         _i++;
     }
 }
Exemplo n.º 8
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);
        }
Exemplo n.º 9
0
 void WriteSuiteToExcel(IRequirementTestSuite testSuite, ExcelWorksheet worksheet)
 {
     worksheet.Cells[_i, 1].Style.Fill.PatternType = ExcelFillStyle.Solid;
     worksheet.Cells[_i, 1].Style.Fill.BackgroundColor.SetColor(Color.LightBlue);
     worksheet.Cells[_i, 1].Style.Font.Bold        = true;
     worksheet.Cells[_i, 2].Style.Fill.PatternType = ExcelFillStyle.Solid;
     worksheet.Cells[_i, 2].Style.Fill.BackgroundColor.SetColor(Color.LightBlue);
     worksheet.Cells[_i, 3].Style.Fill.PatternType = ExcelFillStyle.Solid;
     worksheet.Cells[_i, 3].Style.Fill.BackgroundColor.SetColor(Color.LightBlue);
     worksheet.Cells[_i, 4].Style.Fill.PatternType = ExcelFillStyle.Solid;
     worksheet.Cells[_i, 4].Style.Fill.BackgroundColor.SetColor(Color.LightBlue);
     worksheet.Cells[_i, 5].Style.Fill.PatternType = ExcelFillStyle.Solid;
     worksheet.Cells[_i, 5].Style.Fill.BackgroundColor.SetColor(Color.LightBlue);
     worksheet.Cells[_i, 6].Style.Fill.PatternType = ExcelFillStyle.Solid;
     worksheet.Cells[_i, 6].Style.Fill.BackgroundColor.SetColor(Color.LightBlue);
     //worksheet.Cells[_i, 1].Value = FindRootSuite(testSuite, testSuite.Title);
 }
Exemplo n.º 10
0
        static string FindRootSuite(IRequirementTestSuite currentSuite, string suiteTreePath)
        {
            var parentSuite = currentSuite.Parent;

            if (parentSuite == null)
            {
                return(suiteTreePath);
            }
            if (parentSuite.IsRoot)
            {
                return(suiteTreePath);
            }
            suiteTreePath = currentSuite.Parent.Title + ">" + suiteTreePath;
            var path = FindRootSuite(parentSuite, suiteTreePath);

            return(path);
        }
Exemplo n.º 11
0
        XmlNode WriteSuite(IRequirementTestSuite testSuite, XmlDocument xmlDoc, XmlNode node) //sectionsNode has to be "sections"
        {
            XmlNode sectionNode = xmlDoc.CreateElement("section");

            node.AppendChild(sectionNode);
            XmlNode nameNode = xmlDoc.CreateElement("name");

            nameNode.InnerText = testSuite.Title;
            sectionNode.AppendChild(nameNode);
            XmlNode descNode = xmlDoc.CreateElement("description");

            sectionNode.AppendChild(descNode);
            XmlNode casesNode = xmlDoc.CreateElement("cases");

            sectionNode.AppendChild(casesNode);

            return(casesNode);
        }
Exemplo n.º 12
0
 /// <summary>
 /// Removes the test case internal.
 /// </summary>
 /// <param name="testCaseToRemove">The test case automatic remove.</param>
 /// <param name="currentSuite">The current suite.</param>
 private static void RemoveTestCaseInternal(ITestCase testCaseToRemove, ITestSuiteBase currentSuite)
 {
     if (currentSuite != null)
     {
         log.InfoFormat("Remove Test Case with id= {0}, Title = {1} from Suite with id= {2}, Title= {3}", testCaseToRemove.Id, testCaseToRemove.Title, currentSuite.Id, currentSuite.Title);
         if (currentSuite is IRequirementTestSuite)
         {
             IRequirementTestSuite suite = currentSuite as IRequirementTestSuite;
             suite.AllTestCases.Remove(testCaseToRemove);
             suite.TestCases.RemoveCases(new List <ITestCase>()
             {
                 testCaseToRemove
             });
         }
         else if (currentSuite is IStaticTestSuite)
         {
             IStaticTestSuite suite = currentSuite as IStaticTestSuite;
             suite.Entries.Remove(testCaseToRemove);
         }
     }
 }
Exemplo n.º 13
0
 /// <summary>
 /// Adds a test case to the suite.
 /// </summary>
 /// <param name="currentSuite">The current suite.</param>
 /// <param name="testCaseToAdd">The test case to be added.</param>
 public static void AddTestCase(this ITestSuiteBase currentSuite, ITestCase testCaseToAdd)
 {
     if (currentSuite is IRequirementTestSuite)
     {
         IRequirementTestSuite suite = currentSuite as IRequirementTestSuite;
         if (suite.TestCases.Where(x => x.Id.Equals(testCaseToAdd.Id)).ToList().Count == 0)
         {
             suite.TestCases.AddCases(new List <ITestCase>()
             {
                 testCaseToAdd
             });
         }
     }
     else if (currentSuite is IStaticTestSuite)
     {
         IStaticTestSuite suite = currentSuite as IStaticTestSuite;
         if (suite.Entries.Where(x => x.Id.Equals(testCaseToAdd.Id)).ToList().Count == 0)
         {
             suite.Entries.Add(testCaseToAdd);
         }
     }
 }
Exemplo n.º 14
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;
                }
            });
        }
        public void CreateSprint1TestPlan()
        {
            TfsTeamProjectCollection   tpc     = TfsConnect();
            ITestManagementTeamProject project = tpc.GetService <ITestManagementService>().GetTeamProject(TeamProject);

            // Create test plan if none exist
            //
            // See http://bit.ly/2dup2XY for why we can't delete Test Plans or Suites at this point in time
            //
            // If this routine isn't creating the test plan and/or test suites for you, you'll need to manually
            // delete the Test Plan and Test Suites using witadmin

            WorkItemStore      store     = new WorkItemStore(tpc);
            string             wiql      = "SELECT [System.Id] FROM WorkItems " + "WHERE [System.TeamProject] = '" + TeamProject + "' AND [System.WorkItemType] ='Test Plan' AND [System.Title] = 'Sprint 1'";
            WorkItemCollection workItems = store.Query(wiql);
            int testPlanCount            = workItems.Count;

            wiql = "SELECT [System.Id] FROM WorkItems " + "WHERE [System.TeamProject] = '" + TeamProject + "' AND [System.WorkItemType] ='Test Suite'";
            int       testSuiteCount = store.Query(wiql).Count;
            ITestPlan testPlan;

            if (testPlanCount == 0)
            {
                testPlan           = project.TestPlans.Create();
                testPlan.Name      = "Sprint 1";
                testPlan.Iteration = @"Fabrikam\Release 1\Sprint 1";
                testPlan.Save();
                Console.WriteLine(" . (1 plan created)");
            }
            else
            {
                testPlan = project.TestPlans.Find(workItems[0].Id);
                Console.WriteLine(" . (plan exists)");
            }

            // Create Test Suites if non exist

            if (testSuiteCount <= 10) // May create duplicate test suites
            {
                Console.Write(" Creating sprint 1 test suites ");

                // suites

                int count = 0;
                IStaticTestSuite staticSuite = project.TestSuites.CreateStatic();
                staticSuite.Title = "Automated";
                testPlan.RootSuite.Entries.Add(staticSuite);
                testPlan.Save();
                Console.Write(".");
                count++;

                staticSuite       = project.TestSuites.CreateStatic();
                staticSuite.Title = "Regression";
                testPlan.RootSuite.Entries.Add(staticSuite);
                testPlan.Save();
                Console.Write(".");
                count++;

                // Requirement-based suites

                // Get PBI work items

                wiql      = "SELECT [System.Id] FROM WorkItems " + "WHERE [System.TeamProject] = '" + TeamProject + "' AND [System.WorkItemType] ='Product Backlog Item'";
                workItems = store.Query(wiql);
                for (int i = 0; i < workItems.Count; i++)
                {
                    WorkItem pbi = workItems[i];

                    // Link Test Case to PBI

                    int testCaseID = (int)TestCases[pbi.Title.ToLower()];
                    WorkItemLinkTypeEnd testedByLink = store.WorkItemLinkTypes.LinkTypeEnds["Tested By"];
                    pbi.WorkItemLinks.Add(new WorkItemLink(testedByLink, testCaseID));
                    pbi.Save();

                    // Create Requirement-based test suite

                    IRequirementTestSuite reqSuite = project.TestSuites.CreateRequirement(pbi);
                    reqSuite.Title = pbi.Title;
                    testPlan.RootSuite.Entries.Add(reqSuite);
                    testPlan.Save();
                    Console.Write(".");
                    count++;
                }

                // Query-based suites

                IDynamicTestSuite querySuite = project.TestSuites.CreateDynamic();
                querySuite.Title = "UI Tests";
                querySuite.Query = project.CreateTestQuery(@"SELECT [System.Id],[System.WorkItemType],[System.Title],[Microsoft.VSTS.Common.Priority],[System.AssignedTo],[System.AreaPath] FROM WorkItems WHERE [System.TeamProject] = @project AND [System.WorkItemType] IN GROUP 'Microsoft.TestCaseCategory' AND [System.AreaPath] UNDER 'Fabrikam' AND [System.IterationPath] UNDER 'Fabrikam\Release 1\Sprint 1' AND [System.Title] CONTAINS 'ui'");
                testPlan.RootSuite.Entries.Add(querySuite);
                testPlan.Save();
                Console.Write(".");
                count++;

                querySuite       = project.TestSuites.CreateDynamic();
                querySuite.Title = "Bug Existence Tests";
                querySuite.Query = project.CreateTestQuery(@"SELECT [System.Id],[System.WorkItemType],[System.Title],[Microsoft.VSTS.Common.Priority],[System.AssignedTo],[System.AreaPath] FROM WorkItems WHERE [System.TeamProject] = @project AND [System.WorkItemType] IN GROUP 'Microsoft.TestCaseCategory' AND [System.AreaPath] UNDER 'Fabrikam' AND [System.IterationPath] UNDER 'Fabrikam\Release 1\Sprint 1' AND [System.Title] CONTAINS 'bug'");
                testPlan.RootSuite.Entries.Add(querySuite);
                testPlan.Save();
                Console.Write(".");
                count++;

                Console.WriteLine(string.Format(" ({0} suites created)", count));
            }
        }