public async void GetDistinctMovieList_Must_Ignore_Exception_In_FilmWorldAPI_And_Return_Results_In_CinemaWorldAPI()
        {
            //Arrange
            // Create Error client
            var unAuthorisedResponseHttpMessageHandler = new Mock <HttpMessageHandler>();

            unAuthorisedResponseHttpMessageHandler.Protected()
            .Setup <Task <HttpResponseMessage> >(
                "SendAsync",
                ItExpr.IsAny <HttpRequestMessage>(),
                ItExpr.IsAny <CancellationToken>())
            .ReturnsAsync(new HttpResponseMessage()
            {
                StatusCode = HttpStatusCode.InternalServerError
            });
            var httpClient = new HttpClient(unAuthorisedResponseHttpMessageHandler.Object);
            IMovieAPIClient <FilmWorldClient> filmWorldClient = new FilmWorldClient(configuration.Object, httpClient, filmWorldClientlogger.Object);
            // Mock filmWorldClient with data
            Mock <IMovieAPIClient <CinemaWorldClient> > cinemaWorldClient = new Mock <IMovieAPIClient <CinemaWorldClient> >();

            cinemaWorldClient.Setup(c => c.GetMovieList(It.IsAny <CancellationToken>()))
            .ReturnsAsync(testMovieList);

            sut = new MovieFinderService(cinemaWorldClient.Object, filmWorldClient, movieFinderServicelogger.Object);

            //Act
            var result = await sut.GetDistinctMovieList();

            //Assert
            Assert.NotNull(result);
            Assert.IsType <List <Movie> >(result.ToList());
            Assert.Equal(testMovieList.Select(m => m.ID).FirstOrDefault(), result.Select(r => r.ID).FirstOrDefault());
        }
        public void Constructor_With_APIURL_AND_APIKey()
        {
            //Arrange
            configuration = new Mock <IConfiguration>();
            configuration.SetupGet(c => c["MovieFinder.APIURL"])
            .Returns("http://testURL.com");
            configuration.SetupGet(c => c["MovieFinder.APIKey"])
            .Returns("API KEY Here");
            Mock <HttpClient> client = new Mock <HttpClient>();


            //Act
            IMovieAPIClient <FilmWorldClient> sut = new FilmWorldClient(configuration.Object, client.Object, filmWorldClientlogger.Object);

            //Assert
            Assert.NotNull(sut);
        }
        public async void GetCheapestMovieDetailsByTitle_Must_Ignore_Exception_In_FilmWorldAPI_And_Return_Results_In_CinemaWorldAPI()
        {
            //Arrange
            // Create Error client
            var unAuthorisedResponseHttpMessageHandler = new Mock <HttpMessageHandler>();

            unAuthorisedResponseHttpMessageHandler.Protected()
            .Setup <Task <HttpResponseMessage> >(
                "SendAsync",
                ItExpr.IsAny <HttpRequestMessage>(),
                ItExpr.IsAny <CancellationToken>())
            .ReturnsAsync(new HttpResponseMessage()
            {
                StatusCode = HttpStatusCode.InternalServerError
            });
            var httpClient = new HttpClient(unAuthorisedResponseHttpMessageHandler.Object);
            IMovieAPIClient <FilmWorldClient> filmWorldClient = new FilmWorldClient(configuration.Object, httpClient, filmWorldClientlogger.Object);
            // Mock filmWorldClient with data
            Mock <IMovieAPIClient <CinemaWorldClient> > cinemaWorldClient = new Mock <IMovieAPIClient <CinemaWorldClient> >();

            cinemaWorldClient.Setup(c => c.GetMovieList(It.IsAny <CancellationToken>()))
            .ReturnsAsync(testMovieList);
            cinemaWorldClient.Setup(c => c.GetMovieDetails(It.IsAny <CancellationToken>(), It.IsAny <string>()))
            .ReturnsAsync(cinemaWorldMovieDetail);

            sut = new MovieFinderService(cinemaWorldClient.Object, filmWorldClient, movieFinderServicelogger.Object);

            //Act
            var result = await sut.GetCheapestMovieDetailsByTitle("Test movie");

            //Assert
            Assert.NotNull(result);
            Assert.IsType <MovieDetail>(result);
            Assert.Equal(cinemaWorldMovieDetail.Title, result.Title);
            Assert.Equal(cinemaWorldMovieDetail.Price, result.Price); // Should return FilmWorldMovieDetail, Price = 100
        }