Skip to content

Commit a93854f

Browse files
committed
Add integration test to ensure schema validation fails when domain type property values are not encrypted as expected.
Closes #4454 Original Pull Request: #4455
1 parent b6cd129 commit a93854f

File tree

1 file changed

+26
-2
lines changed

1 file changed

+26
-2
lines changed

spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateValidationTests.java

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,10 @@
3333
import org.springframework.dao.DataIntegrityViolationException;
3434
import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration;
3535
import org.springframework.data.mongodb.core.CollectionOptions.ValidationOptions;
36+
import org.springframework.data.mongodb.core.mapping.Encrypted;
3637
import org.springframework.data.mongodb.core.mapping.Field;
3738
import org.springframework.data.mongodb.core.query.Criteria;
39+
import org.springframework.data.mongodb.core.schema.MongoJsonSchema;
3840
import org.springframework.data.mongodb.test.util.Client;
3941
import org.springframework.data.mongodb.test.util.MongoClientExtension;
4042
import org.springframework.lang.Nullable;
@@ -46,11 +48,13 @@
4648

4749
/**
4850
* Integration tests for {@link CollectionOptions#validation(ValidationOptions)} using
49-
* {@link org.springframework.data.mongodb.core.validation.CriteriaValidator} and
50-
* {@link org.springframework.data.mongodb.core.validation.DocumentValidator}.
51+
* {@link org.springframework.data.mongodb.core.validation.CriteriaValidator},
52+
* {@link org.springframework.data.mongodb.core.validation.DocumentValidator} and
53+
* {@link org.springframework.data.mongodb.core.validation.JsonSchemaValidator}.
5154
*
5255
* @author Andreas Zink
5356
* @author Christoph Strobl
57+
* @author Julia Lee
5458
*/
5559
@ExtendWith({ MongoClientExtension.class, SpringExtension.class })
5660
public class MongoTemplateValidationTests {
@@ -186,6 +190,20 @@ public void mapsDocumentValidatorFieldsCorrectly() {
186190
assertThat(getValidatorInfo(COLLECTION_NAME)).isEqualTo(new Document("customName", new Document("$type", "bool")));
187191
}
188192

193+
@Test // GH-4454
194+
public void failsJsonSchemaValidationForEncryptedDomainEntityProperty() {
195+
196+
MongoJsonSchema schema = MongoJsonSchemaCreator.create().createSchemaFor(BeanWithEncryptedDomainEntity.class);
197+
template.createCollection(COLLECTION_NAME, CollectionOptions.empty().schema(schema));
198+
199+
BeanWithEncryptedDomainEntity person = new BeanWithEncryptedDomainEntity();
200+
person.encryptedDomainEntity = new SimpleBean("some string", 100, null);
201+
202+
assertThatExceptionOfType(DataIntegrityViolationException.class)
203+
.isThrownBy(() -> template.save(person))
204+
.withMessageContaining("Document failed validation");
205+
}
206+
189207
private Document getCollectionOptions(String collectionName) {
190208
return getCollectionInfo(collectionName).get("options", Document.class);
191209
}
@@ -271,4 +289,10 @@ public String toString() {
271289
return "MongoTemplateValidationTests.SimpleBean(nonNullString=" + this.getNonNullString() + ", rangedInteger=" + this.getRangedInteger() + ", customFieldName=" + this.getCustomFieldName() + ")";
272290
}
273291
}
292+
293+
@org.springframework.data.mongodb.core.mapping.Document(collection = COLLECTION_NAME)
294+
@Encrypted(algorithm = "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic")
295+
static class BeanWithEncryptedDomainEntity {
296+
@Encrypted SimpleBean encryptedDomainEntity;
297+
}
274298
}

0 commit comments

Comments
 (0)