public async Task ObterFilmesAsync_Sucesso() { // Objeto que sera utilizado para retorno do Mock var expected = new List <Filme>() { new Filme() { Id = 10447, Descricao = "descricao_teste", Nome = "nome_teste" } }; tmdbAdapterMock .Setup(m => m.GetFilmesAsync(It.IsAny <Pesquisa>(), "pt-BR")) .ReturnsAsync(expected); var filmes = await filmesService.ObterFilmesAsync(new Pesquisa() { TermoPesquisa = "teste" }); var exepectedSingle = expected.Single(); Assert.Contains(filmes, f => f.Id == exepectedSingle.Id && f.Descricao == exepectedSingle.Descricao && f.Nome == exepectedSingle.Nome); }
public async Task <IActionResult> GetFilmesAsync([FromQuery] FilmesGet filmesGet) { Pesquisa pesquisa = Mapper.Map <FilmesGet, Pesquisa>(filmesGet); IEnumerable <Filme> filmes = await filmesService.ObterFilmesAsync(pesquisa); IEnumerable <FilmesGetResult> filmesGetResults = Mapper.Map <IEnumerable <Filme>, IEnumerable <FilmesGetResult> >(filmes); return(Ok(filmesGetResults)); }
public async Task HandleAsync(Pesquisa message, IMessageContext messageContext) { logger.LogInformation($"Mensagem {messageContext.Id} " + $"recebida via queue {messageContext.Queue}."); try { await filmesService.ObterFilmesAsync(message); } catch (CoreException ex) { // Quando uma exception é propagada para fora deste método, o // mecanismo de fila entende que a mensagem NÃO foi processada // e daí coloca esta mensagem para retentativa (ou conforme o // caso move a mensagem para uma fila morta). // // No entanto, as exceptions de negócio (CoreException), em // geral, não serão resolvidas apenas com retentativas pois // geralmente precisam ser corrigidas em outros sistemas ou // processos, portanto, o ideal é capturar essas exceptions // e não deixar que subam para gerar novas tentativas. // // Capturando estas exceptions de negócio aqui, o mecanismo // de fila irá entender que a mensagem foi processada e irá // retirar esta mensagem da fila. // // Contudo, para não "perder" esta mensagem, visto que contém // erros de negócio, a aplicação deverá tratá-la em algum outro // fluxo conforme a necessidade, por exemplo, armazenando-a em // banco de dados para então ser analisada e corrigida no // contexto do negócio. logger.LogWarning(ex, "Falha ao pesquisar filmes para os " + "critérios informados: {@Pesquisa}.", message); // Chamar aqui o servico da aplicacao que irá tratar mensagens // com erro de negócio. } }