diff --git a/src/test/java/org/springframework/samples/petclinic/MySqlIntegrationTests.java b/src/test/java/org/springframework/samples/petclinic/MySqlIntegrationTests.java deleted file mode 100644 index d67e449dc..000000000 --- a/src/test/java/org/springframework/samples/petclinic/MySqlIntegrationTests.java +++ /dev/null @@ -1,73 +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; - -import static org.assertj.core.api.Assertions.assertThat; - -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.context.SpringBootTest; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.server.LocalServerPort; -import org.springframework.boot.testcontainers.service.connection.ServiceConnection; -import org.springframework.boot.web.client.RestTemplateBuilder; -import org.springframework.http.HttpStatus; -import org.springframework.http.RequestEntity; -import org.springframework.http.ResponseEntity; -import org.springframework.samples.petclinic.vet.VetRepository; -import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.aot.DisabledInAotMode; -import org.springframework.web.client.RestTemplate; -import org.testcontainers.containers.MySQLContainer; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; - -@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) -@ActiveProfiles("mysql") -@Testcontainers(disabledWithoutDocker = true) -@DisabledInNativeImage -@DisabledInAotMode -class MySqlIntegrationTests { - - @ServiceConnection - @Container - static MySQLContainer container = new MySQLContainer<>("mysql:9.1"); - - @LocalServerPort - int port; - - @Autowired - private VetRepository vets; - - @Autowired - private RestTemplateBuilder builder; - - @Test - void testFindAll() { - vets.findAll(); - vets.findAll(); // served from cache - } - - @Test - void testOwnerDetails() { - RestTemplate template = builder.rootUri("http://localhost:" + port).build(); - ResponseEntity result = template.exchange(RequestEntity.get("/owners/1").build(), String.class); - assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK); - } - -} diff --git a/src/test/java/org/springframework/samples/petclinic/MysqlTestApplication.java b/src/test/java/org/springframework/samples/petclinic/MysqlTestApplication.java deleted file mode 100644 index f98d892d3..000000000 --- a/src/test/java/org/springframework/samples/petclinic/MysqlTestApplication.java +++ /dev/null @@ -1,47 +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; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.testcontainers.service.connection.ServiceConnection; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; -import org.testcontainers.containers.MySQLContainer; - -/** - * PetClinic Spring Boot Application. - * - * @author Dave Syer - * - */ -@Configuration -public class MysqlTestApplication { - - @ServiceConnection - @Profile("mysql") - @Bean - static MySQLContainer container() { - return new MySQLContainer<>("mysql:9.1"); - } - - public static void main(String[] args) { - SpringApplication.run(PetClinicApplication.class, "--spring.profiles.active=mysql", - "--spring.docker.compose.enabled=false"); - } - -} diff --git a/src/test/java/org/springframework/samples/petclinic/PetClinicIntegrationTests.java b/src/test/java/org/springframework/samples/petclinic/PetClinicIntegrationTests.java deleted file mode 100644 index 6d9820696..000000000 --- a/src/test/java/org/springframework/samples/petclinic/PetClinicIntegrationTests.java +++ /dev/null @@ -1,63 +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; - -import static org.assertj.core.api.Assertions.assertThat; - -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.server.LocalServerPort; -import org.springframework.boot.web.client.RestTemplateBuilder; -import org.springframework.http.HttpStatus; -import org.springframework.http.RequestEntity; -import org.springframework.http.ResponseEntity; -import org.springframework.samples.petclinic.vet.VetRepository; -import org.springframework.web.client.RestTemplate; - -@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) -public class PetClinicIntegrationTests { - - @LocalServerPort - int port; - - @Autowired - private VetRepository vets; - - @Autowired - private RestTemplateBuilder builder; - - @Test - void testFindAll() { - vets.findAll(); - vets.findAll(); // served from cache - } - - @Test - void testOwnerDetails() { - RestTemplate template = builder.rootUri("http://localhost:" + port).build(); - ResponseEntity result = template.exchange(RequestEntity.get("/owners/1").build(), String.class); - assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK); - } - - public static void main(String[] args) { - SpringApplication.run(PetClinicApplication.class, args); - } - -} diff --git a/src/test/java/org/springframework/samples/petclinic/PostgresIntegrationTests.java b/src/test/java/org/springframework/samples/petclinic/PostgresIntegrationTests.java deleted file mode 100644 index 0b9e4f93a..000000000 --- a/src/test/java/org/springframework/samples/petclinic/PostgresIntegrationTests.java +++ /dev/null @@ -1,150 +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; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assumptions.assumeTrue; - -import java.util.Arrays; -import java.util.LinkedList; -import java.util.List; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.condition.DisabledInNativeImage; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.context.event.ApplicationPreparedEvent; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.boot.test.web.server.LocalServerPort; -import org.springframework.boot.web.client.RestTemplateBuilder; -import org.springframework.context.ApplicationListener; -import org.springframework.core.env.ConfigurableEnvironment; -import org.springframework.core.env.EnumerablePropertySource; -import org.springframework.core.env.PropertySource; -import org.springframework.http.HttpStatus; -import org.springframework.http.RequestEntity; -import org.springframework.http.ResponseEntity; -import org.springframework.samples.petclinic.vet.VetRepository; -import org.springframework.test.context.ActiveProfiles; -import org.springframework.web.client.RestTemplate; -import org.testcontainers.DockerClientFactory; - -@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, properties = { "spring.docker.compose.skip.in-tests=false", // - "spring.docker.compose.start.arguments=--force-recreate,--renew-anon-volumes,postgres" }) -@ActiveProfiles("postgres") -@DisabledInNativeImage -public class PostgresIntegrationTests { - - @LocalServerPort - int port; - - @Autowired - private VetRepository vets; - - @Autowired - private RestTemplateBuilder builder; - - @BeforeAll - static void available() { - assumeTrue(DockerClientFactory.instance().isDockerAvailable(), "Docker not available"); - } - - public static void main(String[] args) { - new SpringApplicationBuilder(PetClinicApplication.class) // - .profiles("postgres") // - .properties( // - "spring.docker.compose.start.arguments=postgres" // - ) // - .listeners(new PropertiesLogger()) // - .run(args); - } - - @Test - void testFindAll() throws Exception { - vets.findAll(); - vets.findAll(); // served from cache - } - - @Test - void testOwnerDetails() { - RestTemplate template = builder.rootUri("http://localhost:" + port).build(); - ResponseEntity result = template.exchange(RequestEntity.get("/owners/1").build(), String.class); - assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK); - } - - static class PropertiesLogger implements ApplicationListener { - - private static final Log log = LogFactory.getLog(PropertiesLogger.class); - - private ConfigurableEnvironment environment; - - private boolean isFirstRun = true; - - @Override - public void onApplicationEvent(ApplicationPreparedEvent event) { - if (isFirstRun) { - environment = event.getApplicationContext().getEnvironment(); - printProperties(); - } - isFirstRun = false; - } - - public void printProperties() { - for (EnumerablePropertySource source : findPropertiesPropertySources()) { - log.info("PropertySource: " + source.getName()); - String[] names = source.getPropertyNames(); - Arrays.sort(names); - for (String name : names) { - String resolved = environment.getProperty(name); - - assertNotNull(resolved, "resolved environment property: " + name + " is null."); - - Object sourceProperty = source.getProperty(name); - - assertNotNull(sourceProperty, "source property was expecting an object but is null."); - - assertNotNull(sourceProperty.toString(), "source property toString() returned null."); - - String value = sourceProperty.toString(); - if (resolved.equals(value)) { - log.info(name + "=" + resolved); - } - else { - log.info(name + "=" + value + " OVERRIDDEN to " + resolved); - } - } - } - } - - private List> findPropertiesPropertySources() { - List> sources = new LinkedList<>(); - for (PropertySource source : environment.getPropertySources()) { - if (source instanceof EnumerablePropertySource enumerable) { - sources.add(enumerable); - } - } - return sources; - } - - } - -} diff --git a/src/test/java/org/springframework/samples/petclinic/model/ValidatorTests.java b/src/test/java/org/springframework/samples/petclinic/model/ValidatorTests.java deleted file mode 100644 index c75328522..000000000 --- a/src/test/java/org/springframework/samples/petclinic/model/ValidatorTests.java +++ /dev/null @@ -1,60 +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.model; - -import static org.assertj.core.api.Assertions.assertThat; - -import java.util.Locale; -import java.util.Set; - -import org.junit.jupiter.api.Test; -import org.springframework.context.i18n.LocaleContextHolder; -import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; - -import jakarta.validation.ConstraintViolation; -import jakarta.validation.Validator; - -/** - * @author Michael Isvy Simple test to make sure that Bean Validation is working (useful - * when upgrading to a new version of Hibernate Validator/ Bean Validation) - */ -class ValidatorTests { - - private Validator createValidator() { - LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean(); - localValidatorFactoryBean.afterPropertiesSet(); - return localValidatorFactoryBean; - } - - @Test - void shouldNotValidateWhenFirstNameEmpty() { - - LocaleContextHolder.setLocale(Locale.ENGLISH); - Person person = new Person(); - person.setFirstName(""); - person.setLastName("smith"); - - Validator validator = createValidator(); - Set> constraintViolations = validator.validate(person); - - assertThat(constraintViolations).hasSize(1); - ConstraintViolation violation = constraintViolations.iterator().next(); - assertThat(violation.getPropertyPath()).hasToString("firstName"); - assertThat(violation.getMessage()).isEqualTo("must not be blank"); - } - -} 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 426ca5c24..000000000 --- a/src/test/java/org/springframework/samples/petclinic/owner/OwnerControllerTests.java +++ /dev/null @@ -1,253 +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.data.domain.Page; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.Pageable; -import org.springframework.test.context.aot.DisabledInAotMode; -import org.springframework.test.context.bean.override.mockito.MockitoBean; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; - -import java.time.LocalDate; -import java.util.Optional; - -import static org.hamcrest.Matchers.empty; -import static org.hamcrest.Matchers.greaterThan; -import static org.hamcrest.Matchers.hasItem; -import static org.hamcrest.Matchers.hasProperty; -import static org.hamcrest.Matchers.hasSize; -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.mockito.Mockito.when; -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.*; - -/** - * Test class for {@link OwnerController} - * - * @author Colin But - * @author Wick Dynex - */ -@WebMvcTest(OwnerController.class) -@DisabledInNativeImage -@DisabledInAotMode -class OwnerControllerTests { - - private static final int TEST_OWNER_ID = 1; - - @Autowired - private MockMvc mockMvc; - - @MockitoBean - 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.findByLastNameStartingWith(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(Optional.of(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", "1316761638")) - .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())); - when(this.owners.findByLastNameStartingWith(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())); - when(this.owners.findByLastNameStartingWith(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()); - when(this.owners.findByLastNameStartingWith(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", "1616291589")) - .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", hasItem(hasProperty("visits", hasSize(greaterThan(0))))))) - .andExpect(view().name("owners/ownerDetails")); - } - - @Test - public void testProcessUpdateOwnerFormWithIdMismatch() throws Exception { - int pathOwnerId = 1; - - Owner owner = new Owner(); - owner.setId(2); - owner.setFirstName("John"); - owner.setLastName("Doe"); - owner.setAddress("Center Street"); - owner.setCity("New York"); - owner.setTelephone("0123456789"); - - when(owners.findById(pathOwnerId)).thenReturn(Optional.of(owner)); - - mockMvc.perform(MockMvcRequestBuilders.post("/owners/{ownerId}/edit", pathOwnerId).flashAttr("owner", owner)) - .andExpect(status().is3xxRedirection()) - .andExpect(redirectedUrl("/owners/" + pathOwnerId + "/edit")) - .andExpect(flash().attributeExists("error")); - } - -} 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 100644 index 9a6134cbb..000000000 --- a/src/test/java/org/springframework/samples/petclinic/owner/PetControllerTests.java +++ /dev/null @@ -1,208 +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.Nested; -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.context.annotation.ComponentScan; -import org.springframework.context.annotation.FilterType; -import org.springframework.test.context.aot.DisabledInAotMode; -import org.springframework.test.context.bean.override.mockito.MockitoBean; -import org.springframework.test.web.servlet.MockMvc; - -import java.time.LocalDate; -import java.util.Optional; - -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 - * @author Wick Dynex - */ -@WebMvcTest(value = PetController.class, - includeFilters = @ComponentScan.Filter(value = PetTypeFormatter.class, type = FilterType.ASSIGNABLE_TYPE)) -@DisabledInNativeImage -@DisabledInAotMode -class PetControllerTests { - - private static final int TEST_OWNER_ID = 1; - - private static final int TEST_PET_ID = 1; - - @Autowired - private MockMvc mockMvc; - - @MockitoBean - 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(); - Pet dog = new Pet(); - owner.addPet(pet); - owner.addPet(dog); - pet.setId(TEST_PET_ID); - dog.setId(TEST_PET_ID + 1); - pet.setName("petty"); - dog.setName("doggy"); - given(this.owners.findById(TEST_OWNER_ID)).willReturn(Optional.of(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}")); - } - - @Nested - class ProcessCreationFormHasErrors { - - @Test - void testProcessCreationFormWithBlankName() throws Exception { - mockMvc - .perform(post("/owners/{ownerId}/pets/new", TEST_OWNER_ID).param("name", "\t \n") - .param("birthDate", "2015-02-12")) - .andExpect(model().attributeHasNoErrors("owner")) - .andExpect(model().attributeHasErrors("pet")) - .andExpect(model().attributeHasFieldErrors("pet", "name")) - .andExpect(model().attributeHasFieldErrorCode("pet", "name", "required")) - .andExpect(status().isOk()) - .andExpect(view().name("pets/createOrUpdatePetForm")); - } - - @Test - void testProcessCreationFormWithDuplicateName() throws Exception { - mockMvc - .perform(post("/owners/{ownerId}/pets/new", TEST_OWNER_ID).param("name", "petty") - .param("birthDate", "2015-02-12")) - .andExpect(model().attributeHasNoErrors("owner")) - .andExpect(model().attributeHasErrors("pet")) - .andExpect(model().attributeHasFieldErrors("pet", "name")) - .andExpect(model().attributeHasFieldErrorCode("pet", "name", "duplicate")) - .andExpect(status().isOk()) - .andExpect(view().name("pets/createOrUpdatePetForm")); - } - - @Test - void testProcessCreationFormWithMissingPetType() 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 testProcessCreationFormWithInvalidBirthDate() throws Exception { - LocalDate currentDate = LocalDate.now(); - String futureBirthDate = currentDate.plusMonths(1).toString(); - - mockMvc - .perform(post("/owners/{ownerId}/pets/new", TEST_OWNER_ID).param("name", "Betty") - .param("birthDate", futureBirthDate)) - .andExpect(model().attributeHasNoErrors("owner")) - .andExpect(model().attributeHasErrors("pet")) - .andExpect(model().attributeHasFieldErrors("pet", "birthDate")) - .andExpect(model().attributeHasFieldErrorCode("pet", "birthDate", "typeMismatch.birthDate")) - .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}")); - } - - @Nested - class ProcessUpdateFormHasErrors { - - @Test - void testProcessUpdateFormWithInvalidBirthDate() throws Exception { - mockMvc - .perform(post("/owners/{ownerId}/pets/{petId}/edit", TEST_OWNER_ID, TEST_PET_ID).param("name", " ") - .param("birthDate", "2015/02/12")) - .andExpect(model().attributeHasNoErrors("owner")) - .andExpect(model().attributeHasErrors("pet")) - .andExpect(model().attributeHasFieldErrors("pet", "birthDate")) - .andExpect(model().attributeHasFieldErrorCode("pet", "birthDate", "typeMismatch")) - .andExpect(view().name("pets/createOrUpdatePetForm")); - } - - @Test - void testProcessUpdateFormWithBlankName() throws Exception { - mockMvc - .perform(post("/owners/{ownerId}/pets/{petId}/edit", TEST_OWNER_ID, TEST_PET_ID).param("name", " ") - .param("birthDate", "2015-02-12")) - .andExpect(model().attributeHasNoErrors("owner")) - .andExpect(model().attributeHasErrors("pet")) - .andExpect(model().attributeHasFieldErrors("pet", "name")) - .andExpect(model().attributeHasFieldErrorCode("pet", "name", "required")) - .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 0295b4788..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() { - 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/PetValidatorTests.java b/src/test/java/org/springframework/samples/petclinic/owner/PetValidatorTests.java deleted file mode 100644 index 1a153bcbc..000000000 --- a/src/test/java/org/springframework/samples/petclinic/owner/PetValidatorTests.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2012-2024 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.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.condition.DisabledInNativeImage; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.validation.Errors; -import org.springframework.validation.MapBindingResult; - -import java.time.LocalDate; -import java.util.HashMap; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; - -/** - * Test class for {@link PetValidator} - * - * @author Wick Dynex - */ -@ExtendWith(MockitoExtension.class) -@DisabledInNativeImage -public class PetValidatorTests { - - private PetValidator petValidator; - - private Pet pet; - - private PetType petType; - - private Errors errors; - - private static final String petName = "Buddy"; - - private static final String petTypeName = "Dog"; - - private static final LocalDate petBirthDate = LocalDate.of(1990, 1, 1); - - @BeforeEach - void setUp() { - petValidator = new PetValidator(); - pet = new Pet(); - petType = new PetType(); - errors = new MapBindingResult(new HashMap<>(), "pet"); - } - - @Test - void testValidate() { - petType.setName(petTypeName); - pet.setName(petName); - pet.setType(petType); - pet.setBirthDate(petBirthDate); - - petValidator.validate(pet, errors); - - assertFalse(errors.hasErrors()); - } - - @Nested - class ValidateHasErrors { - - @Test - void testValidateWithInvalidPetName() { - petType.setName(petTypeName); - pet.setName(""); - pet.setType(petType); - pet.setBirthDate(petBirthDate); - - petValidator.validate(pet, errors); - - assertTrue(errors.hasFieldErrors("name")); - } - - @Test - void testValidateWithInvalidPetType() { - pet.setName(petName); - pet.setType(null); - pet.setBirthDate(petBirthDate); - - petValidator.validate(pet, errors); - - assertTrue(errors.hasFieldErrors("type")); - } - - @Test - void testValidateWithInvalidBirthDate() { - petType.setName(petTypeName); - pet.setName(petName); - pet.setType(petType); - pet.setBirthDate(null); - - petValidator.validate(pet, errors); - - assertTrue(errors.hasFieldErrors("birthDate")); - } - - } - -} 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 e42e75034..000000000 --- a/src/test/java/org/springframework/samples/petclinic/owner/VisitControllerTests.java +++ /dev/null @@ -1,94 +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.test.context.aot.DisabledInAotMode; -import org.springframework.test.context.bean.override.mockito.MockitoBean; -import org.springframework.test.web.servlet.MockMvc; - -import java.util.Optional; - -/** - * Test class for {@link VisitController} - * - * @author Colin But - * @author Wick Dynex - */ -@WebMvcTest(VisitController.class) -@DisabledInNativeImage -@DisabledInAotMode -class VisitControllerTests { - - private static final int TEST_OWNER_ID = 1; - - private static final int TEST_PET_ID = 1; - - @Autowired - private MockMvc mockMvc; - - @MockitoBean - 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(Optional.of(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")); - } - -} diff --git a/src/test/java/org/springframework/samples/petclinic/service/ClinicServiceTests.java b/src/test/java/org/springframework/samples/petclinic/service/ClinicServiceTests.java deleted file mode 100644 index 17360278f..000000000 --- a/src/test/java/org/springframework/samples/petclinic/service/ClinicServiceTests.java +++ /dev/null @@ -1,247 +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.service; - -import static org.assertj.core.api.Assertions.assertThat; - -import java.time.LocalDate; -import java.util.Collection; -import java.util.Optional; - -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; -import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase.Replace; -import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.samples.petclinic.owner.Owner; -import org.springframework.samples.petclinic.owner.OwnerRepository; -import org.springframework.samples.petclinic.owner.Pet; -import org.springframework.samples.petclinic.owner.PetType; -import org.springframework.samples.petclinic.owner.Visit; -import org.springframework.samples.petclinic.vet.Vet; -import org.springframework.samples.petclinic.vet.VetRepository; -import org.springframework.transaction.annotation.Transactional; - -/** - * 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 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 - * @author Dave Syer - */ -@DataJpaTest -// Ensure that if the mysql profile is active we connect to the real database: -@AutoConfigureTestDatabase(replace = Replace.NONE) -// @TestPropertySource("/application-postgres.properties") -class ClinicServiceTests { - - @Autowired - protected OwnerRepository owners; - - @Autowired - protected VetRepository vets; - - Pageable pageable; - - @Test - void shouldFindOwnersByLastName() { - Page owners = this.owners.findByLastNameStartingWith("Davis", pageable); - assertThat(owners).hasSize(2); - - owners = this.owners.findByLastNameStartingWith("Daviss", pageable); - assertThat(owners).isEmpty(); - } - - @Test - void shouldFindSingleOwnerWithPet() { - Optional optionalOwner = this.owners.findById(1); - assertThat(optionalOwner).isPresent(); - Owner owner = optionalOwner.get(); - assertThat(owner.getLastName()).startsWith("Franklin"); - assertThat(owner.getPets()).hasSize(1); - assertThat(owner.getPets().get(0).getType()).isNotNull(); - assertThat(owner.getPets().get(0).getType().getName()).isEqualTo("cat"); - } - - @Test - @Transactional - void shouldInsertOwner() { - Page owners = this.owners.findByLastNameStartingWith("Schultz", pageable); - int found = (int) owners.getTotalElements(); - - Owner owner = new Owner(); - owner.setFirstName("Sam"); - owner.setLastName("Schultz"); - owner.setAddress("4, Evans Street"); - owner.setCity("Wollongong"); - owner.setTelephone("4444444444"); - this.owners.save(owner); - assertThat(owner.getId()).isNotZero(); - - owners = this.owners.findByLastNameStartingWith("Schultz", pageable); - assertThat(owners.getTotalElements()).isEqualTo(found + 1); - } - - @Test - @Transactional - void shouldUpdateOwner() { - Optional optionalOwner = this.owners.findById(1); - assertThat(optionalOwner).isPresent(); - Owner owner = optionalOwner.get(); - String oldLastName = owner.getLastName(); - String newLastName = oldLastName + "X"; - - owner.setLastName(newLastName); - this.owners.save(owner); - - // retrieving new name from database - optionalOwner = this.owners.findById(1); - assertThat(optionalOwner).isPresent(); - owner = optionalOwner.get(); - assertThat(owner.getLastName()).isEqualTo(newLastName); - } - - @Test - void shouldFindAllPetTypes() { - Collection petTypes = this.owners.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 - void shouldInsertPetIntoDatabaseAndGenerateId() { - Optional optionalOwner = this.owners.findById(6); - assertThat(optionalOwner).isPresent(); - Owner owner6 = optionalOwner.get(); - - int found = owner6.getPets().size(); - - Pet pet = new Pet(); - pet.setName("bowser"); - Collection types = this.owners.findPetTypes(); - pet.setType(EntityUtils.getById(types, PetType.class, 2)); - pet.setBirthDate(LocalDate.now()); - owner6.addPet(pet); - assertThat(owner6.getPets()).hasSize(found + 1); - - this.owners.save(owner6); - - optionalOwner = this.owners.findById(6); - assertThat(optionalOwner).isPresent(); - owner6 = optionalOwner.get(); - assertThat(owner6.getPets()).hasSize(found + 1); - // checks that id has been generated - pet = owner6.getPet("bowser"); - assertThat(pet.getId()).isNotNull(); - } - - @Test - @Transactional - void shouldUpdatePetName() { - Optional optionalOwner = this.owners.findById(6); - assertThat(optionalOwner).isPresent(); - Owner owner6 = optionalOwner.get(); - - Pet pet7 = owner6.getPet(7); - String oldName = pet7.getName(); - - String newName = oldName + "X"; - pet7.setName(newName); - this.owners.save(owner6); - - optionalOwner = this.owners.findById(6); - assertThat(optionalOwner).isPresent(); - owner6 = optionalOwner.get(); - pet7 = owner6.getPet(7); - assertThat(pet7.getName()).isEqualTo(newName); - } - - @Test - void shouldFindVets() { - Collection vets = this.vets.findAll(); - - 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 - void shouldAddNewVisitForPet() { - Optional optionalOwner = this.owners.findById(6); - assertThat(optionalOwner).isPresent(); - Owner owner6 = optionalOwner.get(); - - Pet pet7 = owner6.getPet(7); - int found = pet7.getVisits().size(); - Visit visit = new Visit(); - visit.setDescription("test"); - - owner6.addVisit(pet7.getId(), visit); - this.owners.save(owner6); - - assertThat(pet7.getVisits()) // - .hasSize(found + 1) // - .allMatch(value -> value.getId() != null); - } - - @Test - void shouldFindVisitsByPetId() { - Optional optionalOwner = this.owners.findById(6); - assertThat(optionalOwner).isPresent(); - Owner owner6 = optionalOwner.get(); - - Pet pet7 = owner6.getPet(7); - Collection visits = pet7.getVisits(); - - assertThat(visits) // - .hasSize(2) // - .element(0) - .extracting(Visit::getDate) - .isNotNull(); - } - -} diff --git a/src/test/java/org/springframework/samples/petclinic/service/EntityUtils.java b/src/test/java/org/springframework/samples/petclinic/service/EntityUtils.java deleted file mode 100644 index 7b7a5e64a..000000000 --- a/src/test/java/org/springframework/samples/petclinic/service/EntityUtils.java +++ /dev/null @@ -1,53 +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.service; - -import org.springframework.orm.ObjectRetrievalFailureException; -import org.springframework.samples.petclinic.model.BaseEntity; - -import java.util.Collection; - -/** - * Utility methods for handling entities. Separate from the BaseEntity class mainly - * because of dependency on the ORM-associated ObjectRetrievalFailureException. - * - * @author Juergen Hoeller - * @author Sam Brannen - * @see org.springframework.samples.petclinic.model.BaseEntity - * @since 29.10.2003 - */ -public abstract class EntityUtils { - - /** - * Look up the entity of the given class with the given id in the given collection. - * @param entities the collection to search - * @param entityClass the entity class to look up - * @param entityId the entity id to look up - * @return the found entity - * @throws ObjectRetrievalFailureException if the entity was not found - */ - public static T getById(Collection entities, Class entityClass, int entityId) - throws ObjectRetrievalFailureException { - for (T entity : entities) { - if (entity.getId() == entityId && entityClass.isInstance(entity)) { - return entity; - } - } - throw new ObjectRetrievalFailureException(entityClass, entityId); - } - -} diff --git a/src/test/java/org/springframework/samples/petclinic/system/CrashControllerIntegrationTests.java b/src/test/java/org/springframework/samples/petclinic/system/CrashControllerIntegrationTests.java deleted file mode 100644 index 3cdca47bf..000000000 --- a/src/test/java/org/springframework/samples/petclinic/system/CrashControllerIntegrationTests.java +++ /dev/null @@ -1,99 +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.system; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; - -import java.util.List; -import java.util.Map; - -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; -import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.core.ParameterizedTypeReference; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.RequestEntity; -import org.springframework.http.ResponseEntity; - -/** - * Integration Test for {@link CrashController}. - * - * @author Alex Lutz - */ -// NOT Waiting https://github.com/spring-projects/spring-boot/issues/5574 -@SpringBootTest(webEnvironment = RANDOM_PORT, - properties = { "server.error.include-message=ALWAYS", "management.endpoints.enabled-by-default=false" }) -class CrashControllerIntegrationTests { - - @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, - DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class }) - static class TestConfiguration { - - } - - @Value(value = "${local.server.port}") - private int port; - - @Autowired - private TestRestTemplate rest; - - @Test - void testTriggerExceptionJson() { - ResponseEntity> resp = rest.exchange( - RequestEntity.get("http://localhost:" + port + "/oups").build(), - new ParameterizedTypeReference>() { - }); - assertThat(resp).isNotNull(); - assertThat(resp.getStatusCode()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR); - assertThat(resp.getBody()).containsKey("timestamp"); - assertThat(resp.getBody()).containsKey("status"); - assertThat(resp.getBody()).containsKey("error"); - assertThat(resp.getBody()).containsEntry("message", - "Expected: controller used to showcase what happens when an exception is thrown"); - assertThat(resp.getBody()).containsEntry("path", "/oups"); - } - - @Test - void testTriggerExceptionHtml() { - HttpHeaders headers = new HttpHeaders(); - headers.setAccept(List.of(MediaType.TEXT_HTML)); - ResponseEntity resp = rest.exchange("http://localhost:" + port + "/oups", HttpMethod.GET, - new HttpEntity<>(headers), String.class); - assertThat(resp).isNotNull(); - assertThat(resp.getStatusCode()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR); - assertThat(resp.getBody()).isNotNull(); - // html: - assertThat(resp.getBody()).containsSubsequence("", "

", "Something happened...", "

", "

", - "Expected:", "controller", "used", "to", "showcase", "what", "happens", "when", "an", "exception", "is", - "thrown", "

", ""); - // Not the whitelabel error page: - assertThat(resp.getBody()).doesNotContain("Whitelabel Error Page", - "This application has no explicit mapping for"); - } - -} diff --git a/src/test/java/org/springframework/samples/petclinic/system/CrashControllerTests.java b/src/test/java/org/springframework/samples/petclinic/system/CrashControllerTests.java deleted file mode 100644 index cc2ad6746..000000000 --- a/src/test/java/org/springframework/samples/petclinic/system/CrashControllerTests.java +++ /dev/null @@ -1,41 +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.system; - -import org.junit.jupiter.api.Test; - -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; - -/** - * Test class for {@link CrashController} - * - * @author Colin But - * @author Alex Lutz - */ -// Waiting https://github.com/spring-projects/spring-boot/issues/5574 ..good -// luck ((plain(st) UNIT test)! :) -class CrashControllerTests { - - final CrashController testee = new CrashController(); - - @Test - void testTriggerException() { - assertThatExceptionOfType(RuntimeException.class).isThrownBy(() -> testee.triggerException()) - .withMessageContaining("Expected: controller used to showcase what happens when an exception is thrown"); - } - -} diff --git a/src/test/java/org/springframework/samples/petclinic/vet/VetControllerTests.java b/src/test/java/org/springframework/samples/petclinic/vet/VetControllerTests.java deleted file mode 100644 index 5fffeea47..000000000 --- a/src/test/java/org/springframework/samples/petclinic/vet/VetControllerTests.java +++ /dev/null @@ -1,100 +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.vet; - -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.data.domain.PageImpl; -import org.springframework.data.domain.Pageable; -import org.springframework.http.MediaType; -import org.springframework.test.context.aot.DisabledInAotMode; -import org.springframework.test.context.bean.override.mockito.MockitoBean; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.BDDMockito.given; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -/** - * Test class for the {@link VetController} - */ - -@WebMvcTest(VetController.class) -@DisabledInNativeImage -@DisabledInAotMode -class VetControllerTests { - - @Autowired - private MockMvc mockMvc; - - @MockitoBean - private VetRepository vets; - - private Vet james() { - Vet james = new Vet(); - james.setFirstName("James"); - james.setLastName("Carter"); - james.setId(1); - return james; - } - - private Vet helen() { - Vet helen = new Vet(); - helen.setFirstName("Helen"); - helen.setLastName("Leary"); - helen.setId(2); - Specialty radiology = new Specialty(); - radiology.setId(1); - radiology.setName("radiology"); - helen.addSpecialty(radiology); - return helen; - } - - @BeforeEach - void setup() { - given(this.vets.findAll()).willReturn(Lists.newArrayList(james(), helen())); - given(this.vets.findAll(any(Pageable.class))) - .willReturn(new PageImpl(Lists.newArrayList(james(), helen()))); - - } - - @Test - void testShowVetListHtml() throws Exception { - - mockMvc.perform(MockMvcRequestBuilders.get("/vets.html?page=1")) - .andExpect(status().isOk()) - .andExpect(model().attributeExists("listVets")) - .andExpect(view().name("vets/vetList")); - - } - - @Test - void testShowResourcesVetList() throws Exception { - ResultActions actions = mockMvc.perform(get("/vets").accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); - actions.andExpect(content().contentType(MediaType.APPLICATION_JSON)) - .andExpect(jsonPath("$.vetList[0].id").value(1)); - } - -} diff --git a/src/test/java/org/springframework/samples/petclinic/vet/VetTests.java b/src/test/java/org/springframework/samples/petclinic/vet/VetTests.java deleted file mode 100644 index b29c6d100..000000000 --- a/src/test/java/org/springframework/samples/petclinic/vet/VetTests.java +++ /dev/null @@ -1,41 +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.vet; - -import org.junit.jupiter.api.Test; -import org.springframework.util.SerializationUtils; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * @author Dave Syer - */ -class VetTests { - - @Test - void testSerialization() { - Vet vet = new Vet(); - vet.setFirstName("Zaphod"); - vet.setLastName("Beeblebrox"); - vet.setId(123); - @SuppressWarnings("deprecation") - Vet other = (Vet) SerializationUtils.deserialize(SerializationUtils.serialize(vet)); - assertThat(other.getFirstName()).isEqualTo(vet.getFirstName()); - assertThat(other.getLastName()).isEqualTo(vet.getLastName()); - assertThat(other.getId()).isEqualTo(vet.getId()); - } - -}