Esempio n. 1
0
        public async Task CharacterUseCaseTest_GetByIdAsync_Success()
        {
            // Arrange
            var characterInput       = CharacterInputFaker.Create().Generate();
            var characterDataWrapper = CharacterDataWrapperFaker.Create().Generate();

            // Setup
            _characterRepository
            .Setup(p => p.GetCharacter(characterInput))
            .Returns(Task.FromResult(characterDataWrapper));

            // Act
            var result = await _characterUseCase.GetByIdAsync(characterInput);

            //Assert
            Assert.True(result.Data.Results.Any());
        }
Esempio n. 2
0
        public async Task CharacterUseCaseTest_GetByIdAsync_NotFound()
        {
            // Arrange
            var characterInput       = CharacterInputFaker.Create().Generate();
            var characterDataWrapper = CharacterDataWrapperFaker.Create().Generate();

            characterDataWrapper.Data.Results.Clear();
            characterDataWrapper.Data.Count = 0;

            // Setup
            _characterRepository
            .Setup(p => p.GetCharacter(characterInput))
            .Returns(Task.FromResult(characterDataWrapper));

            // Act
            var exception = await Assert.ThrowsAsync <NotFoundException>(async() => await _characterUseCase.GetByIdAsync(characterInput));

            //Assert
            Assert.Contains(ExceptionMessages.BN008, exception.Message);
        }
        public async Task <CharacterDataWrapper> GetCharacter(CharacterInput characterInput)
        {
            var query = _context.Set <Character>().AsNoTracking().AsQueryable();

            query = query
                    .Include(i => i.CharacterComics).ThenInclude(t => t.Comic)
                    .Include(i => i.CharacterEvents).ThenInclude(t => t.Event)
                    .Include(i => i.CharacterSeries).ThenInclude(t => t.Serie)
                    .Include(i => i.CharacterStories).ThenInclude(t => t.Story)
                    .Include(i => i.Urls)
                    .Include(i => i.Thumbnail);

            if (characterInput.CharacterId.HasValue)
            {
                query = query.Where(w => w.Id == characterInput.CharacterId.Value);
            }
            else
            {
                var comicIds = DataHelper.GetIdList(characterInput.Comics);
                var eventIds = DataHelper.GetIdList(characterInput.Events);
                var serieIds = DataHelper.GetIdList(characterInput.Series);
                var storyIds = DataHelper.GetIdList(characterInput.Stories);

                query = query
                        .Where(w =>
                               (string.IsNullOrEmpty(characterInput.Name) || w.Name.ToLowerInvariant().Contains(characterInput.Name.ToLowerInvariant())) &&
                               (string.IsNullOrEmpty(characterInput.NameStartsWith) || w.Name.ToLowerInvariant().StartsWith(characterInput.NameStartsWith.ToLowerInvariant())) &&
                               (!characterInput.ModifiedSince.HasValue || w.Modified.Date > characterInput.ModifiedSince.Value.Date) &&
                               (!comicIds.Any() || w.CharacterComics.Any(s => comicIds.Contains(s.ComicId))) &&
                               (!eventIds.Any() || w.CharacterEvents.Any(s => eventIds.Contains(s.EventId))) &&
                               (!serieIds.Any() || w.CharacterSeries.Any(s => serieIds.Contains(s.SerieId))) &&
                               (!storyIds.Any() || w.CharacterStories.Any(s => storyIds.Contains(s.StoryId)))
                               );

                switch (characterInput.OrderBy)
                {
                case Domain.Enums.CharacterOrderByEnum.Name:
                    query = query.OrderBy(o => o.Name);
                    break;

                case Domain.Enums.CharacterOrderByEnum.Modified:
                    query = query.OrderBy(o => o.Modified);
                    break;

                case Domain.Enums.CharacterOrderByEnum.NameDesc:
                    query = query.OrderByDescending(o => o.Name);
                    break;

                case Domain.Enums.CharacterOrderByEnum.ModifiedDesc:
                    query = query.OrderByDescending(o => o.Modified);
                    break;

                default:
                    query = query.OrderBy(o => o.Name);
                    break;
                }
            }

            var result = await query.ToPagedListAsync(characterInput.Offset.Value, characterInput.Limit.Value);

            var characterDataWrapper = CharacterDataWrapperFaker.Create().Generate();

            characterDataWrapper.Data = new CharacterDataContainer()
            {
                Count   = result.Count,
                Limit   = result.Limit,
                Offset  = result.Offset,
                Total   = result.Total,
                Results = result.Results.Select(s => new CharacterModel()
                {
                    Id          = s.Id,
                    Name        = s.Name,
                    Description = s.Description,
                    Modified    = s.Modified,
                    ResourceURI = s.ResourceUri,
                    Thumbnail   = new ThumbnailModel()
                    {
                        Extension = s.Thumbnail.Extension,
                        Path      = s.Thumbnail.Path
                    },
                    Urls = s.Urls.Select(s1 => new UrlModel()
                    {
                        Type = s1.Type,
                        Url  = s1.FullUrl
                    }).ToList(),
                    Comics = new ComicList()
                    {
                        Available     = s.CharacterComics.Count,
                        CollectionURI = Guid.NewGuid().ToString(),
                        Returned      = s.CharacterComics.Count,
                        Items         = s.CharacterComics.Select(s2 => new ComicSummary()
                        {
                            Name        = s2.Comic.Title,
                            ResourceURI = Guid.NewGuid().ToString()
                        }).ToList()
                    },
                    Events = new EventList()
                    {
                        Available     = s.CharacterComics.Count,
                        CollectionURI = Guid.NewGuid().ToString(),
                        Returned      = s.CharacterComics.Count,
                        Items         = s.CharacterEvents.Select(s2 => new EventSummary()
                        {
                            Name        = s2.Event.Title,
                            ResourceURI = Guid.NewGuid().ToString()
                        }).ToList()
                    },
                    Series = new SerieList()
                    {
                        Available     = s.CharacterSeries.Count,
                        CollectionURI = Guid.NewGuid().ToString(),
                        Returned      = s.CharacterSeries.Count,
                        Items         = s.CharacterSeries.Select(s2 => new SerieSummary()
                        {
                            Name        = s2.Serie.Title,
                            ResourceURI = Guid.NewGuid().ToString()
                        }).ToList()
                    },
                    Stories = new StoryList()
                    {
                        Available     = s.CharacterStories.Count,
                        CollectionURI = Guid.NewGuid().ToString(),
                        Returned      = s.CharacterStories.Count,
                        Items         = s.CharacterStories.Select(s2 => new StorySummary()
                        {
                            Name        = s2.Story.Title,
                            ResourceURI = Guid.NewGuid().ToString()
                        }).ToList()
                    }
                }).ToList()
            };

            return(characterDataWrapper);
        }