public void GetMovieAlternativeTitlesById_When_QueryIsNullOrWhitespace_Throws_StrategyCorpsException(int id)
        {
            var theMovieDbDispatcher = new TheMovieDbDispatcher(null, null, null);
            var exception            = Assert.Throws <ArgumentException>(() => theMovieDbDispatcher.GetMovieAlternativeTitlesById(id));

            Assert.AreEqual("id", exception.ParamName);
        }
        public void GetMovieAlternativeTitlesById_When_Successful_Returns_movieResponseDTO(int id)
        {
            var movieTitleResults = Builder <MovieTitleResult> .CreateListOfSize(5).Build().ToList();

            var movieResponse = Builder <MovieAlternativeTitlesResponse> .CreateNew().With(x => x.Titles = movieTitleResults).Build();

            var expectedResult = Builder <MovieAlternativeTitlesResponseDto> .CreateNew()
                                 .With(x => x.MovieId = movieResponse.MovieId)
                                 .With(x => x.Titles  = movieTitleResults.Select(t => new MovieTitleDto()
            {
                CountryCode = t.CountryCode,
                Title       = t.Title
            }))
                                 .Build();

            var restResponse = Builder <RestResponse> .CreateNew()
                               .With(x => x.StatusCode = HttpStatusCode.OK)
                               .With(x => x.Content    = JsonConvert.SerializeObject(movieResponse))
                               .Build();

            _loggerMock.Setup(x => x.Error(It.IsAny <Exception>())).Verifiable();
            _restClientMock.Setup(x => x.Execute(It.IsAny <IRestRequest>())).Returns(restResponse).Verifiable();
            _mapperMock.Setup(x => x.Map <MovieAlternativeTitlesResponse, MovieAlternativeTitlesResponseDto>(
                                  It.IsAny <MovieAlternativeTitlesResponse>())).Returns(expectedResult).Verifiable();

            var theMovieDbDispatcher = new TheMovieDbDispatcher(_restClientMock.Object, _loggerMock.Object, _mapperMock.Object);
            var actualResult         = theMovieDbDispatcher.GetMovieAlternativeTitlesById(id);

            actualResult.ToExpectedObject().ShouldEqual(expectedResult);

            _loggerMock.Verify(x => x.Error(It.IsAny <Exception>()), Times.Never);
            _restClientMock.Verify(x => x.Execute(It.IsAny <IRestRequest>()), Times.Once);
            _mapperMock.Verify(x => x.Map <MovieAlternativeTitlesResponse, MovieAlternativeTitlesResponseDto>(It.IsAny <MovieAlternativeTitlesResponse>()), Times.Once);
        }
        public void GetMovieAlternativeTitlesById_When_RestClientThrowsException_Throws_Exception(int id)
        {
            _loggerMock.Setup(x => x.Error(It.IsAny <Exception>())).Verifiable();
            _restClientMock.Setup(x => x.Execute(It.IsAny <IRestRequest>())).Throws <Exception>().Verifiable();
            var theMovieDbDispatcher = new TheMovieDbDispatcher(_restClientMock.Object, _loggerMock.Object, null);

            Assert.Throws <Exception>(() => theMovieDbDispatcher.GetMovieAlternativeTitlesById(id));

            _loggerMock.Verify(x => x.Error(It.IsAny <Exception>()), Times.Once);
            _restClientMock.Verify(x => x.Execute(It.IsAny <IRestRequest>()), Times.Once);
        }
        public void GetMovieAlternativeTitlesById_When_RestClientReturnsBadRequest_Throws_StrategyCorpException(int id)
        {
            var restResponse = Builder <RestResponse> .CreateNew()
                               .With(x => x.StatusCode = HttpStatusCode.BadRequest).Build();

            _loggerMock.Setup(x => x.Error(It.IsAny <StrategyCorpsException>())).Verifiable();
            _restClientMock.Setup(x => x.Execute(It.IsAny <IRestRequest>())).Returns(restResponse).Verifiable();
            var theMovieDbDispatcher = new TheMovieDbDispatcher(_restClientMock.Object, _loggerMock.Object, null);

            Assert.Throws <StrategyCorpsException>(() => theMovieDbDispatcher.GetMovieAlternativeTitlesById(id));

            _loggerMock.Verify(x => x.Error(It.IsAny <StrategyCorpsException>()), Times.Never);
            _restClientMock.Verify(x => x.Execute(It.IsAny <IRestRequest>()), Times.Once);
        }