diff --git a/docs/Reference/Generated/MigrationTools.Host.xml b/docs/Reference/Generated/MigrationTools.Host.xml
index 26af43b78..3e0a1f487 100644
--- a/docs/Reference/Generated/MigrationTools.Host.xml
+++ b/docs/Reference/Generated/MigrationTools.Host.xml
@@ -11,7 +11,7 @@
- => @"false"
+ => @"true"
@@ -21,37 +21,37 @@
- => @"master"
+ => @"issue/1772"
- => @"6a99c83"
+ => @"06bccf8"
- => @"6a99c8370a13b1807e23ff34c7b12888435a15d6"
+ => @"06bccf8671348e366db1a41cc36e81da315fabab"
- => @"2023-11-23T13:43:28+00:00"
+ => @"2023-12-05T18:16:30+00:00"
- => @"0"
+ => @"3"
- => @"v14.3.2"
+ => @"v14.3.5-3-g06bccf8"
- => @"v14.3.2"
+ => @"v14.3.5"
@@ -66,7 +66,7 @@
- => @"2"
+ => @"5"
@@ -81,7 +81,7 @@
- => @"2"
+ => @"8"
diff --git a/src/VstsSyncMigrator.Core/Execution/MigrationContext/TestPlansAndSuitesMigrationContext.cs b/src/VstsSyncMigrator.Core/Execution/MigrationContext/TestPlansAndSuitesMigrationContext.cs
index 6baf47dd6..0115df1be 100644
--- a/src/VstsSyncMigrator.Core/Execution/MigrationContext/TestPlansAndSuitesMigrationContext.cs
+++ b/src/VstsSyncMigrator.Core/Execution/MigrationContext/TestPlansAndSuitesMigrationContext.cs
@@ -11,6 +11,7 @@
using Microsoft.TeamFoundation.Framework.Client;
using Microsoft.TeamFoundation.Framework.Common;
using Microsoft.TeamFoundation.TestManagement.Client;
+using Microsoft.TeamFoundation.TestManagement.WebApi;
using Microsoft.VisualStudio.Services.Client;
using Microsoft.VisualStudio.Services.Common;
using Microsoft.VisualStudio.Services.TestManagement.TestPlanning.WebApi;
@@ -543,7 +544,7 @@ private ITestSuiteBase CreateNewRequirementTestSuite(ITestSuiteBase source, Work
Id = int.Parse(targetSuite.Id)
}
};
- TestSuite suite = testPlanHttpClient.CreateTestSuiteAsync(testSuiteCreateParams, project, int.Parse(targetPlan.Id)).Result;
+ Microsoft.VisualStudio.Services.TestManagement.TestPlanning.WebApi.TestSuite suite = testPlanHttpClient.CreateTestSuiteAsync(testSuiteCreateParams, project, int.Parse(targetPlan.Id)).Result;
targetSuiteChild = (IRequirementTestSuite)_targetTestStore.Project.TestSuites.Find(suite.Id);
//Replaced soap api with rest api because work item type Bug is no longer part of the Microsoft.Requirement.Category
//targetSuiteChild = _targetTestStore.Project.TestSuites.CreateRequirement(requirement.ToWorkItem());
@@ -605,44 +606,61 @@ private ITestPlan CreateNewTestPlanFromSource(ITestPlan sourcePlan, string newPl
return targetPlan;
}
- private ITestSuiteBase FindSuiteEntry(IStaticTestSuite staticSuite, string titleToFind)
+ private ITestSuiteBase FindSuiteEntry(IStaticTestSuite staticSuite, string titleToFind, ITestSuiteBase sourceSuit)
{
+ Log.LogDebug("TestPlansAndSuitesMigrationContext::FindSuiteEntry");
ITestSuiteBase testSuit = (from s in staticSuite.SubSuites where s.Title == titleToFind select s).SingleOrDefault();
if (testSuit != null)
{
- //Check test suit is in fact the right one
- var sourceWI = Engine.Source.WorkItems.GetWorkItem(testSuit.Id.ToString());
+ Log.LogDebug("TestPlansAndSuitesMigrationContext::FindSuiteEntry::FOUND Test Suit {id}", testSuit.Id);
+ //Get Source ReflectedWorkItemId
+ var sourceWI = Engine.Source.WorkItems.GetWorkItem(sourceSuit.Id.ToString());
+ Log.LogDebug("TestPlansAndSuitesMigrationContext::FindSuiteEntry::SourceWorkItem[{workItemId]", sourceWI.Id);
string expectedReflectedId = Engine.Source.WorkItems.CreateReflectedWorkItemId(sourceWI).ToString();
- string workItemReflectedId = (string)sourceWI.Fields[Engine.Target.Config.AsTeamProjectConfig().ReflectedWorkItemIDFieldName].Value;
+ Log.LogDebug("TestPlansAndSuitesMigrationContext::FindSuiteEntry::SourceWorkItem[{workItemId] ~[{ReflectedWorkItemId]", sourceWI.Id, expectedReflectedId);
+ //Get Target ReflectedWorkItemId
+ var targetWI = Engine.Target.WorkItems.GetWorkItem(testSuit.Id.ToString());
+ Log.LogDebug("TestPlansAndSuitesMigrationContext::FindSuiteEntry::TargetWorkItem[{workItemId]", targetWI.Id);
+ string workItemReflectedId = (string)targetWI.Fields[Engine.Target.Config.AsTeamProjectConfig().ReflectedWorkItemIDFieldName].Value;
+ Log.LogDebug("TestPlansAndSuitesMigrationContext::FindSuiteEntry::TargetWorkItem[{workItemId] [{ReflectedWorkItemId]", targetWI.Id, workItemReflectedId);
+ //Compaire
if (workItemReflectedId != expectedReflectedId)
{
+ Log.LogDebug("TestPlansAndSuitesMigrationContext::FindSuiteEntry: Source ReflectedWorkItemId and Target ReflectedWorkItemId do not match");
testSuit = null;
}
}
return testSuit;
}
- private ITestPlan FindTestPlan(TestManagementContext tmc, string name)
+ private ITestPlan FindTestPlan(string planName, int sourcePlanId)
{
Log.LogDebug("TestPlansAndSuitesMigrationContext::FindTestPlan");
- ITestPlan testPlan = (from p in tmc.Project.TestPlans.Query("Select * From TestPlan") where p.Name == name select p).SingleOrDefault();
+ ITestPlan testPlan = (from p in _targetTestStore.Project.TestPlans.Query("Select * From TestPlan") where p.Name == planName select p).SingleOrDefault();
if (testPlan != null)
{
- Log.LogDebug("TestPlansAndSuitesMigrationContext::FindTestPlan:: FOUND Test Plan with {name}", name);
- //Check test plan is in fact the right one
- var sourceWI = Engine.Source.WorkItems.GetWorkItem(testPlan.Id.ToString());
+ Log.LogDebug("TestPlansAndSuitesMigrationContext::FindTestPlan:: FOUND Test Plan with {name}", planName);
+ //Get Source ReflectedWorkItemId
+ var sourceWI = Engine.Source.WorkItems.GetWorkItem(sourcePlanId);
+ Log.LogDebug("TestPlansAndSuitesMigrationContext::FindTestPlan::SourceWorkItem[{workItemId]", sourceWI.Id);
string expectedReflectedId = Engine.Source.WorkItems.CreateReflectedWorkItemId(sourceWI).ToString();
- string workItemReflectedId = (string)sourceWI.Fields[Engine.Target.Config.AsTeamProjectConfig().ReflectedWorkItemIDFieldName].Value;
+ Log.LogDebug("TestPlansAndSuitesMigrationContext::FindTestPlan::SourceWorkItem[{workItemId] ~[{ReflectedWorkItemId]", sourceWI.Id, expectedReflectedId);
+ //Get Target ReflectedWorkItemId
+ var targetWI = Engine.Target.WorkItems.GetWorkItem(testPlan.Id.ToString());
+ Log.LogDebug("TestPlansAndSuitesMigrationContext::FindTestPlan::TargetWorkItem[{workItemId]", targetWI.Id);
+ string workItemReflectedId = (string)targetWI.Fields[Engine.Target.Config.AsTeamProjectConfig().ReflectedWorkItemIDFieldName].Value;
+ Log.LogDebug("TestPlansAndSuitesMigrationContext::FindTestPlan::TargetWorkItem[{workItemId] [{ReflectedWorkItemId]", targetWI.Id, workItemReflectedId);
+ //Compaire
if (workItemReflectedId != expectedReflectedId)
{
- Log.LogDebug("TestPlansAndSuitesMigrationContext::FindTestPlan:: Fouund test plan with name {name} does not match {workItemReflectedId} ", name, workItemReflectedId);
+ Log.LogDebug("TestPlansAndSuitesMigrationContext::FindTestPlan: Source ReflectedWorkItemId and Target ReflectedWorkItemId do not match");
testPlan = null;
}
}
else
{
- Log.LogDebug("TestPlansAndSuitesMigrationContext::FindTestPlan:: NOT FOUND Test Plan with {name}", name);
+ Log.LogDebug("TestPlansAndSuitesMigrationContext::FindTestPlan:: NOT FOUND Test Plan with {name}", planName);
}
return testPlan;
}
@@ -861,7 +879,7 @@ private void ProcessTestPlan(ITestPlan sourcePlan)
? $"{Engine.Source.WorkItems.GetProject().Name}-{sourcePlan.Name}"
: $"{sourcePlan.Name}";
InnerLog(sourcePlan, $"Process Plan {newPlanName}", 0, true);
- var targetPlan = FindTestPlan(_targetTestStore, newPlanName);
+ var targetPlan = FindTestPlan(newPlanName, sourcePlan.Id);
//if (targetPlan != null && TargetPlanContansTag(targetPlan.Id))
//{
// return;
@@ -921,7 +939,7 @@ private void ProcessTestPlan(ITestPlan sourcePlan)
targetPlan.Save();
// Load the plan again, because somehow it doesn't let me set configurations on the already loaded plan
InnerLog(sourcePlan, $"ApplyConfigurationsAndAssignTesters {targetPlan.Name}", 5); ;
- ITestPlan targetPlan2 = FindTestPlan(_targetTestStore, targetPlan.Name);
+ ITestPlan targetPlan2 = FindTestPlan(targetPlan.Name, sourcePlan.Id);
if (targetPlan2 != null)
{
ApplyConfigurationsAndAssignTesters(sourcePlan.RootSuite, targetPlan2.RootSuite);
@@ -957,7 +975,7 @@ private void ProcessTestSuite(ITestSuiteBase sourceSuite, ITestSuiteBase targetP
////////////////////////////////////
InnerLog(sourceSuite, $" Processing {sourceSuite.TestSuiteType} : {sourceSuite.Id} - {sourceSuite.Title} ", 5);
- var targetSuiteChild = FindSuiteEntry((IStaticTestSuite)targetParent, sourceSuite.Title);
+ var targetSuiteChild = FindSuiteEntry((IStaticTestSuite)targetParent, sourceSuite.Title, sourceSuite);
// Target suite is not found in target system. We should create it.
if (targetSuiteChild == null)