public void Given_A_YugiohBanlist_If_Format_Is_Not_Found_Should_Throw_ArgumentException()
        {
            // Arrange
            var yugiohBanlist = new YugiohBanlist();

            _banlistRepository.Add(Arg.Any <Banlist>()).Returns(new Banlist());

            // Act
            Func <Task <Banlist> > act = () => _sut.Add(yugiohBanlist);

            // Assert
            act.Should().Throw <ArgumentException>();
        }
        public async Task Given_A_YugiohBanlist_Should_Invoke_BanlistCardService_Update_Method_Once()
        {
            // Arrange
            const int expected      = 1;
            var       yugiohBanlist = new YugiohBanlist();

            _formatRepository.FormatByAcronym(Arg.Any <string>()).Returns(new Format());
            _banlistRepository.Add(Arg.Any <Banlist>()).Returns(new Banlist());

            // Act
            await _sut.Add(yugiohBanlist);

            // Assert
            await _banlistCardService.Received(expected).Update(Arg.Any <long>(), Arg.Any <List <YugiohBanlistSection> >());
        }
        public async Task Given_A_YugiohBanlist_Should_Invoke_FormatByAcronym_Method_Once()
        {
            // Arrange
            const int expected      = 1;
            var       yugiohBanlist = new YugiohBanlist();

            _formatRepository.FormatByAcronym(Arg.Any <string>()).Returns(new Format());
            _banlistRepository.Add(Arg.Any <Banlist>()).Returns(new Banlist());

            // Act
            await _sut.Add(yugiohBanlist);

            // Assert
            await _formatRepository.Received(expected).FormatByAcronym(Arg.Any <string>());
        }
Example #4
0
        public async Task Given_A_YugiohBanlist_Should_Invoke_GetBanlistById_Method_Once()
        {
            // Arrange
            const int expected      = 1;
            var       yugiohBanlist = new YugiohBanlist {
                BanlistType = BanlistType.Tcg
            };

            _formatRepository.FormatByAcronym(Arg.Any <string>()).Returns(new Format());
            _banlistRepository.Update(Arg.Any <Banlist>()).Returns(new Banlist());
            _banlistRepository.GetBanlistById(Arg.Any <int>()).Returns(new Banlist());

            // Act
            await _sut.Update(yugiohBanlist);

            // Assert
            await _banlistRepository.Received(expected).GetBanlistById(Arg.Any <int>());
        }
        public async Task <Banlist> Add(YugiohBanlist yugiohBanlist)
        {
            var format = await _formatRepository.FormatByAcronym(yugiohBanlist.BanlistType.ToString());

            if (format == null)
            {
                throw new ArgumentException($"Format with acronym '{yugiohBanlist.BanlistType.ToString()}' not found.");
            }

            var newBanlist = _mapper.Map <Banlist>(yugiohBanlist);

            newBanlist.FormatId = format.Id;

            newBanlist = await _banlistRepository.Add(newBanlist);

            newBanlist.BanlistCard = await _banlistCardService.Update(newBanlist.Id, yugiohBanlist.Sections);

            return(newBanlist);
        }
Example #6
0
        public async Task <Banlist> AddOrUpdate(YugiohBanlist yugiohBanlist)
        {
            var format = await _formatService.FormatByAcronym(yugiohBanlist.BanlistType.ToString());

            if (format == null)
            {
                throw new ArgumentException($"Format with acronym '{yugiohBanlist.BanlistType.ToString()}' not found.");
            }

            var banlist = await _banlistService.BanlistById(yugiohBanlist.ArticleId);

            if (banlist == null)
            {
                var addCommand = new AddBanlistCommand
                {
                    Id          = yugiohBanlist.ArticleId,
                    FormatId    = format.Id,
                    Name        = yugiohBanlist.Title,
                    ReleaseDate = yugiohBanlist.StartDate
                };

                banlist = await _banlistService.Add(addCommand);
            }
            else
            {
                var updateCommand = new UpdateBanlistCommand
                {
                    Id          = yugiohBanlist.ArticleId,
                    FormatId    = format.Id,
                    Name        = yugiohBanlist.Title,
                    ReleaseDate = yugiohBanlist.StartDate
                };

                banlist = await _banlistService.Update(updateCommand);
            }

            var banlistCards = await _banlistCardsService.MapToBanlistCards(banlist.Id, yugiohBanlist.Sections);

            banlist.Cards = await _banlistService.Update(banlist.Id, new UpdateBanlistCardsCommand { BanlistCards = banlistCards });

            return(banlist);
        }
        public async Task <Banlist> Update(YugiohBanlist yugiohBanlist)
        {
            var format = await _formatRepository.FormatByAcronym(yugiohBanlist.BanlistType.ToString());

            if (format == null)
            {
                throw new ArgumentException($"Format with acronym '{yugiohBanlist.BanlistType.ToString()}' not found.");
            }

            var banlistToupdate = await _banlistRepository.GetBanlistById(yugiohBanlist.ArticleId);

            banlistToupdate.FormatId    = format.Id;
            banlistToupdate.Name        = yugiohBanlist.Title;
            banlistToupdate.ReleaseDate = yugiohBanlist.StartDate;
            banlistToupdate.Updated     = DateTime.UtcNow;

            banlistToupdate = await _banlistRepository.Update(banlistToupdate);

            banlistToupdate.BanlistCard = await _banlistCardService.Update(banlistToupdate.Id, yugiohBanlist.Sections);

            return(banlistToupdate);
        }
Example #8
0
        public async Task <ArticleProcessed> Process(Article article)
        {
            var response = new ArticleProcessed {
                Article = article
            };

            var articleDetailsList = await _wikiArticle.Details((int)article.Id);

            var(_, expandedArticle) = articleDetailsList.Items.First();

            var banlistArticleSummary = BanlistHelpers.ExtractBanlistArticleDetails(expandedArticle.Id, expandedArticle.Abstract);

            if (banlistArticleSummary != null)
            {
                const char beginChar = '「';
                const char endChar   = '」';

                var banlist = new YugiohBanlist
                {
                    ArticleId   = banlistArticleSummary.ArticleId,
                    Title       = expandedArticle.Title,
                    BanlistType = banlistArticleSummary.BanlistType,
                    StartDate   = banlistArticleSummary.StartDate
                };

                var banlistContentResult = await _wikiArticle.Simple(banlistArticleSummary.ArticleId);

                _logger.LogInformation($"{banlist.BanlistType.ToString()}, {banlist.Title}, {banlist.StartDate}");
                foreach (var section in banlistContentResult.Sections)
                {
                    // skip references section
                    if (section.Title.ToLower() == "references")
                    {
                        continue;
                    }

                    // new section
                    var ybls = new YugiohBanlistSection
                    {
                        Title   = StringHelpers.RemoveBetween(section.Title, beginChar, endChar).Trim(),
                        Content = ContentResultHelpers.GetSectionContentList(section).OrderBy(c => c).ToList()
                    };

                    // remove invalid characters
                    if (ybls.Content.Any())
                    {
                        ybls.Content = ybls.Content.Select(c => StringHelpers.RemoveBetween(c, beginChar, endChar)).ToList();
                    }

                    banlist.Sections.Add(ybls);
                }

                response.Banlist = banlist;

                var publishBanlistResult = await _banlistDataQueue.Publish(new ArticleProcessed { Article = article, Banlist = banlist });

                response.IsSuccessful = publishBanlistResult.IsSuccessful;
            }

            return(response);
        }
Example #9
0
        public async Task <ArticleTaskResult> ProcessItem(UnexpandedArticle item)
        {
            var response = new ArticleTaskResult {
                Article = item
            };

            var articleDetailsList = await _wikiArticle.Details(item.Id);

            var articleDetails = articleDetailsList.Items.First();

            var banlistArticleSummary = BanlistHelpers.ExtractBanlistArticleDetails(articleDetails.Value.Id, articleDetails.Value.Abstract);

            if (banlistArticleSummary != null)
            {
                const char beginChar = '「';
                const char endChar   = '」';

                var banlist = new YugiohBanlist
                {
                    ArticleId   = banlistArticleSummary.ArticleId,
                    Title       = articleDetails.Value.Title,
                    BanlistType = banlistArticleSummary.BanlistType,
                    StartDate   = banlistArticleSummary.StartDate
                };


                var banlistContentResult = await _wikiArticle.Simple(banlistArticleSummary.ArticleId);

                foreach (var section in banlistContentResult.Sections)
                {
                    // skip references section
                    if (section.Title.ToLower() == "references")
                    {
                        continue;
                    }

                    // new section
                    var ybls = new YugiohBanlistSection
                    {
                        Title   = StringHelpers.RemoveBetween(section.Title, beginChar, endChar).Trim(),
                        Content = ContentResultHelpers.GetSectionContentList(section).OrderBy(c => c).ToList()
                    };

                    // remove invalid characters
                    if (ybls.Content.Any())
                    {
                        ybls.Content = ybls.Content.Select(c => StringHelpers.RemoveBetween(c, beginChar, endChar)).ToList();
                    }

                    banlist.Sections.Add(ybls);
                }

                await _banlistService.AddOrUpdate(banlist);

                response.Data = banlist;

                response.IsSuccessfullyProcessed = true;
            }

            return(response);
        }