Erro:
MockHttpServletResponse:
Status = 201
Error message = null
org.opentest4j.AssertionFailedError:
expected: "{"id":null,"nome":"Samanta","email":"samanta.med@gmail.com","crm":"159357","telefone":"852316497","especialidade":"CARDIOLOGIA","endereco":{"logradouro":"rua xpto","bairro":"bairro","cep":"00000000","cidade":"Brasilia","uf":"DF","numero":null,"complemento":null}}"
but was: "{"id":21,"nome":"Samanta","email":"samanta.med@gmail.com","crm":"159357","telefone":"852316497","especialidade":"CARDIOLOGIA","endereco":{"logradouro":"rua xpto","bairro":"bairro","cep":"00000000","cidade":"Brasilia","uf":"DF","numero":null,"complemento":null}}"
Expected :"{"id":null,"nome":"Samanta","email":"samanta.med@gmail.com","crm":"159357","telefone":"852316497","especialidade":"CARDIOLOGIA","endereco":{"logradouro":"rua xpto","bairro":"bairro","cep":"00000000","cidade":"Brasilia","uf":"DF","numero":null,"compl ...
Actual :"{"id":21,"nome":"Samanta","email":"samanta.med@gmail.com","crm":"159357","telefone":"852316497","especialidade":"CARDIOLOGIA","endereco":{"logradouro":"rua xpto","bairro":"bairro","cep":"00000000","cidade":"Brasilia","uf":"DF","numero":null,"complem ...
<Click to see difference>
MedicoController:
@RestController
@RequestMapping("medicos")
@SecurityRequirement(name = "bearer-key")
public class MedicoController {
@Autowired
private MedicoRepository repository;
@PostMapping
@Transactional
public ResponseEntity cadastrar(@RequestBody @Valid DadosCadastroMedico dados, UriComponentsBuilder uriBuilder) {
var medico = new Medico(dados);
repository.save(medico);
var uri = uriBuilder.path("/medicos/{id}").buildAndExpand(medico.getId()).toUri();
return ResponseEntity.created(uri).body(new DadosDetalhamentoMedico(medico));
}
DadosCadastroMedico:
public record DadosCadastroMedico(
@NotBlank
String nome,
@NotBlank @Email
String email,
@NotBlank @Pattern(regexp = "\\d{4,6}")
String crm,
@NotBlank
String telefone,
@NotNull
Especialidade especialidade,
@NotNull @Valid
DadosEndereco endereco) {
}
DadosDetalhamentoMedico:
public record DadosDetalhamentoMedico(
Long id,
String nome,
String email,
String crm,
String telefone,
Especialidade especialidade,
Endereco endereco) {
public DadosDetalhamentoMedico(Medico medico) {
this(
medico.getId(),
medico.getNome(),
medico.getEmail(),
medico.getCrm(),
medico.getTelefone(),
medico.getEspecialidade(),
medico.getEndereco());
}
}
teste:
@SpringBootTest
@AutoConfigureMockMvc
@AutoConfigureJsonTesters
class MedicoControllerTest {
@Autowired
private MockMvc mvc;
@Autowired
private JacksonTester<DadosCadastroMedico> dadosCadastroMedico;
@Autowired
private JacksonTester<DadosDetalhamentoMedico> dadosDetalhamentoMedico;
@Test
@WithMockUser
@DisplayName("Deveria retornar 201, quando as informações de cadastro estiverm válidas")
void cadastrar_cenario1() throws Exception {
var especialidade = Especialidade.CARDIOLOGIA;
var detalhamentoMedico = new DadosDetalhamentoMedico(null, "Samanta", "samanta.med@gmail.com", "159357", "852316497", especialidade, endereco());
var response = mvc.perform(post("/medicos")
.contentType(MediaType.APPLICATION_JSON)
.content(dadosCadastroMedico.write(new DadosCadastroMedico("Samanta", "samanta.med@gmail.com", "159357", "852316497", especialidade, dadosEndereco()))
.getJson())).andReturn().getResponse();
assertThat(response.getStatus()).isEqualTo(HttpStatus.CREATED.value());
var jsonEsperado = dadosDetalhamentoMedico.write(detalhamentoMedico).getJson();
assertThat(response.getContentAsString()).isEqualTo(jsonEsperado);
}
private DadosEndereco dadosEndereco() {
return new DadosEndereco(
"rua xpto",
"bairro",
"00000000",
"Brasilia",
"DF",
null,
null
);
}
private Endereco endereco() {
return new Endereco(
"rua xpto",
"bairro",
"00000000",
"Brasilia",
"DF",
null,
null
);
}
}