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