From a9670de9591454272200c2659a6eb9aff8d6d689 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Fri, 8 Jul 2011 10:23:45 +0200 Subject: [PATCH] DATADOC-134 - Added test case to show indexes with unique flag work. --- ...tractPersonRepositoryIntegrationTests.java | 12 +++++++++++ .../document/mongodb/repository/Person.java | 18 +++++++++++++++++ ...rsonRepositoryIntegrationTests-context.xml | 11 +++++----- ...MongoNamespaceIntegrationTests-context.xml | 20 ++++++++++--------- 4 files changed, 47 insertions(+), 14 deletions(-) diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java index 0d67b908a..2f3e1e203 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java @@ -12,6 +12,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DuplicateKeyException; import org.springframework.data.document.mongodb.geo.Box; import org.springframework.data.document.mongodb.geo.Circle; import org.springframework.data.document.mongodb.geo.Point; @@ -267,4 +268,15 @@ public abstract class AbstractPersonRepositoryIntegrationTests { public void existsWorksCorrectly() { assertThat(repository.exists(dave.getId()), is(true)); } + + @Test(expected = DuplicateKeyException.class) + public void rejectsDuplicateEmailAddressOnSave() { + + assertThat(dave.getEmail(), is("dave@dmband.com")); + + Person daveSyer = new Person("Dave", "Syer"); + assertThat(daveSyer.getEmail(), is("dave@dmband.com")); + + repository.save(daveSyer); + } } \ No newline at end of file diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/Person.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/Person.java index e3c117886..ddc898955 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/Person.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/Person.java @@ -19,6 +19,7 @@ import java.util.Set; import org.springframework.data.document.mongodb.geo.Point; import org.springframework.data.document.mongodb.index.GeoSpatialIndexed; +import org.springframework.data.document.mongodb.index.Indexed; import org.springframework.data.document.mongodb.mapping.Document; /** @@ -35,6 +36,8 @@ public class Person extends Contact { private String firstname; private String lastname; + @Indexed(unique = true, dropDups = true) + private String email; private Integer age; private Sex sex; @@ -66,6 +69,7 @@ public class Person extends Contact { this.lastname = lastname; this.age = age; this.sex = sex; + this.email = (firstname == null ? "noone" : firstname.toLowerCase()) + "@dmband.com"; } /** @@ -102,6 +106,20 @@ public class Person extends Contact { this.lastname = lastname; } + /** + * @return the email + */ + public String getEmail() { + return email; + } + + /** + * @param email the email to set + */ + public void setEmail(String email) { + this.email = email; + } + /** * @return the age */ diff --git a/spring-data-mongodb/src/test/resources/org/springframework/data/document/mongodb/repository/PersonRepositoryIntegrationTests-context.xml b/spring-data-mongodb/src/test/resources/org/springframework/data/document/mongodb/repository/PersonRepositoryIntegrationTests-context.xml index db97f8669..86c5e03c3 100644 --- a/spring-data-mongodb/src/test/resources/org/springframework/data/document/mongodb/repository/PersonRepositoryIntegrationTests-context.xml +++ b/spring-data-mongodb/src/test/resources/org/springframework/data/document/mongodb/repository/PersonRepositoryIntegrationTests-context.xml @@ -7,12 +7,13 @@ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"> - - - + + - - + + + + diff --git a/spring-data-mongodb/src/test/resources/org/springframework/data/document/mongodb/repository/config/MongoNamespaceIntegrationTests-context.xml b/spring-data-mongodb/src/test/resources/org/springframework/data/document/mongodb/repository/config/MongoNamespaceIntegrationTests-context.xml index 5fdb420ec..284818bbc 100644 --- a/spring-data-mongodb/src/test/resources/org/springframework/data/document/mongodb/repository/config/MongoNamespaceIntegrationTests-context.xml +++ b/spring-data-mongodb/src/test/resources/org/springframework/data/document/mongodb/repository/config/MongoNamespaceIntegrationTests-context.xml @@ -1,19 +1,21 @@ + xmlns:mongo="http://www.springframework.org/schema/data/mongo" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:repository="http://www.springframework.org/schema/data/repository" + xmlns:util="http://www.springframework.org/schema/util" + xsi:schemaLocation="http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd + http://www.springframework.org/schema/data/repository http://www.springframework.org/schema/data/repository/spring-repository-1.0.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd + http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"> - - - + + +