diff --git a/pom.xml b/pom.xml
index ce92ea579..ed9e1ba00 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,7 +8,7 @@
org.springframework.boot
spring-boot-starter-parent
- 3.1.1
+ 3.1.2
petclinic
diff --git a/src/main/java/org/springframework/samples/petclinic/owner/PetTypeFormatter.java b/src/main/java/org/springframework/samples/petclinic/owner/PetTypeFormatter.java
index 4fa18da91..ccc769139 100644
--- a/src/main/java/org/springframework/samples/petclinic/owner/PetTypeFormatter.java
+++ b/src/main/java/org/springframework/samples/petclinic/owner/PetTypeFormatter.java
@@ -22,6 +22,7 @@ import org.springframework.stereotype.Component;
import java.text.ParseException;
import java.util.Collection;
import java.util.Locale;
+import java.util.concurrent.ThreadLocalRandom;
/**
* Instructs Spring MVC on how to parse and print elements of type 'PetType'. Starting
@@ -48,6 +49,13 @@ public class PetTypeFormatter implements Formatter {
return petType.getName();
}
+ public void vicNewFunction() {
+ for (int i = 0; i < 20; i++) {
+ int x = ThreadLocalRandom.current().nextInt();
+ System.out.println("Vic lalala untested " + x);
+ }
+ }
+
@Override
public PetType parse(String text, Locale locale) throws ParseException {
Collection findPetTypes = this.owners.findPetTypes();
diff --git a/src/test/java/org/springframework/samples/petclinic/owner/OwnerControllerTests.java b/src/test/java/org/springframework/samples/petclinic/owner/OwnerControllerTests.java
deleted file mode 100644
index 4b0f38a9a..000000000
--- a/src/test/java/org/springframework/samples/petclinic/owner/OwnerControllerTests.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Copyright 2012-2019 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
- *
- * https://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.owner;
-
-import static org.hamcrest.Matchers.empty;
-import static org.hamcrest.Matchers.hasProperty;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.not;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.BDDMockito.given;
-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.result.MockMvcResultMatchers.model;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;
-
-import java.time.LocalDate;
-import java.util.List;
-
-import org.assertj.core.util.Lists;
-import org.hamcrest.BaseMatcher;
-import org.hamcrest.Description;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.DisabledInNativeImage;
-import org.mockito.Mockito;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
-import org.springframework.boot.test.mock.mockito.MockBean;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageImpl;
-import org.springframework.data.domain.Pageable;
-import org.springframework.test.web.servlet.MockMvc;
-
-/**
- * Test class for {@link OwnerController}
- *
- * @author Colin But
- */
-@WebMvcTest(OwnerController.class)
-@DisabledInNativeImage
-class OwnerControllerTests {
-
- private static final int TEST_OWNER_ID = 1;
-
- @Autowired
- private MockMvc mockMvc;
-
- @MockBean
- private OwnerRepository owners;
-
- private Owner george() {
- Owner george = new Owner();
- george.setId(TEST_OWNER_ID);
- george.setFirstName("George");
- george.setLastName("Franklin");
- george.setAddress("110 W. Liberty St.");
- george.setCity("Madison");
- george.setTelephone("6085551023");
- Pet max = new Pet();
- PetType dog = new PetType();
- dog.setName("dog");
- max.setType(dog);
- max.setName("Max");
- max.setBirthDate(LocalDate.now());
- george.addPet(max);
- max.setId(1);
- return george;
- };
-
- @BeforeEach
- void setup() {
-
- Owner george = george();
- given(this.owners.findByLastName(eq("Franklin"), any(Pageable.class)))
- .willReturn(new PageImpl(Lists.newArrayList(george)));
-
- given(this.owners.findAll(any(Pageable.class))).willReturn(new PageImpl(Lists.newArrayList(george)));
-
- given(this.owners.findById(TEST_OWNER_ID)).willReturn(george);
- Visit visit = new Visit();
- visit.setDate(LocalDate.now());
- george.getPet("Max").getVisits().add(visit);
-
- }
-
- @Test
- void testInitCreationForm() throws Exception {
- mockMvc.perform(get("/owners/new"))
- .andExpect(status().isOk())
- .andExpect(model().attributeExists("owner"))
- .andExpect(view().name("owners/createOrUpdateOwnerForm"));
- }
-
- @Test
- void testProcessCreationFormSuccess() throws Exception {
- mockMvc
- .perform(post("/owners/new").param("firstName", "Joe")
- .param("lastName", "Bloggs")
- .param("address", "123 Caramel Street")
- .param("city", "London")
- .param("telephone", "01316761638"))
- .andExpect(status().is3xxRedirection());
- }
-
- @Test
- void testProcessCreationFormHasErrors() throws Exception {
- mockMvc
- .perform(post("/owners/new").param("firstName", "Joe").param("lastName", "Bloggs").param("city", "London"))
- .andExpect(status().isOk())
- .andExpect(model().attributeHasErrors("owner"))
- .andExpect(model().attributeHasFieldErrors("owner", "address"))
- .andExpect(model().attributeHasFieldErrors("owner", "telephone"))
- .andExpect(view().name("owners/createOrUpdateOwnerForm"));
- }
-
- @Test
- void testInitFindForm() throws Exception {
- mockMvc.perform(get("/owners/find"))
- .andExpect(status().isOk())
- .andExpect(model().attributeExists("owner"))
- .andExpect(view().name("owners/findOwners"));
- }
-
- @Test
- void testProcessFindFormSuccess() throws Exception {
- Page tasks = new PageImpl(Lists.newArrayList(george(), new Owner()));
- Mockito.when(this.owners.findByLastName(anyString(), any(Pageable.class))).thenReturn(tasks);
- mockMvc.perform(get("/owners?page=1")).andExpect(status().isOk()).andExpect(view().name("owners/ownersList"));
- }
-
- @Test
- void testProcessFindFormByLastName() throws Exception {
- Page tasks = new PageImpl(Lists.newArrayList(george()));
- Mockito.when(this.owners.findByLastName(eq("Franklin"), any(Pageable.class))).thenReturn(tasks);
- mockMvc.perform(get("/owners?page=1").param("lastName", "Franklin"))
- .andExpect(status().is3xxRedirection())
- .andExpect(view().name("redirect:/owners/" + TEST_OWNER_ID));
- }
-
- @Test
- void testProcessFindFormNoOwnersFound() throws Exception {
- Page tasks = new PageImpl(Lists.newArrayList());
- Mockito.when(this.owners.findByLastName(eq("Unknown Surname"), any(Pageable.class))).thenReturn(tasks);
- mockMvc.perform(get("/owners?page=1").param("lastName", "Unknown Surname"))
- .andExpect(status().isOk())
- .andExpect(model().attributeHasFieldErrors("owner", "lastName"))
- .andExpect(model().attributeHasFieldErrorCode("owner", "lastName", "notFound"))
- .andExpect(view().name("owners/findOwners"));
-
- }
-
- @Test
- void testInitUpdateOwnerForm() throws Exception {
- mockMvc.perform(get("/owners/{ownerId}/edit", TEST_OWNER_ID))
- .andExpect(status().isOk())
- .andExpect(model().attributeExists("owner"))
- .andExpect(model().attribute("owner", hasProperty("lastName", is("Franklin"))))
- .andExpect(model().attribute("owner", hasProperty("firstName", is("George"))))
- .andExpect(model().attribute("owner", hasProperty("address", is("110 W. Liberty St."))))
- .andExpect(model().attribute("owner", hasProperty("city", is("Madison"))))
- .andExpect(model().attribute("owner", hasProperty("telephone", is("6085551023"))))
- .andExpect(view().name("owners/createOrUpdateOwnerForm"));
- }
-
- @Test
- void testProcessUpdateOwnerFormSuccess() throws Exception {
- mockMvc
- .perform(post("/owners/{ownerId}/edit", TEST_OWNER_ID).param("firstName", "Joe")
- .param("lastName", "Bloggs")
- .param("address", "123 Caramel Street")
- .param("city", "London")
- .param("telephone", "01616291589"))
- .andExpect(status().is3xxRedirection())
- .andExpect(view().name("redirect:/owners/{ownerId}"));
- }
-
- @Test
- void testProcessUpdateOwnerFormUnchangedSuccess() throws Exception {
- mockMvc.perform(post("/owners/{ownerId}/edit", TEST_OWNER_ID))
- .andExpect(status().is3xxRedirection())
- .andExpect(view().name("redirect:/owners/{ownerId}"));
- }
-
- @Test
- void testProcessUpdateOwnerFormHasErrors() throws Exception {
- mockMvc
- .perform(post("/owners/{ownerId}/edit", TEST_OWNER_ID).param("firstName", "Joe")
- .param("lastName", "Bloggs")
- .param("address", "")
- .param("telephone", ""))
- .andExpect(status().isOk())
- .andExpect(model().attributeHasErrors("owner"))
- .andExpect(model().attributeHasFieldErrors("owner", "address"))
- .andExpect(model().attributeHasFieldErrors("owner", "telephone"))
- .andExpect(view().name("owners/createOrUpdateOwnerForm"));
- }
-
- @Test
- void testShowOwner() throws Exception {
- mockMvc.perform(get("/owners/{ownerId}", TEST_OWNER_ID))
- .andExpect(status().isOk())
- .andExpect(model().attribute("owner", hasProperty("lastName", is("Franklin"))))
- .andExpect(model().attribute("owner", hasProperty("firstName", is("George"))))
- .andExpect(model().attribute("owner", hasProperty("address", is("110 W. Liberty St."))))
- .andExpect(model().attribute("owner", hasProperty("city", is("Madison"))))
- .andExpect(model().attribute("owner", hasProperty("telephone", is("6085551023"))))
- .andExpect(model().attribute("owner", hasProperty("pets", not(empty()))))
- .andExpect(model().attribute("owner", hasProperty("pets", new BaseMatcher>() {
-
- @Override
- public boolean matches(Object item) {
- @SuppressWarnings("unchecked")
- List pets = (List) item;
- Pet pet = pets.get(0);
- if (pet.getVisits().isEmpty()) {
- return false;
- }
- return true;
- }
-
- @Override
- public void describeTo(Description description) {
- description.appendText("Max did not have any visits");
- }
- })))
- .andExpect(view().name("owners/ownerDetails"));
- }
-
-}
diff --git a/src/test/java/org/springframework/samples/petclinic/owner/PetControllerTests.java b/src/test/java/org/springframework/samples/petclinic/owner/PetControllerTests.java
deleted file mode 100755
index 763e8018c..000000000
--- a/src/test/java/org/springframework/samples/petclinic/owner/PetControllerTests.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright 2012-2019 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
- *
- * https://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.owner;
-
-import org.assertj.core.util.Lists;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.DisabledInNativeImage;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
-import org.springframework.boot.test.mock.mockito.MockBean;
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.FilterType;
-import org.springframework.test.web.servlet.MockMvc;
-
-import static org.mockito.BDDMockito.given;
-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.result.MockMvcResultMatchers.model;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;
-
-/**
- * Test class for the {@link PetController}
- *
- * @author Colin But
- */
-@WebMvcTest(value = PetController.class,
- includeFilters = @ComponentScan.Filter(value = PetTypeFormatter.class, type = FilterType.ASSIGNABLE_TYPE))
-@DisabledInNativeImage
-class PetControllerTests {
-
- private static final int TEST_OWNER_ID = 1;
-
- private static final int TEST_PET_ID = 1;
-
- @Autowired
- private MockMvc mockMvc;
-
- @MockBean
- private OwnerRepository owners;
-
- @BeforeEach
- void setup() {
- PetType cat = new PetType();
- cat.setId(3);
- cat.setName("hamster");
- given(this.owners.findPetTypes()).willReturn(Lists.newArrayList(cat));
- Owner owner = new Owner();
- Pet pet = new Pet();
- owner.addPet(pet);
- pet.setId(TEST_PET_ID);
- given(this.owners.findById(TEST_OWNER_ID)).willReturn(owner);
- }
-
- @Test
- void testInitCreationForm() throws Exception {
- mockMvc.perform(get("/owners/{ownerId}/pets/new", TEST_OWNER_ID))
- .andExpect(status().isOk())
- .andExpect(view().name("pets/createOrUpdatePetForm"))
- .andExpect(model().attributeExists("pet"));
- }
-
- @Test
- void testProcessCreationFormSuccess() throws Exception {
- mockMvc
- .perform(post("/owners/{ownerId}/pets/new", TEST_OWNER_ID).param("name", "Betty")
- .param("type", "hamster")
- .param("birthDate", "2015-02-12"))
- .andExpect(status().is3xxRedirection())
- .andExpect(view().name("redirect:/owners/{ownerId}"));
- }
-
- @Test
- void testProcessCreationFormHasErrors() throws Exception {
- mockMvc
- .perform(post("/owners/{ownerId}/pets/new", TEST_OWNER_ID).param("name", "Betty")
- .param("birthDate", "2015-02-12"))
- .andExpect(model().attributeHasNoErrors("owner"))
- .andExpect(model().attributeHasErrors("pet"))
- .andExpect(model().attributeHasFieldErrors("pet", "type"))
- .andExpect(model().attributeHasFieldErrorCode("pet", "type", "required"))
- .andExpect(status().isOk())
- .andExpect(view().name("pets/createOrUpdatePetForm"));
- }
-
- @Test
- void testInitUpdateForm() throws Exception {
- mockMvc.perform(get("/owners/{ownerId}/pets/{petId}/edit", TEST_OWNER_ID, TEST_PET_ID))
- .andExpect(status().isOk())
- .andExpect(model().attributeExists("pet"))
- .andExpect(view().name("pets/createOrUpdatePetForm"));
- }
-
- @Test
- void testProcessUpdateFormSuccess() throws Exception {
- mockMvc
- .perform(post("/owners/{ownerId}/pets/{petId}/edit", TEST_OWNER_ID, TEST_PET_ID).param("name", "Betty")
- .param("type", "hamster")
- .param("birthDate", "2015-02-12"))
- .andExpect(status().is3xxRedirection())
- .andExpect(view().name("redirect:/owners/{ownerId}"));
- }
-
- @Test
- void testProcessUpdateFormHasErrors() throws Exception {
- mockMvc
- .perform(post("/owners/{ownerId}/pets/{petId}/edit", TEST_OWNER_ID, TEST_PET_ID).param("name", "Betty")
- .param("birthDate", "2015/02/12"))
- .andExpect(model().attributeHasNoErrors("owner"))
- .andExpect(model().attributeHasErrors("pet"))
- .andExpect(status().isOk())
- .andExpect(view().name("pets/createOrUpdatePetForm"));
- }
-
-}
diff --git a/src/test/java/org/springframework/samples/petclinic/owner/PetTypeFormatterTests.java b/src/test/java/org/springframework/samples/petclinic/owner/PetTypeFormatterTests.java
deleted file mode 100644
index dabade7b9..000000000
--- a/src/test/java/org/springframework/samples/petclinic/owner/PetTypeFormatterTests.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright 2012-2019 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
- *
- * https://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.owner;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.BDDMockito.given;
-
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Locale;
-
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.DisabledInNativeImage;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.Mock;
-import org.mockito.junit.jupiter.MockitoExtension;
-
-/**
- * Test class for {@link PetTypeFormatter}
- *
- * @author Colin But
- */
-@ExtendWith(MockitoExtension.class)
-@DisabledInNativeImage
-class PetTypeFormatterTests {
-
- @Mock
- private OwnerRepository pets;
-
- private PetTypeFormatter petTypeFormatter;
-
- @BeforeEach
- void setup() {
- this.petTypeFormatter = new PetTypeFormatter(pets);
- }
-
- @Test
- void testPrint() {
- PetType petType = new PetType();
- petType.setName("Hamster");
- String petTypeName = this.petTypeFormatter.print(petType, Locale.ENGLISH);
- assertThat(petTypeName).isEqualTo("Hamster");
- }
-
- @Test
- void shouldParse() throws ParseException {
- given(this.pets.findPetTypes()).willReturn(makePetTypes());
- PetType petType = petTypeFormatter.parse("Bird", Locale.ENGLISH);
- assertThat(petType.getName()).isEqualTo("Bird");
- }
-
- @Test
- void shouldThrowParseException() throws ParseException {
- given(this.pets.findPetTypes()).willReturn(makePetTypes());
- Assertions.assertThrows(ParseException.class, () -> {
- petTypeFormatter.parse("Fish", Locale.ENGLISH);
- });
- }
-
- /**
- * Helper method to produce some sample pet types just for test purpose
- * @return {@link Collection} of {@link PetType}
- */
- private List makePetTypes() {
- List petTypes = new ArrayList<>();
- petTypes.add(new PetType() {
- {
- setName("Dog");
- }
- });
- petTypes.add(new PetType() {
- {
- setName("Bird");
- }
- });
- return petTypes;
- }
-
-}
diff --git a/src/test/java/org/springframework/samples/petclinic/owner/VisitControllerTests.java b/src/test/java/org/springframework/samples/petclinic/owner/VisitControllerTests.java
deleted file mode 100644
index 7f456cca1..000000000
--- a/src/test/java/org/springframework/samples/petclinic/owner/VisitControllerTests.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright 2012-2019 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
- *
- * https://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.owner;
-
-import static org.mockito.BDDMockito.given;
-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.result.MockMvcResultMatchers.model;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.DisabledInNativeImage;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
-import org.springframework.boot.test.mock.mockito.MockBean;
-import org.springframework.test.web.servlet.MockMvc;
-
-/**
- * Test class for {@link VisitController}
- *
- * @author Colin But
- */
-@WebMvcTest(VisitController.class)
-@DisabledInNativeImage
-class VisitControllerTests {
-
- private static final int TEST_OWNER_ID = 1;
-
- private static final int TEST_PET_ID = 1;
-
- @Autowired
- private MockMvc mockMvc;
-
- @MockBean
- private OwnerRepository owners;
-
- @BeforeEach
- void init() {
- Owner owner = new Owner();
- Pet pet = new Pet();
- owner.addPet(pet);
- pet.setId(TEST_PET_ID);
- given(this.owners.findById(TEST_OWNER_ID)).willReturn(owner);
- }
-
- @Test
- void testInitNewVisitForm() throws Exception {
- mockMvc.perform(get("/owners/{ownerId}/pets/{petId}/visits/new", TEST_OWNER_ID, TEST_PET_ID))
- .andExpect(status().isOk())
- .andExpect(view().name("pets/createOrUpdateVisitForm"));
- }
-
- @Test
- void testProcessNewVisitFormSuccess() throws Exception {
- mockMvc
- .perform(post("/owners/{ownerId}/pets/{petId}/visits/new", TEST_OWNER_ID, TEST_PET_ID)
- .param("name", "George")
- .param("description", "Visit Description"))
- .andExpect(status().is3xxRedirection())
- .andExpect(view().name("redirect:/owners/{ownerId}"));
- }
-
- @Test
- void testProcessNewVisitFormHasErrors() throws Exception {
- mockMvc
- .perform(post("/owners/{ownerId}/pets/{petId}/visits/new", TEST_OWNER_ID, TEST_PET_ID).param("name",
- "George"))
- .andExpect(model().attributeHasErrors("visit"))
- .andExpect(status().isOk())
- .andExpect(view().name("pets/createOrUpdateVisitForm"));
- }
-
-}