Beispiel #1
0
        public void Infer_SuccessfullyAccountsForExistingNamesWithNameUpdate()
        {
            var existingNames = new List <string>()
            {
                "Page1"
            };

            Func <IEnumerable <string> > getExistingNames = () => { return(existingNames); };

            var config = new ItemNameValidationConfig()
            {
                ReservedNames = new string[]
                {
                    "Page",
                },
                ValidateExistingNames = true,
            };

            var validationService = new ItemNameService(config, getExistingNames);
            var result            = validationService.Infer("Page");

            Assert.Equal("Page2", result);

            existingNames.Add("Page2");
            var result2 = validationService.Infer("Page");

            Assert.Equal("Page3", result2);
        }
Beispiel #2
0
        public void Validate_SuccessfullyAccountsForEmptyNames()
        {
            var config = new ItemNameValidationConfig()
            {
                ValidateEmptyNames = true,
            };

            var validationService = new ItemNameService(config, null);
            var result            = validationService.Validate(string.Empty);

            Assert.False(result.IsValid);
            Assert.Contains(result.Errors, e => e.ErrorType == ValidationErrorType.EmptyName);
            Assert.Contains(result.Errors, e => e.ValidatorName == "EmptyNameValidator");
        }
Beispiel #3
0
        public void Infer_SuccessfullyAccountsForReservedNames()
        {
            var config = new ItemNameValidationConfig()
            {
                ReservedNames = new string[]
                {
                    "Page",
                },
            };

            var validationService = new ItemNameService(config, null);
            var result            = validationService.Infer("Page");

            Assert.Equal("Page1", result);
        }
Beispiel #4
0
#pragma warning disable RECS0154 // Parameter is never used - but used by method which takes an action which is passed a template
        public static string GetRandomName(TemplateInfo template)
#pragma warning restore RECS0154 // Parameter is never used
        {
            for (int i = 0; i < 10; i++)
            {
                var itemNameValidationService = new ItemNameService(GenContext.ToolBox.Repo.ItemNameValidationConfig, () => new string[] { });
                var randomName = Path.GetRandomFileName().Replace(".", string.Empty);
                if (itemNameValidationService.Validate(randomName).IsValid)
                {
                    return(randomName);
                }
            }

            throw new ApplicationException("No valid randomName could be generated");
        }
Beispiel #5
0
        public void Validate_SuccessfullyAccountsForDefaultNames(string language)
        {
            SetUpFixtureForTesting(language);

            var config = new ItemNameValidationConfig()
            {
                ValidateDefaultNames = true,
            };

            var validationService = new ItemNameService(config, null);
            var result            = validationService.Validate("LiveTile");

            Assert.False(result.IsValid);
            Assert.Contains(result.Errors, e => e.ErrorType == ValidationErrorType.ReservedName);
            Assert.Contains(result.Errors, e => e.ValidatorName == "DefaultNamesValidator");
        }
Beispiel #6
0
        protected async Task <(string ProjectPath, string ProjecName)> AssertGenerationOneByOneAsync(string itemName, UserSelectionContext context, string itemId, bool cleanGeneration = true)
        {
            BaseGenAndBuildFixture.SetCurrentLanguage(context.Language);
            BaseGenAndBuildFixture.SetCurrentPlatform(context.Platform);

            var itemTemplate = _fixture.Templates().FirstOrDefault(t => t.Identity == itemId);
            var finalName    = itemTemplate.GetDefaultName();

            if (itemTemplate.GetItemNameEditable())
            {
                var nameValidationService = new ItemNameService(GenContext.ToolBox.Repo.ItemNameValidationConfig, () => new string[] { });
                finalName = nameValidationService.Infer(finalName);
            }

            var projectName     = $"{ShortProjectType(context.ProjectType)}{finalName}{ShortLanguageName(context.Language)}";
            var destinationPath = Path.Combine(_fixture.TestProjectsPath, projectName, projectName);

            GenContext.Current = new FakeContextProvider
            {
                ProjectName          = projectName,
                DestinationPath      = destinationPath,
                GenerationOutputPath = destinationPath,
            };

            var userSelection = _fixture.SetupProject(context);
            var templateInfo  = GenContext.ToolBox.Repo.GetTemplateInfo(itemTemplate, context);

            _fixture.AddItem(userSelection, templateInfo, BaseGenAndBuildFixture.GetDefaultName);

            await NewProjectGenController.Instance.UnsafeGenerateProjectAsync(userSelection);

            var resultPath = Path.Combine(_fixture.TestProjectsPath, projectName);

            // Assert
            Assert.True(Directory.Exists(resultPath));
            Assert.True(Directory.GetFiles(resultPath, "*.*", SearchOption.AllDirectories).Count() > 2);

            // Clean
            if (cleanGeneration)
            {
                Fs.SafeDeleteDirectory(resultPath);
            }

            return(resultPath, projectName);
        }
Beispiel #7
0
        public void Validate_SuccessfullyAccountsForRegex()
        {
            var config = new ItemNameValidationConfig()
            {
                Regexs = new RegExConfig[]
                {
                    new RegExConfig()
                    {
                        Name    = "itemEndsWithPage",
                        Pattern = ".*(?<!page)$",
                    },
                },
            };

            var validationService = new ItemNameService(config, null);
            var result            = validationService.Validate("Testpage");

            Assert.False(result.IsValid);
            Assert.Contains(result.Errors, e => e.ErrorType == ValidationErrorType.Regex);
            Assert.Contains(result.Errors, e => e.ValidatorName == "itemEndsWithPage");
        }
Beispiel #8
0
        public void AddItem(UserSelection userSelection, TemplateInfo template, Func <TemplateInfo, string> getName)
        {
            if (template.MultipleInstance || !AlreadyAdded(userSelection, template))
            {
                var itemName  = getName(template);
                var usedNames = userSelection.Pages.Select(p => p.Name)
                                .Concat(userSelection.Features.Select(f => f.Name))
                                .Concat(userSelection.Services.Select(f => f.Name))
                                .Concat(userSelection.Testing.Select(f => f.Name));

                if (template.ItemNameEditable)
                {
                    var itemBameValidationService = new ItemNameService(GenContext.ToolBox.Repo.ItemNameValidationConfig, () => usedNames);
                    itemName = itemBameValidationService.Infer(itemName);
                }
                else
                {
                    itemName = template.DefaultName;
                }

                AddItem(userSelection, itemName, template);
            }
        }
Beispiel #9
0
 public static void Initialize(Func <IEnumerable <string> > getNames, Func <IEnumerable <string> > getPageNames)
 {
     _getNames              = getNames;
     _getPageNames          = getPageNames;
     _itemValidationService = new ItemNameService(GenContext.ToolBox.Repo.ItemNameValidationConfig, _getNames);
 }
Beispiel #10
0
        internal static void ValidateUserSelection(UserSelection userSelection, bool isNewProject)
        {
            if (isNewProject)
            {
                var rootDir = Directory.GetParent(Directory.GetParent(GenContext.Current.DestinationPath).FullName).FullName;

                var projectNameService = new ProjectNameService(GenContext.ToolBox.Repo.ProjectNameValidationConfig, () => Fs.GetExistingFolderNames(rootDir));

                var result = projectNameService.Validate(GenContext.Current.ProjectName);
                {
                    if (!result.IsValid)
                    {
                        var errors = string.Join(Environment.NewLine, result.Errors.Select(e => $"Error: {e.ErrorType}; Validator: {e.ValidatorName}."));
                        throw new InvalidDataException(string.Format(StringRes.ErrorProjectNameValidationFailed, GenContext.Current.ProjectName, Environment.NewLine + errors));
                    }
                }
            }

            foreach (var item in userSelection.Items)
            {
                var template = GenContext.ToolBox.Repo.Find(t => t.Identity == item.TemplateId);

                if (template.GetItemNameEditable())
                {
                    Func <IEnumerable <string> > existingNames = () => userSelection.Items.Where(t => t.TemplateId != template.Identity).Select(n => n.Name);

                    var itemNameService = new ItemNameService(GenContext.ToolBox.Repo.ItemNameValidationConfig, existingNames);

                    var validationResult = itemNameService.Validate(item.Name);
                    {
                        if (!validationResult.IsValid)
                        {
                            var errors = string.Join(Environment.NewLine, validationResult.Errors.Select(e => $"Error: {e.ErrorType}; Validator: {e.ValidatorName}."));
                            throw new InvalidDataException(string.Format(StringRes.ErrorNamingValidationFailed, item.Name, Environment.NewLine + errors));
                        }
                    }
                }

                var dependencies = GenContext.ToolBox.Repo.GetDependencies(template, userSelection.Context, new List <ITemplateInfo>());

                foreach (var dependency in dependencies)
                {
                    if (!userSelection.Items.Any(i => i.TemplateId == dependency.Identity))
                    {
                        throw new InvalidDataException(string.Format(StringRes.ErrorDependencyMissing, dependency));
                    }
                }

                var requirements = GenContext.ToolBox.Repo.GetRequirements(template, userSelection.Context);

                if (requirements.Count() > 0 && !userSelection.Items.Any(i => requirements.Select(r => r.Identity).Contains(i.TemplateId)))
                {
                    throw new InvalidDataException(string.Format(StringRes.ErrorRequirementMissing, requirements.Select(r => r.Name).Aggregate((i, j) => $"{i},{j}")));
                }

                var exclusionTemplates = GenContext.ToolBox.Repo.GetExclusions(template, userSelection.Context);

                foreach (var exclusion in exclusionTemplates)
                {
                    if (userSelection.Items.Any(i => i.TemplateId == exclusion.Identity))
                    {
                        throw new InvalidDataException(string.Format(StringRes.ErrorExcludedTemplatesFound, exclusion.Name));
                    }
                }
            }
        }