diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/domain/queryresult/Gender.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/domain/Gender.java similarity index 81% rename from spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/domain/queryresult/Gender.java rename to spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/domain/Gender.java index 28d0375c9..2ac36bfee 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/domain/queryresult/Gender.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/domain/Gender.java @@ -13,10 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.data.neo4j.examples.movies.domain.queryresult; +package org.springframework.data.neo4j.examples.movies.domain; +/** + * @author Adam George + * @author Michael J. Simons + */ public enum Gender { - FEMALE, MALE; - + UNDISCLOSED, FEMALE, MALE; } diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/domain/User.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/domain/User.java index 5382fe525..30918dba7 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/domain/User.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/domain/User.java @@ -25,11 +25,13 @@ import org.neo4j.ogm.annotation.Relationship; * @author Michal Bachman * @author Luanne Misquitta * @author Gerrit Meier + * @author Michael J. Simons */ public class User extends Person { private String middleName; private String surname; + private Gender gender; private Collection interested = new HashSet<>(); @@ -98,4 +100,12 @@ public class User extends Person { public void setEmailAddresses(Set emailAddresses) { this.emailAddresses = emailAddresses; } + + public Gender getGender() { + return gender; + } + + public void setGender(Gender gender) { + this.gender = gender; + } } diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/domain/queryresult/RichUserQueryResult.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/domain/queryresult/RichUserQueryResult.java index f8c631023..76ee8c4dd 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/domain/queryresult/RichUserQueryResult.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/domain/queryresult/RichUserQueryResult.java @@ -22,6 +22,7 @@ import java.time.Year; import org.neo4j.ogm.annotation.Property; import org.neo4j.ogm.annotation.typeconversion.Convert; import org.springframework.data.neo4j.annotation.QueryResult; +import org.springframework.data.neo4j.examples.movies.domain.Gender; /** * A {@link QueryResult} that contains rich types. diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/UserRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/UserRepository.java index bf4f9e248..058d4017a 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/UserRepository.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/UserRepository.java @@ -26,7 +26,7 @@ import org.springframework.data.neo4j.annotation.Depth; import org.springframework.data.neo4j.annotation.Query; import org.springframework.data.neo4j.examples.movies.domain.User; import org.springframework.data.neo4j.examples.movies.domain.queryresult.EntityWrappingQueryResult; -import org.springframework.data.neo4j.examples.movies.domain.queryresult.Gender; +import org.springframework.data.neo4j.examples.movies.domain.Gender; import org.springframework.data.neo4j.examples.movies.domain.queryresult.RichUserQueryResult; import org.springframework.data.neo4j.examples.movies.domain.queryresult.UserQueryResult; import org.springframework.data.neo4j.examples.movies.domain.queryresult.UserQueryResultObject; diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/queries/QueryIntegrationTests.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/queries/QueryIntegrationTests.java index 94cbb8096..11bc489aa 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/queries/QueryIntegrationTests.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/queries/QueryIntegrationTests.java @@ -15,12 +15,16 @@ */ package org.springframework.data.neo4j.queries; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.data.Offset.offset; + import java.math.BigDecimal; import java.math.BigInteger; import java.time.Year; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -28,14 +32,16 @@ import java.util.Map; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.neo4j.graphdb.GraphDatabaseService; +import org.neo4j.graphdb.Transaction; import org.neo4j.harness.ServerControls; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.InvalidDataAccessApiUsageException; +import org.springframework.data.neo4j.examples.movies.domain.Gender; import org.springframework.data.neo4j.examples.movies.domain.Rating; import org.springframework.data.neo4j.examples.movies.domain.TempMovie; import org.springframework.data.neo4j.examples.movies.domain.User; import org.springframework.data.neo4j.examples.movies.domain.queryresult.EntityWrappingQueryResult; -import org.springframework.data.neo4j.examples.movies.domain.queryresult.Gender; import org.springframework.data.neo4j.examples.movies.domain.queryresult.RichUserQueryResult; import org.springframework.data.neo4j.examples.movies.domain.queryresult.UserQueryResult; import org.springframework.data.neo4j.examples.movies.domain.queryresult.UserQueryResultObject; @@ -44,12 +50,10 @@ import org.springframework.data.neo4j.examples.movies.repo.UserRepository; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.TransactionStatus; +import org.springframework.transaction.support.TransactionCallback; import org.springframework.transaction.support.TransactionCallbackWithoutResult; import org.springframework.transaction.support.TransactionTemplate; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.data.Offset.offset; - /** * @author Vince Bickers * @author Luanne Misquitta @@ -213,7 +217,8 @@ public class QueryIntegrationTests { transactionTemplate.execute(new TransactionCallbackWithoutResult() { @Override public void doInTransactionWithoutResult(TransactionStatus status) { - User user = userRepository.findUserByNameAndSurnameUsingSpElIndexAndPlaceholderWithOneParameter("Michal"); + User user = userRepository + .findUserByNameAndSurnameUsingSpElIndexAndPlaceholderWithOneParameter("Michal"); assertThat(user.getName()).isEqualTo("Michal"); } }); @@ -226,7 +231,8 @@ public class QueryIntegrationTests { transactionTemplate.execute(new TransactionCallbackWithoutResult() { @Override public void doInTransactionWithoutResult(TransactionStatus status) { - User user = userRepository.findUserByNameAndSurnameUsingSpElPropertyAndPlaceholderWithOneParameter("Michal"); + User user = userRepository + .findUserByNameAndSurnameUsingSpElPropertyAndPlaceholderWithOneParameter("Michal"); assertThat(user.getName()).isEqualTo("Michal"); } }); @@ -440,7 +446,7 @@ public class QueryIntegrationTests { assertThat(userQueryResult.getUserAccount()) .isEqualTo(BigInteger.valueOf(3456789)); assertThat(userQueryResult.getUserDeposits()) - .isEqualTo(new BigDecimal[] {BigDecimal.valueOf(12345.6), BigDecimal.valueOf(45678.9)}); + .isEqualTo(new BigDecimal[] { BigDecimal.valueOf(12345.6), BigDecimal.valueOf(45678.9) }); assertThat(userIterator.hasNext()).isFalse(); } }); @@ -519,7 +525,8 @@ public class QueryIntegrationTests { assertThat(userRepository.findTotalUsers()) .as("There should be some users in the database").isEqualTo(2); - Iterable expected = Arrays.asList(new UserQueryResult(null, 0), new UserQueryResult(null, 0)); + Iterable expected = Arrays + .asList(new UserQueryResult(null, 0), new UserQueryResult(null, 0)); Iterable queryResult = userRepository.retrieveAllUsersAndTheirAges(); assertThat(queryResult).as("The query result shouldn't be null") @@ -726,4 +733,40 @@ public class QueryIntegrationTests { } }); } + + @Test // DATAGRAPH-1310 + public void enumsShouldBeConvertedOnLoad() { + executeUpdate("CREATE (g:User {name:'ABC', gender: 'UNDISCLOSED'})"); + + transactionTemplate.execute(new TransactionCallbackWithoutResult() { + @Override + public void doInTransactionWithoutResult(TransactionStatus status) { + User user = userRepository.findUserByName("ABC"); + assertThat(user).isNotNull().extracting(User::getGender).isEqualTo(Gender.UNDISCLOSED); + } + }); + } + + @Test // DATAGRAPH-1310 + public void enumsShouldBeConvertedOnSave() { + + long newUserId = transactionTemplate.execute(new TransactionCallback() { + + @Override + public Long doInTransaction(TransactionStatus transactionStatus) { + User abc = new User("Miriam"); + abc.setGender(Gender.FEMALE); + return userRepository.save(abc).getId(); + } + }); + + GraphDatabaseService graph = neo4jTestServer.graph(); + try (Transaction transaction = graph.beginTx()) { + + final String gender = (String) graph.execute("MATCH (u) WHERE id(u) = $id RETURN u.gender AS gender", + Collections.singletonMap("id", newUserId)).next().get("gender"); + assertThat(gender).isEqualTo("FEMALE"); + transaction.success(); + } + } }