2
respostas

Mock com UUID

Caro professor, tenho uma situação onde preciso criar um teste para verificar se o dado criado no banco foi passado na locaction com seu respectivo ID. Até ai tudo bem, mas o problema é que o id é gerado sistemicamente por meio do UUID. Como eu recupero esse ID no mock para que eu possa comparar ele no header do response?

2 respostas

Oi Lincoln,

Precisaria ver mais ou menos o seu código de teste atual para entender melhor qual seria a solução para essa situação.

Eu acabei conseguindo fazer utilizando o MvcResult para recuperar o o response da requisição e em seguida eu fiz um find e dei um Assert para comparar os locations... funcionou legal.

@Test
    @Transactional
    @DisplayName("Deve criar uma proposta e retornar código 201 com URI criada no Header")
    void criaPropostaTest() throws Exception{
        Proposta proposta = new Proposta(
                "Usuario",
                "186.375.330-35",
                "teste@teste.com.br",
                new BigDecimal(1000),
                "Rua do teste");

        String json = new ObjectMapper().writeValueAsString(proposta);

        MockHttpServletRequestBuilder builder = MockBuilder.run(URI_API, json);
        MvcResult mvcResult = mvc.perform(builder).andExpect(status().isCreated()).andReturn();
        Proposta propostaConsultada = (Proposta) manager.createQuery(
                "select p from Proposta p where p.documento = '186.375.330-35'")
                .getSingleResult();

        String locationResponse = "http://localhost"+URI_API+"/"+propostaConsultada.getId();
        String location = mvcResult.getResponse().getHeader("Location");
        Assertions.assertNotNull(location);
        Assertions.assertEquals(location, locationResponse);
    }