Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Sugestão] Minha resolução

@SpringBootTest
@AutoConfigureMockMvc
@AutoConfigureJsonTesters
class MedicosControllerTest {

    @Autowired
    private MockMvc mvc;

    @Autowired
    private JacksonTester<DadosCadastroMedico> jsonDadosCadastroMedico;

    @Autowired
    private JacksonTester<DadosDetalhamentoMedico> jsonDadosDetalhamentoMedico;

    @MockitoBean
    private MedicoRepository repository;

    @Test
    @DisplayName("Deveria cadastrar um medico")
    @WithMockUser
    void cadastrar_cenario1() throws Exception {
        var endereco = new DadosEndereco("rua xpto", "bairro", "00000000", "Brasilia", "DF", null, null);
        var dadosCadastro = new DadosCadastroMedico("João da Silva", "joao.silva@voll.med.com", "123456", "19993764839", Especialidade.ORTOPEDIA, endereco);

        when(repository.save(any()))
                .thenReturn(new Medico(dadosCadastro));

        var response = mvc.perform(post("/medicos")
                .contentType(MediaType.APPLICATION_JSON)
                .content(
                        jsonDadosCadastroMedico.write(
                                dadosCadastro
                        ).getJson()
                )).andReturn().getResponse();

        assertThat(response.getStatus()).isEqualTo(HttpStatus.CREATED.value());

        var jsonEsperado = jsonDadosDetalhamentoMedico.write(
                new DadosDetalhamentoMedico(null,
                        "João da Silva",
                        "joao.silva@voll.med.com",
                        "123456",
                        "19993764839",
                        Especialidade.ORTOPEDIA,
                        endereco)
                ).getJson();

        assertThat(response.getContentAsString()).isEqualTo(jsonEsperado);
    }

    @Test
    @DisplayName("Deveria devolver 400 quando não informar os dados de cadastro")
    @WithMockUser
    void cadastrar_cenario2() throws Exception {
        var response = mvc.perform(post("/medicos")).andReturn().getResponse();

        assertThat(response.getStatus()).isEqualTo(HttpStatus.BAD_REQUEST.value());
    }
}
2 respostas
solução!

E aí, Daniel! Tudo bem?

Parabéns! Mantenha o ritmo nos exercícios e continue compartilhando na nossa comunidade.

Percebi que você praticou o uso de testes de integração com MockMvc, aplicou muito bem o JacksonTester para serializar e comparar objetos JSON e ainda entendeu a relevância de simular o comportamento do repositório com Mockito.

Permaneça postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Ícone de sugestão Para saber mais:

Sugestão de conteúdo para você mergulhar ainda mais sobre o tema:

Alguns materiais estão em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Muito obrigado pelo feedback, Daniel!

darei uma olhada no link que você enviou!