From 1080006218bfeea427937ca334ed7908bde3d62c Mon Sep 17 00:00:00 2001
From: Antoine Rey
Date: Wed, 17 Aug 2016 18:43:41 +0200
Subject: [PATCH] Merging AbstractClinicServiceTests and
ClinicServiceSpringDataJpaTests then using the Spring Boot @DataJpaTest
annotation
---
.../service/AbstractClinicServiceTests.java | 204 ------------------
.../ClinicServiceSpringDataJpaTests.java | 183 +++++++++++++++-
2 files changed, 177 insertions(+), 210 deletions(-)
delete mode 100644 src/test/java/org/springframework/samples/petclinic/service/AbstractClinicServiceTests.java
diff --git a/src/test/java/org/springframework/samples/petclinic/service/AbstractClinicServiceTests.java b/src/test/java/org/springframework/samples/petclinic/service/AbstractClinicServiceTests.java
deleted file mode 100644
index 446a0a0a7..000000000
--- a/src/test/java/org/springframework/samples/petclinic/service/AbstractClinicServiceTests.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Copyright 2002-2013 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.samples.petclinic.service;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.util.Collection;
-
-import org.joda.time.DateTime;
-import org.joda.time.LocalDate;
-import org.junit.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-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.Vet;
-import org.springframework.samples.petclinic.model.Visit;
-import org.springframework.samples.petclinic.util.EntityUtils;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * Base class for {@link ClinicService} integration tests.
Subclasses should specify Spring context
- * configuration using {@link ContextConfiguration @ContextConfiguration} annotation
- * AbstractclinicServiceTests and its subclasses benefit from the following services provided by the Spring
- * TestContext Framework:
- Spring IoC container caching which spares us unnecessary set up
- * time between test execution.
- Dependency Injection of test fixture instances, meaning that
- * we don't need to perform application context lookups. See the use of {@link Autowired @Autowired} on the
{@link
- * AbstractClinicServiceTests#clinicService clinicService}
instance variable, which uses autowiring by
- * type. - Transaction management, meaning each test method is executed in its own transaction,
- * which is automatically rolled back by default. Thus, even if tests insert or otherwise change database state, there
- * is no need for a teardown or cleanup script.
- An {@link org.springframework.context.ApplicationContext
- * ApplicationContext} is also inherited and can be used for explicit bean lookup if necessary.
- *
- * @author Ken Krebs
- * @author Rod Johnson
- * @author Juergen Hoeller
- * @author Sam Brannen
- * @author Michael Isvy
- */
-public abstract class AbstractClinicServiceTests {
-
- @Autowired
- protected ClinicService clinicService;
-
- @Test
- public void shouldFindOwnersByLastName() {
- Collection owners = this.clinicService.findOwnerByLastName("Davis");
- assertThat(owners.size()).isEqualTo(2);
-
- owners = this.clinicService.findOwnerByLastName("Daviss");
- assertThat(owners.isEmpty()).isTrue();
- }
-
- @Test
- public void shouldFindSingleOwnerWithPet() {
- Owner owner = this.clinicService.findOwnerById(1);
- assertThat(owner.getLastName()).startsWith("Franklin");
- assertThat(owner.getPets().size()).isEqualTo(1);
- assertThat(owner.getPets().get(0).getType()).isNotNull();
- assertThat(owner.getPets().get(0).getType().getName()).isEqualTo("cat");
- }
-
- @Test
- @Transactional
- public void shouldInsertOwner() {
- Collection owners = this.clinicService.findOwnerByLastName("Schultz");
- int found = owners.size();
-
- Owner owner = new Owner();
- owner.setFirstName("Sam");
- owner.setLastName("Schultz");
- owner.setAddress("4, Evans Street");
- owner.setCity("Wollongong");
- owner.setTelephone("4444444444");
- this.clinicService.saveOwner(owner);
- assertThat(owner.getId().longValue()).isNotEqualTo(0);
-
- owners = this.clinicService.findOwnerByLastName("Schultz");
- assertThat(owners.size()).isEqualTo(found + 1);
- }
-
- @Test
- @Transactional
- public void shouldUpdateOwner() {
- Owner owner = this.clinicService.findOwnerById(1);
- String oldLastName = owner.getLastName();
- String newLastName = oldLastName + "X";
-
- owner.setLastName(newLastName);
- this.clinicService.saveOwner(owner);
-
- // retrieving new name from database
- owner = this.clinicService.findOwnerById(1);
- assertThat(owner.getLastName()).isEqualTo(newLastName);
- }
-
- @Test
- public void shouldFindPetWithCorrectId() {
- Pet pet7 = this.clinicService.findPetById(7);
- assertThat(pet7.getName()).startsWith("Samantha");
- assertThat(pet7.getOwner().getFirstName()).isEqualTo("Jean");
-
- }
-
- @Test
- public void shouldFindAllPetTypes() {
- Collection petTypes = this.clinicService.findPetTypes();
-
- PetType petType1 = EntityUtils.getById(petTypes, PetType.class, 1);
- assertThat(petType1.getName()).isEqualTo("cat");
- PetType petType4 = EntityUtils.getById(petTypes, PetType.class, 4);
- assertThat(petType4.getName()).isEqualTo("snake");
- }
-
- @Test
- @Transactional
- public void shouldInsertPetIntoDatabaseAndGenerateId() {
- Owner owner6 = this.clinicService.findOwnerById(6);
- int found = owner6.getPets().size();
-
- Pet pet = new Pet();
- pet.setName("bowser");
- Collection types = this.clinicService.findPetTypes();
- pet.setType(EntityUtils.getById(types, PetType.class, 2));
- pet.setBirthDate(new LocalDate());
- owner6.addPet(pet);
- assertThat(owner6.getPets().size()).isEqualTo(found + 1);
-
- this.clinicService.savePet(pet);
- this.clinicService.saveOwner(owner6);
-
- owner6 = this.clinicService.findOwnerById(6);
- assertThat(owner6.getPets().size()).isEqualTo(found + 1);
- // checks that id has been generated
- assertThat(pet.getId()).isNotNull();
- }
-
- @Test
- @Transactional
- public void shouldUpdatePetName() throws Exception {
- Pet pet7 = this.clinicService.findPetById(7);
- String oldName = pet7.getName();
-
- String newName = oldName + "X";
- pet7.setName(newName);
- this.clinicService.savePet(pet7);
-
- pet7 = this.clinicService.findPetById(7);
- assertThat(pet7.getName()).isEqualTo(newName);
- }
-
- @Test
- public void shouldFindVets() {
- Collection vets = this.clinicService.findVets();
-
- Vet vet = EntityUtils.getById(vets, Vet.class, 3);
- assertThat(vet.getLastName()).isEqualTo("Douglas");
- assertThat(vet.getNrOfSpecialties()).isEqualTo(2);
- assertThat(vet.getSpecialties().get(0).getName()).isEqualTo("dentistry");
- assertThat(vet.getSpecialties().get(1).getName()).isEqualTo("surgery");
- }
-
- @Test
- @Transactional
- public void shouldAddNewVisitForPet() {
- Pet pet7 = this.clinicService.findPetById(7);
- int found = pet7.getVisits().size();
- Visit visit = new Visit();
- pet7.addVisit(visit);
- visit.setDescription("test");
- this.clinicService.saveVisit(visit);
- this.clinicService.savePet(pet7);
-
- pet7 = this.clinicService.findPetById(7);
- assertThat(pet7.getVisits().size()).isEqualTo(found + 1);
- assertThat(visit.getId()).isNotNull();
- }
-
- @Test
- public void shouldFindVisitsByPetId() throws Exception {
- Collection visits = this.clinicService.findVisitsByPetId(7);
- assertThat(visits.size()).isEqualTo(2);
- Visit[] visitArr = visits.toArray(new Visit[visits.size()]);
- assertThat(visitArr[0].getPet()).isNotNull();
- assertThat(visitArr[0].getDate()).isNotNull();
- assertThat(visitArr[0].getPet().getId()).isEqualTo(7);
- }
-
-
-}
diff --git a/src/test/java/org/springframework/samples/petclinic/service/ClinicServiceSpringDataJpaTests.java b/src/test/java/org/springframework/samples/petclinic/service/ClinicServiceSpringDataJpaTests.java
index 9dc401189..f29c2da68 100644
--- a/src/test/java/org/springframework/samples/petclinic/service/ClinicServiceSpringDataJpaTests.java
+++ b/src/test/java/org/springframework/samples/petclinic/service/ClinicServiceSpringDataJpaTests.java
@@ -1,19 +1,190 @@
package org.springframework.samples.petclinic.service;
+import org.joda.time.LocalDate;
+import org.junit.Test;
import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.samples.petclinic.PetClinicApplication;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.samples.petclinic.model.*;
+import org.springframework.samples.petclinic.util.EntityUtils;
+import org.springframework.stereotype.Service;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Collection;
+
+import static org.assertj.core.api.Assertions.assertThat;
/**
- * Integration test using the 'Spring Data' profile.
+ * Integration test of the Service and the Repository layer.
+ *
+ * ClinicServiceSpringDataJpaTests subclasses benefit from the following services provided by the Spring
+ * TestContext Framework:
- Spring IoC container caching which spares us unnecessary set up
+ * time between test execution.
- Dependency Injection of test fixture instances, meaning that
+ * we don't need to perform application context lookups. See the use of {@link Autowired @Autowired} on the
{@link
+ * ClinicServiceSpringDataJpaTests#clinicService clinicService}
instance variable, which uses autowiring by
+ * type. - Transaction management, meaning each test method is executed in its own transaction,
+ * which is automatically rolled back by default. Thus, even if tests insert or otherwise change database state, there
+ * is no need for a teardown or cleanup script.
- An {@link org.springframework.context.ApplicationContext
+ * ApplicationContext} is also inherited and can be used for explicit bean lookup if necessary.
*
+ * @author Ken Krebs
+ * @author Rod Johnson
+ * @author Juergen Hoeller
+ * @author Sam Brannen
* @author Michael Isvy
- * @see AbstractClinicServiceTests AbstractClinicServiceTests for more details.
*/
@RunWith(SpringJUnit4ClassRunner.class)
-@SpringBootTest(classes = PetClinicApplication.class)
-public class ClinicServiceSpringDataJpaTests extends AbstractClinicServiceTests {
+@DataJpaTest(includeFilters = @ComponentScan.Filter(Service.class))
+public class ClinicServiceSpringDataJpaTests {
+
+ @Autowired
+ protected ClinicService clinicService;
+
+ @Test
+ public void shouldFindOwnersByLastName() {
+ Collection owners = this.clinicService.findOwnerByLastName("Davis");
+ assertThat(owners.size()).isEqualTo(2);
+
+ owners = this.clinicService.findOwnerByLastName("Daviss");
+ assertThat(owners.isEmpty()).isTrue();
+ }
+
+ @Test
+ public void shouldFindSingleOwnerWithPet() {
+ Owner owner = this.clinicService.findOwnerById(1);
+ assertThat(owner.getLastName()).startsWith("Franklin");
+ assertThat(owner.getPets().size()).isEqualTo(1);
+ assertThat(owner.getPets().get(0).getType()).isNotNull();
+ assertThat(owner.getPets().get(0).getType().getName()).isEqualTo("cat");
+ }
+
+ @Test
+ @Transactional
+ public void shouldInsertOwner() {
+ Collection owners = this.clinicService.findOwnerByLastName("Schultz");
+ int found = owners.size();
+
+ Owner owner = new Owner();
+ owner.setFirstName("Sam");
+ owner.setLastName("Schultz");
+ owner.setAddress("4, Evans Street");
+ owner.setCity("Wollongong");
+ owner.setTelephone("4444444444");
+ this.clinicService.saveOwner(owner);
+ assertThat(owner.getId().longValue()).isNotEqualTo(0);
+
+ owners = this.clinicService.findOwnerByLastName("Schultz");
+ assertThat(owners.size()).isEqualTo(found + 1);
+ }
+
+ @Test
+ @Transactional
+ public void shouldUpdateOwner() {
+ Owner owner = this.clinicService.findOwnerById(1);
+ String oldLastName = owner.getLastName();
+ String newLastName = oldLastName + "X";
+
+ owner.setLastName(newLastName);
+ this.clinicService.saveOwner(owner);
+
+ // retrieving new name from database
+ owner = this.clinicService.findOwnerById(1);
+ assertThat(owner.getLastName()).isEqualTo(newLastName);
+ }
+
+ @Test
+ public void shouldFindPetWithCorrectId() {
+ Pet pet7 = this.clinicService.findPetById(7);
+ assertThat(pet7.getName()).startsWith("Samantha");
+ assertThat(pet7.getOwner().getFirstName()).isEqualTo("Jean");
+
+ }
+
+ @Test
+ public void shouldFindAllPetTypes() {
+ Collection petTypes = this.clinicService.findPetTypes();
+
+ PetType petType1 = EntityUtils.getById(petTypes, PetType.class, 1);
+ assertThat(petType1.getName()).isEqualTo("cat");
+ PetType petType4 = EntityUtils.getById(petTypes, PetType.class, 4);
+ assertThat(petType4.getName()).isEqualTo("snake");
+ }
+
+ @Test
+ @Transactional
+ public void shouldInsertPetIntoDatabaseAndGenerateId() {
+ Owner owner6 = this.clinicService.findOwnerById(6);
+ int found = owner6.getPets().size();
+
+ Pet pet = new Pet();
+ pet.setName("bowser");
+ Collection types = this.clinicService.findPetTypes();
+ pet.setType(EntityUtils.getById(types, PetType.class, 2));
+ pet.setBirthDate(new LocalDate());
+ owner6.addPet(pet);
+ assertThat(owner6.getPets().size()).isEqualTo(found + 1);
+
+ this.clinicService.savePet(pet);
+ this.clinicService.saveOwner(owner6);
+
+ owner6 = this.clinicService.findOwnerById(6);
+ assertThat(owner6.getPets().size()).isEqualTo(found + 1);
+ // checks that id has been generated
+ assertThat(pet.getId()).isNotNull();
+ }
+
+ @Test
+ @Transactional
+ public void shouldUpdatePetName() throws Exception {
+ Pet pet7 = this.clinicService.findPetById(7);
+ String oldName = pet7.getName();
+
+ String newName = oldName + "X";
+ pet7.setName(newName);
+ this.clinicService.savePet(pet7);
+
+ pet7 = this.clinicService.findPetById(7);
+ assertThat(pet7.getName()).isEqualTo(newName);
+ }
+
+ @Test
+ public void shouldFindVets() {
+ Collection vets = this.clinicService.findVets();
+
+ Vet vet = EntityUtils.getById(vets, Vet.class, 3);
+ assertThat(vet.getLastName()).isEqualTo("Douglas");
+ assertThat(vet.getNrOfSpecialties()).isEqualTo(2);
+ assertThat(vet.getSpecialties().get(0).getName()).isEqualTo("dentistry");
+ assertThat(vet.getSpecialties().get(1).getName()).isEqualTo("surgery");
+ }
+
+ @Test
+ @Transactional
+ public void shouldAddNewVisitForPet() {
+ Pet pet7 = this.clinicService.findPetById(7);
+ int found = pet7.getVisits().size();
+ Visit visit = new Visit();
+ pet7.addVisit(visit);
+ visit.setDescription("test");
+ this.clinicService.saveVisit(visit);
+ this.clinicService.savePet(pet7);
+
+ pet7 = this.clinicService.findPetById(7);
+ assertThat(pet7.getVisits().size()).isEqualTo(found + 1);
+ assertThat(visit.getId()).isNotNull();
+ }
+
+ @Test
+ public void shouldFindVisitsByPetId() throws Exception {
+ Collection visits = this.clinicService.findVisitsByPetId(7);
+ assertThat(visits.size()).isEqualTo(2);
+ Visit[] visitArr = visits.toArray(new Visit[visits.size()]);
+ assertThat(visitArr[0].getPet()).isNotNull();
+ assertThat(visitArr[0].getDate()).isNotNull();
+ assertThat(visitArr[0].getPet().getId()).isEqualTo(7);
+ }
}