private CharacterNameGenerator CreateCharacterNameGenerator(AncestryDetailsModel detailModel)
        {
            var mockRepository = new Mock <ICharacterNameRepository>();

            mockRepository.Setup(x => x.GetAncestry(detailModel.Code)).ReturnsAsync(detailModel);

            var rng = new RandomNumberGenerator();
            var ris = new RandomItemSelector(rng);

            var mockNumberGenerator = new Mock <IRandomNumberGenerator>();

            var generator = new CharacterNameGenerator(mockRepository.Object, ris, rng);

            return(generator);
        }
        private CharacterNameResultModel CreateCharacterName(AncestryDetailsModel ancestry, AncestryDetailsModel.AncestryOptionsModel selectedOption)
        {
            var segment   = _randomItemSelector.GetRandomWeightedItem(selectedOption.SegmentGroups);
            var nameParts = GetNameDefinitions(segment, ancestry.NameParts);
            var name      = CreateNameFromParts(nameParts, selectedOption.SeperatorChancePercentage, selectedOption.NamePartSeperators);

            return(new CharacterNameResultModel
            {
                AncestryCode = ancestry.Code,
                AncestryName = ancestry.Name,
                Definitions = nameParts.Where(x => x.Meanings?.Any() == true).ToArray(),
                Name = name,
                OptionCode = selectedOption.Code,
                OptionName = selectedOption.Name,
            });
        }