Olá Professor, Tudo bom? Estou com umas dúvidas em relação a um teste unitário para minha classe controller, que tenho que fazer para minha aplicação. Onde o método que criei deveria reclamar sobre uma lista que tem objetos com atributos nulos, ou seja, não se pode enviar parâmetros nulos. Contudo, ao executar os testes conforme o código da classe ReportControllerTeste, o teste roda certinho, mesmo com o isCreated. Contudo, se eu subo a aplicação e no POSTMAN eu tento enviar com parâmetros nulos, eu tomo um error 500, pois ele executa os @notNull que tenho na classe Domain e DTO.
Código da classe teste:
@Test
@Transactional
void shouldComplainAboutListWithObjectsNulls() throws Exception{
int databaseSizeBeforeCreate = reportRepository.findAll().size();
List<SReportDTO> dtoList = new ArrayList<>();
ReportDTO teste1 = new ReportDTO();
dtoList.add(teste1); << aqui eu abri o array e adicionei o teste1, para que os atributos já ficassem nulos. O teste não deveria criar objetos nulos.
restReportMockMvc
.perform(post(ENTITY_API_URL).contentType(MediaType.APPLICATION_JSON).content(TestUtil.convertObjectToJsonBytes(dtoList)))
.andExpect(status().isCreated());
Código da classe Controller:
@PostMapping("/report") //Method to post one or more reports.
public ResponseEntity<Object> saveListReport(@RequestBody @Valid List<ReportDTO> reportDTOList) {
log.debug("REST request to save reports: {}", reportDTOList);
if (reportDTOList.isEmpty()) {
throw new BadRequestAlertException("Não é permitido enviar lista vazia", ENTITY_NAME, "inexists");
}
reportDTOList.forEach(reportDTO -> {
reportService.save(reportDTO);
});
return ResponseEntity.status(HttpStatus.CREATED).body(reportDTOList);
}
Código da classe Service:
public Report save(ReportDTO reportDTO) {
log.debug("Request to save SiraReport : {}", reportDTO);
if (reportRepository.getByIdProcess(reportDTO.getId_process()) != null) {
throw new BadRequestAlertException("A new report cannot already have an ID_PROCESS", ENTITY_NAME, "idexists");
}
Report report = reportMapper.toEntity(reportDTO);
return this.reportRepository.save(report);
}
Eu só consigo resolver este problema, colocando ifs dos atributos == null na classe service com throw new BadRequestAlertException, porém são muitos atributos. Desta forma terei varios ifs, o que não ficaria legal. O teste para o endpoint, deveria reconhecer as validações e não deixar eu salvar parâmetros nulos.