From c873dd2cb9b4307bc4ff38d48426dd1fe4f81be4 Mon Sep 17 00:00:00 2001 From: Alexandre Touret <alexandre.touret@free.fr> Date: Fri, 15 Oct 2021 17:46:28 +0200 Subject: [PATCH] feat: add Owner entity and trying to resolve cyclic dependency --- .../samples/petclinic/mapper/OwnerMapper.java | 17 + .../samples/petclinic/model/Owner.java | 6 - .../samples/petclinic/model/Pet.java | 21 +- .../petclinic/rest/OwnerRestController.java | 83 ++-- .../petclinic/rest/PetRestController.java | 76 +--- .../rest/OwnerRestControllerTests.java | 357 +++++++++--------- 6 files changed, 246 insertions(+), 314 deletions(-) create mode 100755 src/main/java/org/springframework/samples/petclinic/mapper/OwnerMapper.java diff --git a/src/main/java/org/springframework/samples/petclinic/mapper/OwnerMapper.java b/src/main/java/org/springframework/samples/petclinic/mapper/OwnerMapper.java new file mode 100755 index 00000000..52f01626 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/mapper/OwnerMapper.java @@ -0,0 +1,17 @@ +package org.springframework.samples.petclinic.mapper; + +import org.mapstruct.Mapper; +import org.springframework.samples.petclinic.dto.OwnerDto; +import org.springframework.samples.petclinic.model.Owner; + +import java.util.Collection; +import java.util.List; + +@Mapper +public interface OwnerMapper { + + OwnerDto toOwnerDto(Owner owner); + Owner toOwner(OwnerDto ownerDto); + Collection<OwnerDto> toOwnerDtoCollection(Collection<Owner> ownerCollection); + Collection<Owner> toOwners(Collection<OwnerDto> ownerDtos); +} diff --git a/src/main/java/org/springframework/samples/petclinic/model/Owner.java b/src/main/java/org/springframework/samples/petclinic/model/Owner.java index e957e86a..2faa7c57 100644 --- a/src/main/java/org/springframework/samples/petclinic/model/Owner.java +++ b/src/main/java/org/springframework/samples/petclinic/model/Owner.java @@ -36,9 +36,6 @@ import org.springframework.core.style.ToStringCreator; import org.springframework.samples.petclinic.rest.JacksonCustomOwnerDeserializer; import org.springframework.samples.petclinic.rest.JacksonCustomOwnerSerializer; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** * Simple JavaBean domain object representing an owner. @@ -50,8 +47,6 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; */ @Entity @Table(name = "owners") -@JsonSerialize(using = JacksonCustomOwnerSerializer.class) -@JsonDeserialize(using = JacksonCustomOwnerDeserializer.class) public class Owner extends Person { @Column(name = "address") @NotEmpty @@ -93,7 +88,6 @@ public class Owner extends Person { public void setTelephone(String telephone) { this.telephone = telephone; } - @JsonIgnore protected Set<Pet> getPetsInternal() { if (this.pets == null) { this.pets = new HashSet<>(); diff --git a/src/main/java/org/springframework/samples/petclinic/model/Pet.java b/src/main/java/org/springframework/samples/petclinic/model/Pet.java index 929fdf46..9817828d 100644 --- a/src/main/java/org/springframework/samples/petclinic/model/Pet.java +++ b/src/main/java/org/springframework/samples/petclinic/model/Pet.java @@ -15,28 +15,13 @@ */ package org.springframework.samples.petclinic.model; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; - import org.springframework.beans.support.MutableSortDefinition; import org.springframework.beans.support.PropertyComparator; import org.springframework.format.annotation.DateTimeFormat; +import javax.persistence.*; +import java.util.*; + /** * Simple business object representing a pet. diff --git a/src/main/java/org/springframework/samples/petclinic/rest/OwnerRestController.java b/src/main/java/org/springframework/samples/petclinic/rest/OwnerRestController.java index 341adc01..03036a30 100644 --- a/src/main/java/org/springframework/samples/petclinic/rest/OwnerRestController.java +++ b/src/main/java/org/springframework/samples/petclinic/rest/OwnerRestController.java @@ -24,22 +24,23 @@ import javax.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.samples.petclinic.dto.OwnerDto; +import org.springframework.samples.petclinic.mapper.OwnerMapper; import org.springframework.samples.petclinic.model.Owner; import org.springframework.samples.petclinic.service.ClinicService; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.BindingResult; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.util.UriComponentsBuilder; +import javax.transaction.Transactional; +import javax.validation.Valid; +import java.util.Collection; + /** * @author Vitaliy Fedoriv + * */ @RestController @@ -47,82 +48,90 @@ import org.springframework.web.util.UriComponentsBuilder; @RequestMapping("/api/owners") public class OwnerRestController { - @Autowired - private ClinicService clinicService; + private final ClinicService clinicService; + private final OwnerMapper ownerMapper; + + public OwnerRestController(ClinicService clinicService, OwnerMapper ownerMapper) { + this.clinicService = clinicService; + this.ownerMapper = ownerMapper; + } + @PreAuthorize("hasRole(@roles.OWNER_ADMIN)") @RequestMapping(value = "/*/lastname/{lastName}", method = RequestMethod.GET, produces = "application/json") - public ResponseEntity<Collection<Owner>> getOwnersList(@PathVariable("lastName") String ownerLastName) { + public ResponseEntity<Collection<OwnerDto>> getOwnersList(@PathVariable("lastName") String ownerLastName) { if (ownerLastName == null) { ownerLastName = ""; } Collection<Owner> owners = this.clinicService.findOwnerByLastName(ownerLastName); if (owners.isEmpty()) { - return new ResponseEntity<Collection<Owner>>(HttpStatus.NOT_FOUND); + return new ResponseEntity<Collection<OwnerDto>>(HttpStatus.NOT_FOUND); } - return new ResponseEntity<Collection<Owner>>(owners, HttpStatus.OK); + return new ResponseEntity<Collection<OwnerDto>>(ownerMapper.toOwnerDtoCollection(owners), HttpStatus.OK); } @PreAuthorize("hasRole(@roles.OWNER_ADMIN)") @RequestMapping(value = "", method = RequestMethod.GET, produces = "application/json") - public ResponseEntity<Collection<Owner>> getOwners() { + public ResponseEntity<Collection<OwnerDto>> getOwners() { Collection<Owner> owners = this.clinicService.findAllOwners(); if (owners.isEmpty()) { - return new ResponseEntity<Collection<Owner>>(HttpStatus.NOT_FOUND); + return new ResponseEntity<Collection<OwnerDto>>(HttpStatus.NOT_FOUND); } - return new ResponseEntity<Collection<Owner>>(owners, HttpStatus.OK); + return new ResponseEntity<Collection<OwnerDto>>(ownerMapper.toOwnerDtoCollection(owners), HttpStatus.OK); } @PreAuthorize("hasRole(@roles.OWNER_ADMIN)") @RequestMapping(value = "/{ownerId}", method = RequestMethod.GET, produces = "application/json") - public ResponseEntity<Owner> getOwner(@PathVariable("ownerId") int ownerId) { + public ResponseEntity<OwnerDto> getOwner(@PathVariable("ownerId") int ownerId) { Owner owner = null; owner = this.clinicService.findOwnerById(ownerId); if (owner == null) { - return new ResponseEntity<Owner>(HttpStatus.NOT_FOUND); + return new ResponseEntity<>(HttpStatus.NOT_FOUND); } - return new ResponseEntity<Owner>(owner, HttpStatus.OK); + return new ResponseEntity<>(ownerMapper.toOwnerDto(owner), HttpStatus.OK); } @PreAuthorize("hasRole(@roles.OWNER_ADMIN)") @RequestMapping(value = "", method = RequestMethod.POST, produces = "application/json") - public ResponseEntity<Owner> addOwner(@RequestBody @Valid Owner owner, BindingResult bindingResult, - UriComponentsBuilder ucBuilder) { + public ResponseEntity<OwnerDto> addOwner(@RequestBody @Valid OwnerDto ownerDto, BindingResult bindingResult, + UriComponentsBuilder ucBuilder) { HttpHeaders headers = new HttpHeaders(); - if (bindingResult.hasErrors() || owner.getId() != null) { - BindingErrorsResponse errors = new BindingErrorsResponse(owner.getId()); + if (bindingResult.hasErrors() || ownerDto.getId() != null) { + BindingErrorsResponse errors = new BindingErrorsResponse(ownerDto.getId()); errors.addAllErrors(bindingResult); headers.add("errors", errors.toJSON()); - return new ResponseEntity<Owner>(headers, HttpStatus.BAD_REQUEST); + return new ResponseEntity<>(headers, HttpStatus.BAD_REQUEST); } + Owner owner = ownerMapper.toOwner(ownerDto); this.clinicService.saveOwner(owner); - headers.setLocation(ucBuilder.path("/api/owners/{id}").buildAndExpand(owner.getId()).toUri()); - return new ResponseEntity<Owner>(owner, headers, HttpStatus.CREATED); + ownerDto.setId(owner.getId()); + headers.setLocation(ucBuilder.path("/api/owners/{id}").buildAndExpand(ownerDto.getId()).toUri()); + return new ResponseEntity<>(ownerDto, headers, HttpStatus.CREATED); } @PreAuthorize("hasRole(@roles.OWNER_ADMIN)") @RequestMapping(value = "/{ownerId}", method = RequestMethod.PUT, produces = "application/json") - public ResponseEntity<Owner> updateOwner(@PathVariable("ownerId") int ownerId, @RequestBody @Valid Owner owner, + public ResponseEntity<Owner> updateOwner(@PathVariable("ownerId") int ownerId, @RequestBody @Valid OwnerDto ownerDto, BindingResult bindingResult, UriComponentsBuilder ucBuilder) { - boolean bodyIdMatchesPathId = owner.getId() == null || ownerId == owner.getId(); + boolean bodyIdMatchesPathId = ownerDto.getId() == null || ownerId == ownerDto.getId(); if (bindingResult.hasErrors() || !bodyIdMatchesPathId) { - BindingErrorsResponse errors = new BindingErrorsResponse(ownerId, owner.getId()); + BindingErrorsResponse errors = new BindingErrorsResponse(ownerId, ownerDto.getId()); errors.addAllErrors(bindingResult); HttpHeaders headers = new HttpHeaders(); headers.add("errors", errors.toJSON()); - return new ResponseEntity<Owner>(headers, HttpStatus.BAD_REQUEST); + return new ResponseEntity<>(headers, HttpStatus.BAD_REQUEST); } Owner currentOwner = this.clinicService.findOwnerById(ownerId); if (currentOwner == null) { - return new ResponseEntity<Owner>(HttpStatus.NOT_FOUND); + return new ResponseEntity<>(HttpStatus.NOT_FOUND); } - currentOwner.setAddress(owner.getAddress()); - currentOwner.setCity(owner.getCity()); - currentOwner.setFirstName(owner.getFirstName()); - currentOwner.setLastName(owner.getLastName()); - currentOwner.setTelephone(owner.getTelephone()); + currentOwner.setAddress(ownerDto.getAddress()); + currentOwner.setCity(ownerDto.getCity()); + currentOwner.setFirstName(ownerDto.getFirstName()); + currentOwner.setLastName(ownerDto.getLastName()); + currentOwner.setTelephone(ownerDto.getTelephone()); this.clinicService.saveOwner(currentOwner); - return new ResponseEntity<Owner>(currentOwner, HttpStatus.NO_CONTENT); + return new ResponseEntity<>(currentOwner, HttpStatus.NO_CONTENT); } @PreAuthorize("hasRole(@roles.OWNER_ADMIN)") @@ -134,7 +143,7 @@ public class OwnerRestController { return new ResponseEntity<Void>(HttpStatus.NOT_FOUND); } this.clinicService.deleteOwner(owner); - return new ResponseEntity<Void>(HttpStatus.NO_CONTENT); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); } } diff --git a/src/main/java/org/springframework/samples/petclinic/rest/PetRestController.java b/src/main/java/org/springframework/samples/petclinic/rest/PetRestController.java index b66c2949..9920da38 100644 --- a/src/main/java/org/springframework/samples/petclinic/rest/PetRestController.java +++ b/src/main/java/org/springframework/samples/petclinic/rest/PetRestController.java @@ -42,31 +42,6 @@ import java.util.Collection; @RequestMapping("api/pets") public class PetRestController { -<<<<<<< HEAD - @Autowired - private ClinicService clinicService; - - @Autowired - private PetMapper petMapper; - - @PreAuthorize( "hasRole(@roles.OWNER_ADMIN)" ) - @RequestMapping(value = "/{petId}", method = RequestMethod.GET, produces = "application/json") - public ResponseEntity<PetDto> getPet(@PathVariable("petId") int petId){ - PetDto pet = petMapper.toPetDto(this.clinicService.findPetById(petId)); - if(pet == null){ - return new ResponseEntity<PetDto>(HttpStatus.NOT_FOUND); - } - return new ResponseEntity<PetDto>(pet, HttpStatus.OK); - } - @PreAuthorize("hasRole(@roles.OWNER_ADMIN)") - @RequestMapping(value = "/{petId}", method = RequestMethod.GET, produces = "application/json") - public ResponseEntity<Pet> getPet(@PathVariable("petId") int petId) { - Pet pet = this.clinicService.findPetById(petId); - if (pet == null) { - return new ResponseEntity<Pet>(HttpStatus.NOT_FOUND); - } - return new ResponseEntity<Pet>(pet, HttpStatus.OK); -======= private final ClinicService clinicService; private final PetMapper petMapper; @@ -84,54 +59,25 @@ public class PetRestController { return new ResponseEntity<PetDto>(HttpStatus.NOT_FOUND); } return new ResponseEntity<PetDto>(pet, HttpStatus.OK); ->>>>>>> a4ca4b1... feat!: enable dto genertation using openapi generator. First tests done with Pets } - @PreAuthorize("hasRole(@roles.OWNER_ADMIN)") - @RequestMapping(value = "", method = RequestMethod.GET, produces = "application/json") -<<<<<<< HEAD - public ResponseEntity<Collection<Pet>> getPets() { - Collection<Pet> pets = this.clinicService.findAllPets(); - if (pets.isEmpty()) { - return new ResponseEntity<Collection<Pet>>(HttpStatus.NOT_FOUND); - } - return new ResponseEntity<Collection<Pet>>(pets, HttpStatus.OK); -======= + public ResponseEntity<Collection<PetDto>> getPets() { Collection<PetDto> pets = petMapper.toPetsDto(this.clinicService.findAllPets()); if (pets.isEmpty()) { return new ResponseEntity<Collection<PetDto>>(HttpStatus.NOT_FOUND); } return new ResponseEntity<Collection<PetDto>>(pets, HttpStatus.OK); ->>>>>>> a4ca4b1... feat!: enable dto genertation using openapi generator. First tests done with Pets } @PreAuthorize("hasRole(@roles.OWNER_ADMIN)") @RequestMapping(value = "/pettypes", method = RequestMethod.GET, produces = "application/json") -<<<<<<< HEAD - public ResponseEntity<Collection<PetType>> getPetTypes() { - return new ResponseEntity<Collection<PetType>>(this.clinicService.findPetTypes(), HttpStatus.OK); -======= public ResponseEntity<Collection<PetTypeDto>> getPetTypes() { return new ResponseEntity<Collection<PetTypeDto>>(petMapper.toPetTypeDtos(this.clinicService.findPetTypes()), HttpStatus.OK); ->>>>>>> a4ca4b1... feat!: enable dto genertation using openapi generator. First tests done with Pets } @PreAuthorize("hasRole(@roles.OWNER_ADMIN)") @RequestMapping(value = "", method = RequestMethod.POST, produces = "application/json") -<<<<<<< HEAD - public ResponseEntity<Pet> addPet(@RequestBody @Valid Pet pet, BindingResult bindingResult, UriComponentsBuilder ucBuilder) { - BindingErrorsResponse errors = new BindingErrorsResponse(); - HttpHeaders headers = new HttpHeaders(); - if (bindingResult.hasErrors() || (pet == null)) { - errors.addAllErrors(bindingResult); - headers.add("errors", errors.toJSON()); - return new ResponseEntity<Pet>(headers, HttpStatus.BAD_REQUEST); - } - this.clinicService.savePet(pet); - headers.setLocation(ucBuilder.path("/api/pets/{id}").buildAndExpand(pet.getId()).toUri()); - return new ResponseEntity<Pet>(pet, headers, HttpStatus.CREATED); -======= public ResponseEntity<PetDto> addPet(@RequestBody @Valid PetDto petDto, BindingResult bindingResult, UriComponentsBuilder ucBuilder) { BindingErrorsResponse errors = new BindingErrorsResponse(); HttpHeaders headers = new HttpHeaders(); @@ -145,35 +91,16 @@ public class PetRestController { petDto.setId(pet.getId()); headers.setLocation(ucBuilder.path("/api/pets/{id}").buildAndExpand(petDto.getId()).toUri()); return new ResponseEntity<>(petDto, headers, HttpStatus.CREATED); ->>>>>>> a4ca4b1... feat!: enable dto genertation using openapi generator. First tests done with Pets } @PreAuthorize("hasRole(@roles.OWNER_ADMIN)") @RequestMapping(value = "/{petId}", method = RequestMethod.PUT, produces = "application/json") -<<<<<<< HEAD - public ResponseEntity<Pet> updatePet(@PathVariable("petId") int petId, @RequestBody @Valid Pet pet, BindingResult bindingResult) { -======= public ResponseEntity<PetDto> updatePet(@PathVariable("petId") int petId, @RequestBody @Valid PetDto pet, BindingResult bindingResult) { ->>>>>>> a4ca4b1... feat!: enable dto genertation using openapi generator. First tests done with Pets BindingErrorsResponse errors = new BindingErrorsResponse(); HttpHeaders headers = new HttpHeaders(); if (bindingResult.hasErrors() || (pet == null)) { errors.addAllErrors(bindingResult); headers.add("errors", errors.toJSON()); -<<<<<<< HEAD - return new ResponseEntity<Pet>(headers, HttpStatus.BAD_REQUEST); - } - Pet currentPet = this.clinicService.findPetById(petId); - if (currentPet == null) { - return new ResponseEntity<Pet>(HttpStatus.NOT_FOUND); - } - currentPet.setBirthDate(pet.getBirthDate()); - currentPet.setName(pet.getName()); - currentPet.setType(pet.getType()); - currentPet.setOwner(pet.getOwner()); - this.clinicService.savePet(currentPet); - return new ResponseEntity<Pet>(currentPet, HttpStatus.NO_CONTENT); -======= return new ResponseEntity<>(headers, HttpStatus.BAD_REQUEST); } Pet currentPet = this.clinicService.findPetById(petId); @@ -186,7 +113,6 @@ public class PetRestController { currentPet.setOwner(petMapper.toOwner(pet.getOwner())); this.clinicService.savePet(currentPet); return new ResponseEntity<>(petMapper.toPetDto(currentPet), HttpStatus.NO_CONTENT); ->>>>>>> a4ca4b1... feat!: enable dto genertation using openapi generator. First tests done with Pets } @PreAuthorize("hasRole(@roles.OWNER_ADMIN)") diff --git a/src/test/java/org/springframework/samples/petclinic/rest/OwnerRestControllerTests.java b/src/test/java/org/springframework/samples/petclinic/rest/OwnerRestControllerTests.java index 57147a55..0b9d7e2f 100644 --- a/src/test/java/org/springframework/samples/petclinic/rest/OwnerRestControllerTests.java +++ b/src/test/java/org/springframework/samples/petclinic/rest/OwnerRestControllerTests.java @@ -16,17 +16,7 @@ package org.springframework.samples.petclinic.rest; -import static org.mockito.BDDMockito.given; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - +import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -34,12 +24,13 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.MediaType; -import org.springframework.samples.petclinic.model.Owner; -import org.springframework.samples.petclinic.model.Pet; -import org.springframework.samples.petclinic.model.PetType; -import org.springframework.samples.petclinic.model.Visit; -import org.springframework.samples.petclinic.service.clinicService.ApplicationTestConfig; +import org.springframework.samples.petclinic.dto.OwnerDto; +import org.springframework.samples.petclinic.dto.PetDto; +import org.springframework.samples.petclinic.dto.PetTypeDto; +import org.springframework.samples.petclinic.dto.VisitDto; +import org.springframework.samples.petclinic.mapper.OwnerMapper; import org.springframework.samples.petclinic.service.ClinicService; +import org.springframework.samples.petclinic.service.clinicService.ApplicationTestConfig; import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -47,7 +38,13 @@ import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import com.fasterxml.jackson.databind.ObjectMapper; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import static org.mockito.BDDMockito.given; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; /** @@ -57,81 +54,84 @@ import com.fasterxml.jackson.databind.ObjectMapper; */ @SpringBootTest @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes=ApplicationTestConfig.class) +@ContextConfiguration(classes = ApplicationTestConfig.class) @WebAppConfiguration public class OwnerRestControllerTests { @Autowired private OwnerRestController ownerRestController; + @Autowired + OwnerMapper ownerMapper; + @MockBean private ClinicService clinicService; private MockMvc mockMvc; - private List<Owner> owners; + private List<OwnerDto> owners; @Before - public void initOwners(){ - this.mockMvc = MockMvcBuilders.standaloneSetup(ownerRestController) - .setControllerAdvice(new ExceptionControllerAdvice()) - .build(); - owners = new ArrayList<Owner>(); - - Owner ownerWithPet = new Owner(); - ownerWithPet.setId(1); - ownerWithPet.setFirstName("George"); - ownerWithPet.setLastName("Franklin"); - ownerWithPet.setAddress("110 W. Liberty St."); - ownerWithPet.setCity("Madison"); - ownerWithPet.setTelephone("6085551023"); - ownerWithPet.addPet(getTestPetWithIdAndName(ownerWithPet, 1, "Rosy")); - owners.add(ownerWithPet); - - Owner owner = new Owner(); - owner.setId(2); - owner.setFirstName("Betty"); - owner.setLastName("Davis"); - owner.setAddress("638 Cardinal Ave."); - owner.setCity("Sun Prairie"); - owner.setTelephone("6085551749"); - owners.add(owner); - - owner = new Owner(); - owner.setId(3); - owner.setFirstName("Eduardo"); - owner.setLastName("Rodriquez"); - owner.setAddress("2693 Commerce St."); - owner.setCity("McFarland"); - owner.setTelephone("6085558763"); - owners.add(owner); - - owner = new Owner(); - owner.setId(4); - owner.setFirstName("Harold"); - owner.setLastName("Davis"); - owner.setAddress("563 Friendly St."); - owner.setCity("Windsor"); - owner.setTelephone("6085553198"); - owners.add(owner); + public void initOwners() { + this.mockMvc = MockMvcBuilders.standaloneSetup(ownerRestController) + .setControllerAdvice(new ExceptionControllerAdvice()) + .build(); + owners = new ArrayList<OwnerDto>(); + + OwnerDto ownerWithPet = new OwnerDto(); + ownerWithPet.setId(1); + ownerWithPet.setFirstName("George"); + ownerWithPet.setLastName("Franklin"); + ownerWithPet.setAddress("110 W. Liberty St."); + ownerWithPet.setCity("Madison"); + ownerWithPet.setTelephone("6085551023"); + ownerWithPet.addPetsItem(getTestPetWithIdAndName(ownerWithPet, 1, "Rosy")); + owners.add(ownerWithPet); + + OwnerDto owner = new OwnerDto(); + owner.setId(2); + owner.setFirstName("Betty"); + owner.setLastName("Davis"); + owner.setAddress("638 Cardinal Ave."); + owner.setCity("Sun Prairie"); + owner.setTelephone("6085551749"); + owners.add(owner); + + owner = new OwnerDto(); + owner.setId(3); + owner.setFirstName("Eduardo"); + owner.setLastName("Rodriquez"); + owner.setAddress("2693 Commerce St."); + owner.setCity("McFarland"); + owner.setTelephone("6085558763"); + owners.add(owner); + + owner = new OwnerDto(); + owner.setId(4); + owner.setFirstName("Harold"); + owner.setLastName("Davis"); + owner.setAddress("563 Friendly St."); + owner.setCity("Windsor"); + owner.setTelephone("6085553198"); + owners.add(owner); } - private Pet getTestPetWithIdAndName(final Owner owner, final int id, final String name) { - PetType petType = new PetType(); + private PetDto getTestPetWithIdAndName(final OwnerDto owner, final int id, final String name) { + PetTypeDto petType = new PetTypeDto(); petType.setId(2); petType.setName("dog"); - Pet pet = new Pet(); + PetDto pet = new PetDto(); pet.setId(id); pet.setName(name); pet.setBirthDate(new Date()); pet.setOwner(owner); pet.setType(petType); - pet.addVisit(getTestVisitForPet(pet, 1)); + pet.addVisitsItem(getTestVisitForPet(pet, 1)); return pet; } - private Visit getTestVisitForPet(final Pet pet, final int id) { - Visit visit = new Visit(); + private VisitDto getTestVisitForPet(final PetDto pet, final int id) { + VisitDto visit = new VisitDto(); visit.setId(id); visit.setPet(pet); visit.setDate(new Date()); @@ -140,11 +140,11 @@ public class OwnerRestControllerTests { } @Test - @WithMockUser(roles="OWNER_ADMIN") + @WithMockUser(roles = "OWNER_ADMIN") public void testGetOwnerSuccess() throws Exception { - given(this.clinicService.findOwnerById(1)).willReturn(owners.get(0)); + given(this.clinicService.findOwnerById(1)).willReturn(ownerMapper.toOwner(owners.get(0))); this.mockMvc.perform(get("/api/owners/1") - .accept(MediaType.APPLICATION_JSON_VALUE)) + .accept(MediaType.APPLICATION_JSON_VALUE)) .andExpect(status().isOk()) .andExpect(content().contentType("application/json")) .andExpect(jsonPath("$.id").value(1)) @@ -152,22 +152,22 @@ public class OwnerRestControllerTests { } @Test - @WithMockUser(roles="OWNER_ADMIN") + @WithMockUser(roles = "OWNER_ADMIN") public void testGetOwnerNotFound() throws Exception { - given(this.clinicService.findOwnerById(-1)).willReturn(null); + given(this.clinicService.findOwnerById(-1)).willReturn(null); this.mockMvc.perform(get("/api/owners/-1") - .accept(MediaType.APPLICATION_JSON)) + .accept(MediaType.APPLICATION_JSON)) .andExpect(status().isNotFound()); } @Test - @WithMockUser(roles="OWNER_ADMIN") + @WithMockUser(roles = "OWNER_ADMIN") public void testGetOwnersListSuccess() throws Exception { - owners.remove(0); - owners.remove(1); - given(this.clinicService.findOwnerByLastName("Davis")).willReturn(owners); + owners.remove(0); + owners.remove(1); + given(this.clinicService.findOwnerByLastName("Davis")).willReturn(ownerMapper.toOwners(owners)); this.mockMvc.perform(get("/api/owners/*/lastname/Davis") - .accept(MediaType.APPLICATION_JSON)) + .accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(content().contentType("application/json")) .andExpect(jsonPath("$.[0].id").value(2)) @@ -177,23 +177,23 @@ public class OwnerRestControllerTests { } @Test - @WithMockUser(roles="OWNER_ADMIN") + @WithMockUser(roles = "OWNER_ADMIN") public void testGetOwnersListNotFound() throws Exception { - owners.clear(); - given(this.clinicService.findOwnerByLastName("0")).willReturn(owners); + owners.clear(); + given(this.clinicService.findOwnerByLastName("0")).willReturn(ownerMapper.toOwners(owners)); this.mockMvc.perform(get("/api/owners/?lastName=0") - .accept(MediaType.APPLICATION_JSON)) + .accept(MediaType.APPLICATION_JSON)) .andExpect(status().isNotFound()); } @Test - @WithMockUser(roles="OWNER_ADMIN") + @WithMockUser(roles = "OWNER_ADMIN") public void testGetAllOwnersSuccess() throws Exception { - owners.remove(0); - owners.remove(1); - given(this.clinicService.findAllOwners()).willReturn(owners); + owners.remove(0); + owners.remove(1); + given(this.clinicService.findAllOwners()).willReturn(ownerMapper.toOwners(owners)); this.mockMvc.perform(get("/api/owners/") - .accept(MediaType.APPLICATION_JSON)) + .accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(content().contentType("application/json")) .andExpect(jsonPath("$.[0].id").value(2)) @@ -203,102 +203,103 @@ public class OwnerRestControllerTests { } @Test - @WithMockUser(roles="OWNER_ADMIN") + @WithMockUser(roles = "OWNER_ADMIN") public void testGetAllOwnersNotFound() throws Exception { - owners.clear(); - given(this.clinicService.findAllOwners()).willReturn(owners); + owners.clear(); + given(this.clinicService.findAllOwners()).willReturn(ownerMapper.toOwners(owners)); this.mockMvc.perform(get("/api/owners/") - .accept(MediaType.APPLICATION_JSON)) + .accept(MediaType.APPLICATION_JSON)) .andExpect(status().isNotFound()); } @Test - @WithMockUser(roles="OWNER_ADMIN") + @WithMockUser(roles = "OWNER_ADMIN") public void testCreateOwnerSuccess() throws Exception { - Owner newOwner = owners.get(0); - newOwner.setId(null); - ObjectMapper mapper = new ObjectMapper(); - String newOwnerAsJSON = mapper.writeValueAsString(newOwner); - this.mockMvc.perform(post("/api/owners/") - .content(newOwnerAsJSON).accept(MediaType.APPLICATION_JSON_VALUE).contentType(MediaType.APPLICATION_JSON_VALUE)) - .andExpect(status().isCreated()); + OwnerDto newOwnerDto = owners.get(0); + newOwnerDto.setId(null); + ObjectMapper mapper = new ObjectMapper(); + String newOwnerAsJSON = mapper.writeValueAsString(newOwnerDto); + this.mockMvc.perform(post("/api/owners/") + .content(newOwnerAsJSON).accept(MediaType.APPLICATION_JSON_VALUE).contentType(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isCreated()); } @Test - @WithMockUser(roles="OWNER_ADMIN") + @WithMockUser(roles = "OWNER_ADMIN") public void testCreateOwnerErrorIdSpecified() throws Exception { - Owner newOwner = owners.get(0); - newOwner.setId(999); + OwnerDto newOwnerDto = owners.get(0); + newOwnerDto.setId(999); ObjectMapper mapper = new ObjectMapper(); - String newOwnerAsJSON = mapper.writeValueAsString(newOwner); + String newOwnerAsJSON = mapper.writeValueAsString(newOwnerDto); this.mockMvc.perform(post("/api/owners/") - .content(newOwnerAsJSON).accept(MediaType.APPLICATION_JSON_VALUE).contentType(MediaType.APPLICATION_JSON_VALUE)) + .content(newOwnerAsJSON).accept(MediaType.APPLICATION_JSON_VALUE).contentType(MediaType.APPLICATION_JSON_VALUE)) .andExpect(status().isBadRequest()) .andExpect(header().string("errors", "[{\"objectName\":\"body\",\"fieldName\":\"id\",\"fieldValue\":\"999\",\"errorMessage\":\"must not be specified\"}]")); } @Test - @WithMockUser(roles="OWNER_ADMIN") + @WithMockUser(roles = "OWNER_ADMIN") public void testCreateOwnerError() throws Exception { - Owner newOwner = owners.get(0); - newOwner.setId(null); - newOwner.setFirstName(null); - ObjectMapper mapper = new ObjectMapper(); - String newOwnerAsJSON = mapper.writeValueAsString(newOwner); - this.mockMvc.perform(post("/api/owners/") - .content(newOwnerAsJSON).accept(MediaType.APPLICATION_JSON_VALUE).contentType(MediaType.APPLICATION_JSON_VALUE)) - .andExpect(status().isBadRequest()); - } + OwnerDto newOwnerDto = owners.get(0); + newOwnerDto.setId(null); + newOwnerDto.setFirstName(null); + ObjectMapper mapper = new ObjectMapper(); + String newOwnerAsJSON = mapper.writeValueAsString(newOwnerDto); + this.mockMvc.perform(post("/api/owners/") + .content(newOwnerAsJSON).accept(MediaType.APPLICATION_JSON_VALUE).contentType(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isBadRequest()); + } @Test - @WithMockUser(roles="OWNER_ADMIN") + @WithMockUser(roles = "OWNER_ADMIN") public void testUpdateOwnerSuccess() throws Exception { - given(this.clinicService.findOwnerById(1)).willReturn(owners.get(0)); + given(this.clinicService.findOwnerById(1)).willReturn(ownerMapper.toOwner(owners.get(0))); int ownerId = owners.get(0).getId(); - Owner updatedOwner = new Owner(); + OwnerDto updatedOwnerDto = new OwnerDto(); // body.id = ownerId which is used in url path - updatedOwner.setId(ownerId); - updatedOwner.setFirstName("George I"); - updatedOwner.setLastName("Franklin"); - updatedOwner.setAddress("110 W. Liberty St."); - updatedOwner.setCity("Madison"); - updatedOwner.setTelephone("6085551023"); + updatedOwnerDto.setId(ownerId); + updatedOwnerDto.setFirstName("George I"); + updatedOwnerDto.setLastName("Franklin"); + updatedOwnerDto.setAddress("110 W. Liberty St."); + updatedOwnerDto.setCity("Madison"); + updatedOwnerDto.setTelephone("6085551023"); ObjectMapper mapper = new ObjectMapper(); - String newOwnerAsJSON = mapper.writeValueAsString(updatedOwner); + String newOwnerAsJSON = mapper.writeValueAsString(updatedOwnerDto); this.mockMvc.perform(put("/api/owners/" + ownerId) - .content(newOwnerAsJSON).accept(MediaType.APPLICATION_JSON_VALUE).contentType(MediaType.APPLICATION_JSON_VALUE)) + .content(newOwnerAsJSON).accept(MediaType.APPLICATION_JSON_VALUE).contentType(MediaType.APPLICATION_JSON_VALUE)) .andExpect(content().contentType("application/json")) .andExpect(status().isNoContent()); this.mockMvc.perform(get("/api/owners/" + ownerId) - .accept(MediaType.APPLICATION_JSON).contentType(MediaType.APPLICATION_JSON_VALUE)) + .accept(MediaType.APPLICATION_JSON).contentType(MediaType.APPLICATION_JSON_VALUE)) .andExpect(status().isOk()) .andExpect(content().contentType("application/json")) .andExpect(jsonPath("$.id").value(ownerId)) .andExpect(jsonPath("$.firstName").value("George I")); } + @Test - @WithMockUser(roles="OWNER_ADMIN") + @WithMockUser(roles = "OWNER_ADMIN") public void testUpdateOwnerSuccessNoBodyId() throws Exception { - given(this.clinicService.findOwnerById(1)).willReturn(owners.get(0)); + given(this.clinicService.findOwnerById(1)).willReturn(ownerMapper.toOwner(owners.get(0))); int ownerId = owners.get(0).getId(); - Owner updatedOwner = new Owner(); - updatedOwner.setFirstName("George I"); - updatedOwner.setLastName("Franklin"); - updatedOwner.setAddress("110 W. Liberty St."); - updatedOwner.setCity("Madison"); - updatedOwner.setTelephone("6085551023"); - ObjectMapper mapper = new ObjectMapper(); - String newOwnerAsJSON = mapper.writeValueAsString(updatedOwner); - this.mockMvc.perform(put("/api/owners/" + ownerId) - .content(newOwnerAsJSON).accept(MediaType.APPLICATION_JSON_VALUE).contentType(MediaType.APPLICATION_JSON_VALUE)) - .andExpect(content().contentType("application/json")) - .andExpect(status().isNoContent()); - - this.mockMvc.perform(get("/api/owners/" + ownerId) - .accept(MediaType.APPLICATION_JSON).contentType(MediaType.APPLICATION_JSON_VALUE)) + OwnerDto updatedOwnerDto = new OwnerDto(); + updatedOwnerDto.setFirstName("George I"); + updatedOwnerDto.setLastName("Franklin"); + updatedOwnerDto.setAddress("110 W. Liberty St."); + updatedOwnerDto.setCity("Madison"); + updatedOwnerDto.setTelephone("6085551023"); + ObjectMapper mapper = new ObjectMapper(); + String newOwnerAsJSON = mapper.writeValueAsString(updatedOwnerDto); + this.mockMvc.perform(put("/api/owners/" + ownerId) + .content(newOwnerAsJSON).accept(MediaType.APPLICATION_JSON_VALUE).contentType(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(content().contentType("application/json")) + .andExpect(status().isNoContent()); + + this.mockMvc.perform(get("/api/owners/" + ownerId) + .accept(MediaType.APPLICATION_JSON).contentType(MediaType.APPLICATION_JSON_VALUE)) .andExpect(status().isOk()) .andExpect(content().contentType("application/json")) .andExpect(jsonPath("$.id").value(ownerId)) @@ -307,60 +308,60 @@ public class OwnerRestControllerTests { } @Test - @WithMockUser(roles="OWNER_ADMIN") + @WithMockUser(roles = "OWNER_ADMIN") public void testUpdateOwnerErrorBodyIdMismatchWithPathId() throws Exception { int ownerId = owners.get(0).getId(); - Owner updatedOwner = new Owner(); + OwnerDto updatedOwnerDto = new OwnerDto(); // body.id != ownerId - updatedOwner.setId(-1); - updatedOwner.setFirstName("George I"); - updatedOwner.setLastName("Franklin"); - updatedOwner.setAddress("110 W. Liberty St."); - updatedOwner.setCity("Madison"); - updatedOwner.setTelephone("6085551023"); + updatedOwnerDto.setId(-1); + updatedOwnerDto.setFirstName("George I"); + updatedOwnerDto.setLastName("Franklin"); + updatedOwnerDto.setAddress("110 W. Liberty St."); + updatedOwnerDto.setCity("Madison"); + updatedOwnerDto.setTelephone("6085551023"); ObjectMapper mapper = new ObjectMapper(); - String newOwnerAsJSON = mapper.writeValueAsString(updatedOwner); + String newOwnerAsJSON = mapper.writeValueAsString(updatedOwnerDto); this.mockMvc.perform(put("/api/owners/" + ownerId) - .content(newOwnerAsJSON).accept(MediaType.APPLICATION_JSON_VALUE).contentType(MediaType.APPLICATION_JSON_VALUE)) + .content(newOwnerAsJSON).accept(MediaType.APPLICATION_JSON_VALUE).contentType(MediaType.APPLICATION_JSON_VALUE)) .andExpect(status().isBadRequest()) .andExpect(header().string("errors", "[{\"objectName\":\"body\",\"fieldName\":\"id\",\"fieldValue\":\"-1\",\"errorMessage\":\"does not match pathId: 1\"}]")); } @Test - @WithMockUser(roles="OWNER_ADMIN") + @WithMockUser(roles = "OWNER_ADMIN") public void testUpdateOwnerError() throws Exception { - Owner newOwner = owners.get(0); - newOwner.setFirstName(""); - ObjectMapper mapper = new ObjectMapper(); - String newOwnerAsJSON = mapper.writeValueAsString(newOwner); - this.mockMvc.perform(put("/api/owners/1") - .content(newOwnerAsJSON).accept(MediaType.APPLICATION_JSON_VALUE).contentType(MediaType.APPLICATION_JSON_VALUE)) - .andExpect(status().isBadRequest()); - } + OwnerDto newOwnerDto = owners.get(0); + newOwnerDto.setFirstName(""); + ObjectMapper mapper = new ObjectMapper(); + String newOwnerAsJSON = mapper.writeValueAsString(newOwnerDto); + this.mockMvc.perform(put("/api/owners/1") + .content(newOwnerAsJSON).accept(MediaType.APPLICATION_JSON_VALUE).contentType(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isBadRequest()); + } @Test - @WithMockUser(roles="OWNER_ADMIN") + @WithMockUser(roles = "OWNER_ADMIN") public void testDeleteOwnerSuccess() throws Exception { - Owner newOwner = owners.get(0); - ObjectMapper mapper = new ObjectMapper(); - String newOwnerAsJSON = mapper.writeValueAsString(newOwner); - given(this.clinicService.findOwnerById(1)).willReturn(owners.get(0)); - this.mockMvc.perform(delete("/api/owners/1") - .content(newOwnerAsJSON).accept(MediaType.APPLICATION_JSON_VALUE).contentType(MediaType.APPLICATION_JSON_VALUE)) - .andExpect(status().isNoContent()); + OwnerDto newOwnerDto = owners.get(0); + ObjectMapper mapper = new ObjectMapper(); + String newOwnerAsJSON = mapper.writeValueAsString(newOwnerDto); + given(this.clinicService.findOwnerById(1)).willReturn(ownerMapper.toOwner(owners.get(0))); + this.mockMvc.perform(delete("/api/owners/1") + .content(newOwnerAsJSON).accept(MediaType.APPLICATION_JSON_VALUE).contentType(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isNoContent()); } @Test - @WithMockUser(roles="OWNER_ADMIN") + @WithMockUser(roles = "OWNER_ADMIN") public void testDeleteOwnerError() throws Exception { - Owner newOwner = owners.get(0); - ObjectMapper mapper = new ObjectMapper(); - String newOwnerAsJSON = mapper.writeValueAsString(newOwner); - given(this.clinicService.findOwnerById(-1)).willReturn(null); - this.mockMvc.perform(delete("/api/owners/-1") - .content(newOwnerAsJSON).accept(MediaType.APPLICATION_JSON_VALUE).contentType(MediaType.APPLICATION_JSON_VALUE)) - .andExpect(status().isNotFound()); + OwnerDto newOwnerDto = owners.get(0); + ObjectMapper mapper = new ObjectMapper(); + String newOwnerAsJSON = mapper.writeValueAsString(newOwnerDto); + given(this.clinicService.findOwnerById(-1)).willReturn(null); + this.mockMvc.perform(delete("/api/owners/-1") + .content(newOwnerAsJSON).accept(MediaType.APPLICATION_JSON_VALUE).contentType(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isNotFound()); } } -- GitLab