1
resposta

[Sugestão] - Solução para o erro test 200 ConsultaController

Caros amigos.

https://cursos.alura.com.br/user/saviomartins e @saviomartins e https://cursos.alura.com.br/user/brunamidoriyy @brunamidoriyy

Não consegui responder nesta thread https://cursos.alura.com.br/forum/topico-test-failed-jsonesperado-null-314818

A correção para o erro neste teste e.

Alterar o método agendar da ConsultaController

@PostMapping
    @Transactional
    @Operation(summary = "Realiza a marcação de consultas médicas")
    @ApiResponse(responseCode = "400", description = "Id do paciente informado não existe!")
    @ApiResponse(responseCode = "403", description = "Id do médico informado não existe!")
    public ResponseEntity agendar(@RequestBody @Valid DadosAgendamentoConsulta dados){
        var dadosDetalhamento = agenda.agendar(dados);
        return ResponseEntity.ok(new DadosDetalhamentoConsulta(dadosDetalhamento.id(), dadosDetalhamento.idMedico(), dadosDetalhamento.idPaciente(), dadosDetalhamento.data()));
    }

Para corrigir o erro eu criei a variavel dadosDetalhamento e depois passei os atributos no construtor que e devolvido no ResponseEntity.

Anteriormente o objeto estava com todos os seus atributos nulo. Por isso no teste ele não passava. Pois não retorna o objeto de forma correta.

1 resposta

Olá, Marcos!

Parece que você encontrou uma solução para o problema que estava enfrentando no teste que deveria retornar o código 200. Isso é ótimo!

Vamos analisar a solução que você propôs. Você mencionou que alterou o método agendar da ConsultaController e criou a variável dadosDetalhamento. Depois, você passou os atributos no construtor que é retornado no ResponseEntity.

Se eu entendi corretamente, o problema estava ocorrendo porque o objeto estava com todos os seus atributos nulos, e por isso o teste não estava passando, pois não retornava o objeto de forma correta.

Sua solução parece fazer sentido, considerando o contexto do problema. Você basicamente garantiu que o objeto DadosDetalhamentoConsulta fosse corretamente preenchido antes de ser retornado, o que fez com que o teste passasse.

Aqui está o código que você propôs:

@PostMapping
@Transactional
@Operation(summary = "Realiza a marcação de consultas médicas")
@ApiResponse(responseCode = "400", description = "Id do paciente informado não existe!")
@ApiResponse(responseCode = "403", description = "Id do médico informado não existe!")
public ResponseEntity agendar(@RequestBody @Valid DadosAgendamentoConsulta dados){
    var dadosDetalhamento = agenda.agendar(dados);
    return ResponseEntity.ok(new DadosDetalhamentoConsulta(dadosDetalhamento.id(), dadosDetalhamento.idMedico(), dadosDetalhamento.idPaciente(), dadosDetalhamento.data()));
}

Acredito que sua solução esteja correta, mas é sempre bom lembrar que pode haver outras maneiras de resolver o mesmo problema.

Espero ter ajudado e bons estudos!