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))); }
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(); }
/// <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)); }
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>()); }