Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update FindTestPlan to actually check the right things #1773

Merged
merged 5 commits into from
Dec 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions docs/Reference/Generated/MigrationTools.Host.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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());
Expand Down Expand Up @@ -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;
MrHinsh marked this conversation as resolved.
Show resolved Hide resolved
}

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;
}
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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)
Expand Down