From 981ca0b5068b3b4fdb73af3304fa7c792ad2990e Mon Sep 17 00:00:00 2001 From: Krzysztof Woyke Date: Wed, 23 Dec 2020 11:05:24 +0100 Subject: [PATCH 1/2] JAVA-3496: Add integration tests for UserRepository --- .../data/jpa/query/UserApplication.java | 13 ++ .../src/main/resources/insert_users.sql | 8 + .../query/UserRepositoryIntegrationTest.java | 162 ++++++++++++++++++ 3 files changed, 183 insertions(+) create mode 100644 persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/spring/data/jpa/query/UserApplication.java create mode 100644 persistence-modules/spring-data-jpa-query-2/src/main/resources/insert_users.sql create mode 100644 persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/spring/data/jpa/query/UserRepositoryIntegrationTest.java diff --git a/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/spring/data/jpa/query/UserApplication.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/spring/data/jpa/query/UserApplication.java new file mode 100644 index 0000000000..0f7b19ec47 --- /dev/null +++ b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/spring/data/jpa/query/UserApplication.java @@ -0,0 +1,13 @@ +package com.baeldung.spring.data.jpa.query; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class UserApplication { + + public static void main(String[] args) { + SpringApplication.run(UserApplication.class, args); + } + +} diff --git a/persistence-modules/spring-data-jpa-query-2/src/main/resources/insert_users.sql b/persistence-modules/spring-data-jpa-query-2/src/main/resources/insert_users.sql new file mode 100644 index 0000000000..330b2e36b0 --- /dev/null +++ b/persistence-modules/spring-data-jpa-query-2/src/main/resources/insert_users.sql @@ -0,0 +1,8 @@ +insert into Users(id, name, creation_date, last_login_date, active, age, email, status) +values(1, 'John', TO_DATE('01/01/2018', 'DD/MM/YYYY'), TO_DATE('01/01/2020', 'DD/MM/YYYY'), 1, 23, 'john@email.com', 1); + +insert into Users(id, name, creation_date, last_login_date, active, age, email, status) +values(2, 'Bob', TO_DATE('02/02/2019', 'DD/MM/YYYY'), TO_DATE('02/02/2020', 'DD/MM/YYYY'), 1, 56, 'bob@email.com', 1); + +insert into Users(id, name, creation_date, last_login_date, active, age, email, status) +values(3, 'Cindy', TO_DATE('02/02/2019', 'DD/MM/YYYY'), TO_DATE('02/02/2020', 'DD/MM/YYYY'), 1, 18, 'cindy@email.com', 0); \ No newline at end of file diff --git a/persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/spring/data/jpa/query/UserRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/spring/data/jpa/query/UserRepositoryIntegrationTest.java new file mode 100644 index 0000000000..0ede418acd --- /dev/null +++ b/persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/spring/data/jpa/query/UserRepositoryIntegrationTest.java @@ -0,0 +1,162 @@ +package com.baeldung.spring.data.jpa.query; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.domain.JpaSort; +import org.springframework.data.mapping.PropertyReferenceException; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +@RunWith(SpringRunner.class) +@DataJpaTest(properties = "spring.datasource.data=classpath:insert_users.sql") +public class UserRepositoryIntegrationTest { + + @Autowired + private UserRepository userRepository; + + @Test + public void whenFindAllActiveUsersThenAllActiveFound() { + Collection allActiveUsers = userRepository.findAllActiveUsers(); + assertThat(allActiveUsers).hasSize(2); + } + + @Test + public void whenFindAllActiveUsersNativeThenAllActiveFound() { + Collection allActiveUsers = userRepository.findAllActiveUsersNative(); + assertThat(allActiveUsers).hasSize(2); + } + + @Test + public void whenFindAllSortedByNameThenAllSorted() { + List allUsersSortedByName = userRepository.findAll(Sort.by(Sort.Direction.ASC, "name")); + assertThat(allUsersSortedByName) + .extracting("name") + .containsSequence("Bob", "Cindy", "John"); + } + + @Test + public void whenFindAllSortedByNameLengthThenException() { + assertThatThrownBy(() -> userRepository.findAll(Sort.by("LENGTH(name)"))) + .isInstanceOf(PropertyReferenceException.class); + } + + @Test + public void whenFindAllUsersSortedByNameThenAllSorted() { + List allUsersSortedByName = userRepository.findAllUsers(Sort.by(Sort.Direction.ASC, "name")); + assertThat(allUsersSortedByName) + .extracting("name") + .containsSequence("Bob", "Cindy", "John"); + } + + @Test + public void whenFindAllUsersSortedByNameLengthThenAllSorted() { + List allUsersSortedByName = userRepository.findAllUsers(JpaSort.unsafe("LENGTH(name)")); + assertThat(allUsersSortedByName) + .extracting("name") + .containsSequence("Bob", "John", "Cindy"); + } + + @Test + public void whenFindAllUsersWithPaginationThenPaginated() { + Page page = userRepository.findAllUsersWithPagination(PageRequest.of(0, 1)); + assertThat(page.stream().map(User::getId)) + .hasSize(1) + .containsOnly(1); + } + + @Test + public void whenFindAllUsersWithPaginationNativeThenPaginated() { + Page page = userRepository.findAllUsersWithPaginationNative(PageRequest.of(1, 1)); + assertThat(page.stream().map(User::getId)) + .hasSize(1) + .containsOnly(2); + } + + @Test + public void whenFindUserByStatusThenFound() { + User user = userRepository.findUserByStatus(0); + assertThat(user.getStatus()).isZero(); + } + + @Test + public void whenFindUserByStatusAndNameThenFound() { + User user = userRepository.findUserByStatusAndName(1, "John"); + assertThat(user.getStatus()).isOne(); + assertThat(user.getName()).isEqualTo("John"); + } + + @Test + public void whenFindUserByStatusNativeThenFound() { + User user = userRepository.findUserByStatusNative(0); + assertThat(user.getStatus()).isZero(); + } + + @Test + public void whenFindUserByStatusAndNameNamedParamsThenFound() { + User user = userRepository.findUserByStatusAndNameNamedParams(1, "John"); + assertThat(user.getStatus()).isOne(); + assertThat(user.getName()).isEqualTo("John"); + } + + @Test + public void whenFindUserByUserStatusAndUserNameThenFound() { + User user = userRepository.findUserByUserStatusAndUserName(1, "John"); + assertThat(user.getStatus()).isOne(); + assertThat(user.getName()).isEqualTo("John"); + } + + @Test + public void whenFindUserByStatusAndNameNamedParamsNativeThenFound() { + User user = userRepository.findUserByStatusAndNameNamedParamsNative(1, "Bob"); + assertThat(user.getStatus()).isOne(); + assertThat(user.getName()).isEqualTo("Bob"); + } + + @Test + public void whenFindUserByNameListThenAllFound() { + List users = userRepository.findUserByNameList(Arrays.asList("Bob", "Cindy")); + assertThat(users) + .extracting("name") + .containsOnly("Bob", "Cindy"); + } + + @Test + public void whenUpdateUserSetStatusForNameThenUpdated() { + int updated = userRepository.updateUserSetStatusForName(0, "John"); + assertThat(updated).isOne(); + + User john = userRepository.findUserByStatusAndName(0, "John"); + assertThat(john).isNotNull(); + } + + @Test + public void whenUpdateUserSetStatusForNameNativeThenUpdated() { + int updated = userRepository.updateUserSetStatusForNameNative(0, "John"); + assertThat(updated).isOne(); + + User john = userRepository.findUserByStatusAndName(0, "John"); + assertThat(john).isNotNull(); + } + + @Test + public void whenInsertUserThenInserted() { + User beforeInsert = userRepository.findUserByStatusAndName(0, "Mandy"); + assertThat(beforeInsert).isNull(); + + userRepository.insertUser("Mandy", 20, "mandy@email.com", 0, true); + + User afterInsert = userRepository.findUserByStatusAndName(0, "Mandy"); + assertThat(afterInsert).isNotNull(); + } +} From 061cf1a1ed4d1e654c46dca6c02562e38ef3e5c8 Mon Sep 17 00:00:00 2001 From: Krzysiek Date: Tue, 29 Dec 2020 00:22:02 +0100 Subject: [PATCH 2/2] JAVA-3496: Use a single common QueryApplication --- .../{UserApplication.java => QueryApplication.java} | 4 ++-- .../spring/data/jpa/query/datetime/Application.java | 13 ------------- 2 files changed, 2 insertions(+), 15 deletions(-) rename persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/spring/data/jpa/query/{UserApplication.java => QueryApplication.java} (72%) delete mode 100644 persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/spring/data/jpa/query/datetime/Application.java diff --git a/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/spring/data/jpa/query/UserApplication.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/spring/data/jpa/query/QueryApplication.java similarity index 72% rename from persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/spring/data/jpa/query/UserApplication.java rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/spring/data/jpa/query/QueryApplication.java index 0f7b19ec47..48c29eda23 100644 --- a/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/spring/data/jpa/query/UserApplication.java +++ b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/spring/data/jpa/query/QueryApplication.java @@ -4,10 +4,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication -public class UserApplication { +public class QueryApplication { public static void main(String[] args) { - SpringApplication.run(UserApplication.class, args); + SpringApplication.run(QueryApplication.class, args); } } diff --git a/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/spring/data/jpa/query/datetime/Application.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/spring/data/jpa/query/datetime/Application.java deleted file mode 100644 index 81e5a2f790..0000000000 --- a/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/spring/data/jpa/query/datetime/Application.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.spring.data.jpa.query.datetime; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class Application { - - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } - -}