public void GetTfsNodeStructure_WithDifferentAreaPath()
        {
            var nodeStructure = _services.GetRequiredService <TfsNodeStructure>();

            const string targetStructureName = "Area\\test";
            const string sourceStructureName = "Area";

            nodeStructure.ApplySettings(new TfsNodeStructureSettings
            {
                SourceProjectName = "SourceProject",
                TargetProjectName = "TargetProject",
                FoundNodes        = new Dictionary <string, bool>
                {
                    { @"TargetProject\Area\test\PUL", true }
                }
            });

            const string sourceNodeName = @"SourceProject\PUL";
            const TfsNodeStructureType nodeStructureType = TfsNodeStructureType.Area;


            var newNodeName = nodeStructure.GetNewNodeName(sourceNodeName, nodeStructureType, targetStructureName, sourceStructureName);

            Assert.AreEqual(newNodeName, @"TargetProject\test\PUL");
        }
Ejemplo n.º 2
0
        public string GetNewNodeName(string sourceNodeName, TfsNodeStructureType nodeStructureType)
        {
            Log.LogDebug("NodeStructureEnricher.GetNewNodeName({sourceNodeName}, {nodeStructureType})", sourceNodeName, nodeStructureType.ToString());
            string targetStructureName = NodeStructureTypeToLanguageSpecificName(_sourceLanguageMaps, nodeStructureType); //.ToLower();
            string sourceStructureName = NodeStructureTypeToLanguageSpecificName(_targetLanguageMaps, nodeStructureType); //.ToLower();

            // Change casing to lower
            //sourceNodeName = sourceNodeName.ToLower();

            // Replace project name with new name (if necessary) and inject nodePath (Area or Iteration) into path for node validation
            string newNodeName;

            if (_prefixProjectToNodes)
            {
                newNodeName = $@"{_targetProjectName}\{targetStructureName}\{sourceNodeName}";
            }
            else
            {
                var regex = new Regex(Regex.Escape(_sourceProjectName), RegexOptions.IgnoreCase);
                if (sourceNodeName.StartsWith($@"{_sourceProjectName}\{sourceStructureName}\"))
                {
                    newNodeName = regex.Replace(sourceNodeName, _targetProjectName, 1);
                }
                else
                {
                    newNodeName = regex.Replace(sourceNodeName, $@"{_targetProjectName}\{targetStructureName}", 1);
                }
            }

            // Validate the node exists
            if (!TargetNodeExists(newNodeName))
            {
                Log.LogWarning("The Node '{newNodeName}' does not exist, leaving as '{newProjectName}'. This may be because it has been renamed or moved and no longer exists, or that you have not migrated the Node Structure yet.", newNodeName, _targetProjectName);
                newNodeName = _targetProjectName;
            }

            // Remove nodePath (Area or Iteration) from path for correct population in work item
            if (newNodeName.StartsWith(_targetProjectName + '\\' + targetStructureName + '\\'))
            {
                newNodeName = newNodeName.Remove(newNodeName.IndexOf($@"{targetStructureName}\"), $@"{targetStructureName}\".Length);
            }
            else if (newNodeName.StartsWith(_targetProjectName + '\\' + targetStructureName))
            {
                newNodeName = newNodeName.Remove(newNodeName.IndexOf($@"{targetStructureName}"), $@"{targetStructureName}".Length);
            }
            return(newNodeName);
        }
        public string NodeStructureTypeToLanguageSpecificName(IMigrationClient client, TfsNodeStructureType value)
        {
            // insert switch statement here
            switch (value)
            {
            case TfsNodeStructureType.Area:
                return(client.Config.AsTeamProjectConfig().LanguageMaps.AreaPath);

            case TfsNodeStructureType.Iteration:
                return(client.Config.AsTeamProjectConfig().LanguageMaps.IterationPath);

            default:
                throw new InvalidOperationException("Not a valid NodeStructureType ");
            }
        }
        private string NodeStructureTypeToLanguageSpecificName(TfsLanguageMapOptions languageMaps, TfsNodeStructureType value)
        {
            // insert switch statement here
            switch (value)
            {
            case TfsNodeStructureType.Area:
                return(languageMaps.AreaPath);

            case TfsNodeStructureType.Iteration:
                return(languageMaps.IterationPath);

            default:
                throw new InvalidOperationException("Not a valid NodeStructureType ");
            }
        }