public async Task <ShowActrosModel> GetActorsForShow(int showId)
        {
            var showActrosModel = new ShowActrosModel();

            try
            {
                using var client = _httpClientFactory.CreateClient("TvMaze");

                var response = await client.GetAsync($"/shows/{showId}?embed=cast");

                if (response.StatusCode == HttpStatusCode.OK)
                {
                    var result = await response.Content.ReadAsStringAsync();

                    var tvMazeShowDetails = JsonConvert.DeserializeObject <TvMazeShowDetails>(result);
                    showActrosModel.Id   = tvMazeShowDetails.Id;
                    showActrosModel.Cast = tvMazeShowDetails._embedded.Cast.Select(c => new ActorModel
                    {
                        Id       = c.Person.Id,
                        Name     = c.Person.Name,
                        BirthDay = c.Person.BirthDay
                    }).ToList();
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            return(showActrosModel);
        }
        public async Task GetActorsForShow_WithOK_ShouldReturn_ActorsModel()
        {
            _fakeHttpMessageHandler.Setup(f => f.Send(It.IsAny <HttpRequestMessage>())).Returns(new HttpResponseMessage
            {
                StatusCode = HttpStatusCode.OK,
                Content    = new StringContent("{'id': 1, '_embedded': { 'cast': [{ 'person': { 'id': 1, 'name': 'Mike Vogel' } }] }}")
            });

            var actual = await _tvMazeScraperServcice.GetActorsForShow(1);

            var expected = new ShowActrosModel
            {
                Id   = 1,
                Cast = new List <ActorModel>
                {
                    new ActorModel
                    {
                        Id   = 1,
                        Name = "Mike Vogel"
                    }
                }
            };

            actual.Should().BeEquivalentTo(expected);
        }
        public async Task ScrapeShows_Should_Verify_Call_SaveShows()
        {
            // prepare
            var shows = new List <ShowModel>()
            {
                new ShowModel
                {
                    Id   = 1,
                    Name = "Game of thrones",
                    Cast = new List <ActorModel>
                    {
                        new ActorModel
                        {
                            Id       = 1,
                            Name     = "Mackenzie Lintz",
                            BirthDay = new System.DateTime(1996, 11, 22)
                        }
                    }
                }
            };

            var cast = new ShowActrosModel
            {
                Id   = 1,
                Cast = new List <ActorModel>
                {
                    new ActorModel
                    {
                        Id       = 1,
                        Name     = "Mackenzie Lintz",
                        BirthDay = new System.DateTime(1996, 11, 22)
                    }
                }
            };

            _tvMazeScraperGetterServciceMock.Setup(x => x.GetShowsForPage(1)).ReturnsAsync(shows);
            _tvMazeScraperGetterServciceMock.Setup(x => x.GetActorsForShow(1)).ReturnsAsync(cast);

            // act
            await _showsScraperService.ScrapeShows(1);

            // assert
            _showsStorageServiceMock.Verify(x => x.SaveShows(shows), Times.Once);
        }