Esempio n. 1
0
            public async void WhenMoviesAreFound_ThenAreProperlyEnriched()
            {
                // Arrange
                var loggerMock = new Mock <ILogger <TheMovieDbAdapter> >();

                var discoverMoviesResponse = _fixture.Create <DiscoverMoviesResponse>();
                var movieDetailResponse    = _fixture.Create <Models.Movie>();
                var theMovieDbGatewayMock  = new Mock <ITheMovieDbGateway>();

                theMovieDbGatewayMock.Setup(g => g.MakeDiscoverMoviesRequestAsync(It.IsAny <DateTime>(), It.IsAny <DateTime>(), It.IsAny <IEnumerable <int> >(), It.IsAny <IEnumerable <string> >(), It.IsAny <int>()))
                .ReturnsAsync(discoverMoviesResponse);
                theMovieDbGatewayMock.Setup(g => g.MakeMovieDetailRequestAsync(It.IsAny <int>(), It.IsAny <IEnumerable <MovieDetailRequestIncludeTypes> >()))
                .ReturnsAsync(movieDetailResponse);

                DiscoverMoviesResponse spy = null;
                var mapperMock             = new Mock <IMapper>();

                mapperMock.Setup(m => m.Map(It.IsAny <DiscoverMoviesResponse>()))
                .Callback <DiscoverMoviesResponse>(r =>
                {
                    spy = r;
                })
                .Returns(_fixture.Create <GetMoviesResponse>());

                var sut = new TheMovieDbAdapter(loggerMock.Object, theMovieDbGatewayMock.Object, mapperMock.Object);

                // Act.
                await sut.GetMoviesAsync(_fixture.Create <DateTime>(), _fixture.Create <DateTime>(), _fixture.Create <IEnumerable <Data.Models.Genre> >(), _fixture.Create <IEnumerable <string> >(), _fixture.Create <int>());

                // Assert
                spy.Results.ToList().Select(r => r.Homepage).Should().BeEquivalentTo(new string[spy.Results.Count()].Select(i => movieDetailResponse.Homepage));
                spy.Results.ToList().Select(r => r.KeywordsEnvelope).Should().BeEquivalentTo(new string[spy.Results.Count()].Select(i => movieDetailResponse.KeywordsEnvelope));
                spy.Results.ToList().Select(r => string.Join(",", r.Genres)).Should().BeEquivalentTo(new string[spy.Results.Count()].Select(i => string.Join(",", movieDetailResponse.Genres)));
            }
Esempio n. 2
0
            public async void WhenMakeDiscoverMoviesRequestAsyncThrowsException_ThenProcessContinues()
            {
                // Arrange
                var loggerMock = new Mock <ILogger <TheMovieDbAdapter> >();

                var theMovieDbGatewayMock = new Mock <ITheMovieDbGateway>();

                theMovieDbGatewayMock.Setup(g => g.MakeDiscoverMoviesRequestAsync(It.IsAny <DateTime>(), It.IsAny <DateTime>(), It.IsAny <IEnumerable <int> >(), It.IsAny <IEnumerable <string> >(), It.IsAny <int>()))
                .ThrowsAsync(new Exception());

                DiscoverMoviesResponse spy = null;
                var mapperMock             = new Mock <IMapper>();

                mapperMock.Setup(m => m.Map(It.IsAny <DiscoverMoviesResponse>()))
                .Callback <DiscoverMoviesResponse>(r =>
                {
                    spy = r;
                })
                .Returns(_fixture.Create <GetMoviesResponse>());

                var sut = new TheMovieDbAdapter(loggerMock.Object, theMovieDbGatewayMock.Object, mapperMock.Object);

                // Act.
                await sut.GetMoviesAsync(_fixture.Create <DateTime>(), _fixture.Create <DateTime>(), _fixture.Create <IEnumerable <Data.Models.Genre> >(), _fixture.Create <IEnumerable <string> >(), _fixture.Create <int>());

                // Assert
                spy.Should().BeNull();
            }
Esempio n. 3
0
        /// <summary>
        ///     Gets the movies asynchronously.
        /// </summary>
        /// <param name="from">The start of the time period the movies have to be released within.</param>
        /// <param name="to">The end of the time period the movies have to be released within.</param>
        /// <param name="genres">Each movie must match at least a genre of this collection.</param>
        /// <param name="keywordIds">Each movie must match at least a keyword identifier of this collection.</param>
        /// <param name="page">The page that corresponds to the TMDb result set.</param>
        /// <returns>Movies that fulfill the provided parameter constraints.</returns>
        public async Task <GetMoviesResponse> GetMoviesAsync(DateTime?from, DateTime?to, IEnumerable <Data.Models.Genre> genres,
                                                             IEnumerable <string> keywordIds, int page)
        {
            var genreTMDbIds = MapGenresToTMDbIds(genres);
            DiscoverMoviesResponse response = null;

            try
            {
                response = await _theMovieDbGateway.MakeDiscoverMoviesRequestAsync(from, to, genreTMDbIds, keywordIds, page);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, $"Error @GetMoviesAsync.MakeDiscoverMoviesRequestAsync [from={from}][to={to}][genreTMDbIds={genreTMDbIds}][keywordIds={keywordIds}][page={page}]");
            }


            if (response?.Results != null)
            {
                List <Task> tasks = new List <Task>();

                foreach (var result in response.Results)
                {
                    tasks.Add(EnrichMovie(result));
                }

                await Task.WhenAll(tasks);
            }

            return(_mapper.Map(response));
        }
Esempio n. 4
0
            public async void WhenMakeMovieDetailRequestAsyncThrowsException_ThenProcessContinues()
            {
                // Arrange
                var loggerMock = new Mock <ILogger <TheMovieDbAdapter> >();

                var discoverMoviesResponse = _fixture.Build <DiscoverMoviesResponse>()
                                             .With(v => v.Results, _fixture
                                                   .CreateMany <Models.Movie>(1))
                                             .Create();

                var theMovieDbGatewayMock = new Mock <ITheMovieDbGateway>();

                theMovieDbGatewayMock.Setup(g => g.MakeDiscoverMoviesRequestAsync(It.IsAny <DateTime>(), It.IsAny <DateTime>(), It.IsAny <IEnumerable <int> >(), It.IsAny <IEnumerable <string> >(), It.IsAny <int>()))
                .ReturnsAsync(discoverMoviesResponse);
                theMovieDbGatewayMock.Setup(g => g.MakeMovieDetailRequestAsync(It.IsAny <int>(), It.IsAny <IEnumerable <MovieDetailRequestIncludeTypes> >()))
                .ThrowsAsync(new Exception());

                DiscoverMoviesResponse spy = null;
                var mapperMock             = new Mock <IMapper>();

                mapperMock.Setup(m => m.Map(It.IsAny <DiscoverMoviesResponse>()))
                .Callback <DiscoverMoviesResponse>(r =>
                {
                    spy = r;
                })
                .Returns(_fixture.Create <GetMoviesResponse>());

                var sut = new TheMovieDbAdapter(loggerMock.Object, theMovieDbGatewayMock.Object, mapperMock.Object);

                // Act.
                await sut.GetMoviesAsync(_fixture.Create <DateTime>(), _fixture.Create <DateTime>(), _fixture.Create <IEnumerable <Data.Models.Genre> >(), _fixture.Create <IEnumerable <string> >(), _fixture.Create <int>());

                var result = spy.Results.ToList()[0];

                // Assert
                result.KeywordsEnvelope.Should().BeEquivalentTo(new GetMovieKeywordsResponse {
                    Keywords = Enumerable.Empty <Keyword>()
                });
                result.Homepage.Should().Be(string.Empty);
                result.Genres.Should().BeEquivalentTo(Enumerable.Empty <Models.Genre>());
            }