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 async void GetCheapestMovieDetailsByTitle_Return_Cheapest_Movie()
        {
            //Arrange
            Mock <IMovieAPIClient <CinemaWorldClient> > cinemaWorldClient = new Mock <IMovieAPIClient <CinemaWorldClient> >();

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

            // Mock filmWorldClient with data
            Mock <IMovieAPIClient <FilmWorldClient> > filmWorldClient = new Mock <IMovieAPIClient <FilmWorldClient> >();

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

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

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

            //Assert
            Assert.NotNull(result);
            Assert.IsType <MovieDetail>(result);
            Assert.Equal(cinemaWorldMovieDetail.Title, result.Title); // CinemaWorldMovieDetail is the cheapest
            Assert.Equal(cinemaWorldMovieDetail.Price, result.Price); // Should return CinemaWorldMovieDetail, Price = 100
        }
        public async void GetDistinctMovieList_Return_Extra_Movies_From_FilmWorldAPI()
        {
            //Arrange
            Mock <IMovieAPIClient <CinemaWorldClient> > cinemaWorldClient = new Mock <IMovieAPIClient <CinemaWorldClient> >();

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

            // Mock filmWorldClient with data
            Mock <IMovieAPIClient <FilmWorldClient> > filmWorldClient = new Mock <IMovieAPIClient <FilmWorldClient> >();

            filmWorldClient.Setup(c => c.GetMovieList(It.IsAny <CancellationToken>()))
            .ReturnsAsync(testMovieListExtra);               // Extra Movies

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

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

            //Assert
            Assert.NotEmpty(result);
            Assert.IsType <List <Movie> >(result.ToList());
            Assert.Equal(3, result.Count());                                                                                                                                   // Should return only 3 records
            Assert.NotEmpty(testMovieList.Where(m => m.Title.Equals("Test Movie", StringComparison.OrdinalIgnoreCase)));                                                       // check for common record
            Assert.Single(testMovieList.Where(m => m.Title.Equals("Test Movie", StringComparison.OrdinalIgnoreCase)));                                                         // Check for one common record
            Assert.Equal("Test movie two", result.Where(r => r.Title.Equals("Test movie two", StringComparison.OrdinalIgnoreCase)).Select(r => r.Title).FirstOrDefault());     // Check for the first extra record
            Assert.Equal("Test movie three", result.Where(r => r.Title.Equals("Test movie three", StringComparison.OrdinalIgnoreCase)).Select(r => r.Title).FirstOrDefault()); // Check for the second extra record
        }
        public async void GetCheapestMovieDetailsByTitle_Must_Ignore_Exception_In_CinemaWorldAPI_And_Return_Results_In_FilmWorldAPI()
        {
            //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.Forbidden
            });
            var httpClient = new HttpClient(unAuthorisedResponseHttpMessageHandler.Object);
            IMovieAPIClient <CinemaWorldClient> cinemaWorldClient = new CinemaWorldClient(configuration.Object, httpClient, cinemaWorldClientlogger.Object);

            // Mock filmWorldClient with data
            Mock <IMovieAPIClient <FilmWorldClient> > filmWorldClient = new Mock <IMovieAPIClient <FilmWorldClient> >();

            filmWorldClient.Setup(c => c.GetMovieList(It.IsAny <CancellationToken>()))
            .ReturnsAsync(testMovieListExtra);
            filmWorldClient.Setup(c => c.GetMovieDetails(It.IsAny <CancellationToken>(), It.IsAny <string>()))
            .ReturnsAsync(filmWorldMovieDetail);

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

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

            //Assert
            Assert.NotNull(result);
            Assert.IsType <MovieDetail>(result);
            Assert.Equal(filmWorldMovieDetail.Title, result.Title);
            Assert.Equal(filmWorldMovieDetail.Price, result.Price); // Should return FilmWorldMovieDetail, Price = 150
        }
Exemple #5
0
 public MovieFinderController(IMovieFinderService movieFinderService,
                              ILogger <MovieFinderController> logger)
 {
     this.movieFinderService = movieFinderService;
     this.logger             = logger;
 }