diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateValidationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateValidationTests.java index 98e951c798..bbee776639 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateValidationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateValidationTests.java @@ -35,8 +35,10 @@ import org.springframework.dao.DataIntegrityViolationException; import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration; import org.springframework.data.mongodb.core.CollectionOptions.ValidationOptions; +import org.springframework.data.mongodb.core.mapping.Encrypted; import org.springframework.data.mongodb.core.mapping.Field; import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.schema.MongoJsonSchema; import org.springframework.data.mongodb.test.util.Client; import org.springframework.data.mongodb.test.util.MongoClientExtension; import org.springframework.lang.Nullable; @@ -48,11 +50,13 @@ /** * Integration tests for {@link CollectionOptions#validation(ValidationOptions)} using - * {@link org.springframework.data.mongodb.core.validation.CriteriaValidator} and - * {@link org.springframework.data.mongodb.core.validation.DocumentValidator}. + * {@link org.springframework.data.mongodb.core.validation.CriteriaValidator}, + * {@link org.springframework.data.mongodb.core.validation.DocumentValidator} and + * {@link org.springframework.data.mongodb.core.validation.JsonSchemaValidator}. * * @author Andreas Zink * @author Christoph Strobl + * @author Julia Lee */ @ExtendWith({ MongoClientExtension.class, SpringExtension.class }) public class MongoTemplateValidationTests { @@ -188,6 +192,20 @@ public void mapsDocumentValidatorFieldsCorrectly() { assertThat(getValidatorInfo(COLLECTION_NAME)).isEqualTo(new Document("customName", new Document("$type", "bool"))); } + @Test // GH-4454 + public void failsJsonSchemaValidationForEncryptedDomainEntityProperty() { + + MongoJsonSchema schema = MongoJsonSchemaCreator.create().createSchemaFor(BeanWithEncryptedDomainEntity.class); + template.createCollection(COLLECTION_NAME, CollectionOptions.empty().schema(schema)); + + BeanWithEncryptedDomainEntity person = new BeanWithEncryptedDomainEntity(); + person.encryptedDomainEntity = new SimpleBean("some string", 100, null); + + assertThatExceptionOfType(DataIntegrityViolationException.class) + .isThrownBy(() -> template.save(person)) + .withMessageContaining("Document failed validation"); + } + private Document getCollectionOptions(String collectionName) { return getCollectionInfo(collectionName).get("options", Document.class); } @@ -222,4 +240,10 @@ static class SimpleBean { private @Nullable Integer rangedInteger; private @Field("customName") Object customFieldName; } + + @org.springframework.data.mongodb.core.mapping.Document(collection = COLLECTION_NAME) + @Encrypted(algorithm = "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic") + static class BeanWithEncryptedDomainEntity { + @Encrypted SimpleBean encryptedDomainEntity; + } }