Я пишу тесты для моего контроллера и уже смог найти конечную точку поиска.Я попробовал вставить сейчас, но безуспешно.
My Serivce:
public LegalPerson insert(LegalPerson legalPerson) {
legalPerson.setId(null);
try {
legalPerson = repository.save(legalPerson);
} catch (DataIntegrityViolationException error) {
throw new DataIntegrity("Error something***", error);
}
return legalPerson;
}
public LegalPerson modelToEntity(LegalPersonModel personModel) {
return LegalPerson.builder()
.active(personModel.getActive())
.companyId(personModel.getCompanyId())
.tradeName(personModel.getTradeName())
.companyName(personModel.getCompanyName())
.email(personModel.getEmail())
.cnpj(personModel.getCnpj())
.stateRegistration(personModel.getStateRegistration())
.municipalRegistration(personModel.getMunicipalRegistration())
.openingDate(personModel.getOpeningDate())
.address(personModel.getAddress())
.companyType(personModel.getCompanyType())
.subsidiaries(personModel.getSubsidiaries())
.phones(personModel.getPhones())
.build();
}
Мой контроллер покоя
@RestController
@RequestMapping(value = "/api/clients/lp")
public class LegalPersonResource {
/**other methods ***/
@PostMapping
public ResponseEntity<Void> insert(@Valid @RequestBody LegalPersonModel legalPersonModel) {
var legalPerson = service.modelToEntity(legalPersonModel);
legalPerson = service.insert(legalPerson);
return ResponseEntity.created(ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}")
.buildAndExpand(legalPerson.getId()).toUri()).build();
}
И мой тест
@Test
void insert() throws Exception {
var mockLPM = new LegalPersonModel(true, 1L, "mockTrade", "mockCompanyName", "mockTest@com", "63.236.885/0001-42", "123455", "1234566", localDate, 1L, CompanyEnum.HEADOFFICE,subsidiaries, phones);
var objason = new ObjectMapper();
objason.writeValueAsString(mockLPM);
var test = mvc.perform(MockMvcRequestBuilders.post("/api/clients/lp").contentType(MediaType.APPLICATION_JSON_UTF8_VALUE).content(String.valueOf(objason))).andReturn();
int status = test.getResponse().getStatus();
Assertions.assertEquals(201, status);
}
всегда возвращает статус 400. Что я делаю не так?
==== ОБНОВЛЕНИЕ: ====
Работало по частям.
Работало только сObjectMapper, и я должен изменить LocalDate на ноль, так как он превращает localDate в огромную строку:
"openingDate": {"year": 1955, "month": "OCTOBER", "monthValue": 10, "dayOfMonth": 25, "chronology": {"calendarType": "iso8601", "id" "}," era ":" CE "," dayOfYear ": 298," dayOfWeek ":" TUESDAY "," leapYear ": false}
И на самом деле мой json должен выглядеть так: "openingDate": "2019-04-02"
например.
Таким образом, когда я изменяю localDate на null, он пропускает эту часть, но NullPointerException в этой части моего сервиса здесь:
var legalPerson = service.modelToEntity (legalPersonModel);
он распознает legalPersonModel, который мы только что передали с ObjectMapper,однако legalPerson всегда остается равным нулю, он не конвертируется.
Я пробовал некоторые вещи безуспешно.Что мне делать?
=== ОБНОВЛЕНИЕ 2 ===
Если в контроллере покоя, имеет:
return ResponseEntity.created (ServletUriComponentsBuilder.fromCurrentRequest (). path ("/ {id}")
.buildAndExpand (legalPerson.getId ()). toUri ()). build ();
вернет ноль.
Но если я переключусь на
return ResponseEntity.status (201) .build ();
, у меня будет зеленый тест.
Есть ли способ решить эту проблему?