@Test public void createValidation() { getMorphia().map(DocumentValidation.class); getDs().enableDocumentValidation(); assertEquals(Document.parse(DocumentValidation.class.getAnnotation(Validation.class).value()), getValidator()); try { getDs().save(new DocumentValidation("John", 1, new Date())); fail("Document should have failed validation"); } catch (WriteConcernException e) { assertTrue(e.getMessage().contains("Document failed validation")); } getDs().save(new DocumentValidation("Harold", 100, new Date())); }
@Test public void update() { getMorphia().map(DocumentValidation.class); getDs().enableDocumentValidation(); getDs().save(new DocumentValidation("Harold", 100, new Date())); Query<DocumentValidation> query = getDs().find(DocumentValidation.class); UpdateOperations<DocumentValidation> updates = getDs().createUpdateOperations(DocumentValidation.class) .set("number", 5); UpdateOptions options = new UpdateOptions() .bypassDocumentValidation(false); try { getDs().update(query, updates, options); fail("Document validation should have complained"); } catch (WriteConcernException e) { // expected } options.bypassDocumentValidation(true); getDs().update(query, updates, options); Assert.assertNotNull(query.field("number").equal(5) .find(new FindOptions().limit(1)) .tryNext()); }
@Test public void findAndModify() { getMorphia().map(DocumentValidation.class); getDs().enableDocumentValidation(); getDs().save(new DocumentValidation("Harold", 100, new Date())); Query<DocumentValidation> query = getDs().find(DocumentValidation.class); UpdateOperations<DocumentValidation> updates = getDs().createUpdateOperations(DocumentValidation.class) .set("number", 5); FindAndModifyOptions options = new FindAndModifyOptions() .bypassDocumentValidation(false); try { getDs().findAndModify(query, updates, options); fail("Document validation should have complained"); } catch (MongoCommandException e) { // expected } options.bypassDocumentValidation(true); getDs().findAndModify(query, updates, options); Assert.assertNotNull(query.field("number").equal(5) .find(new FindOptions().limit(1)) .next()); }
@SuppressWarnings("deprecation") private void updateValidation(final MappedClass mappedClass, final ValidationLevel level, final ValidationAction action) { ((DatastoreImpl) getDs()).process(mappedClass, new ValidationBuilder().value("{ jelly : { $ne : 'rhubarb' } }") .level(level) .action(action)); } }
@Test public void save() { getMorphia().map(DocumentValidation.class); getDs().enableDocumentValidation(); try { getDs().save(new DocumentValidation("Harold", 8, new Date())); fail("Document validation should have complained"); } catch (WriteConcernException e) { // expected } getDs().save(new DocumentValidation("Harold", 8, new Date()), new InsertOptions() .bypassDocumentValidation(true)); Query<DocumentValidation> query = getDs().find(DocumentValidation.class) .field("number").equal(8); Assert.assertNotNull(query.find(new FindOptions().limit(1)).tryNext()); List<DocumentValidation> list = asList(new DocumentValidation("Harold", 8, new Date()), new DocumentValidation("Harold", 8, new Date()), new DocumentValidation("Harold", 8, new Date()), new DocumentValidation("Harold", 8, new Date()), new DocumentValidation("Harold", 8, new Date())); try { getDs().save(list); fail("Document validation should have complained"); } catch (WriteConcernException e) { // expected } getDs().save(list, new InsertOptions().bypassDocumentValidation(true)); Assert.assertTrue(query.field("number").equal(8).find().hasNext()); }
@Test public void overwriteValidation() { Document validator = Document.parse("{ \"jelly\" : { \"$ne\" : \"rhubarb\" } }"); MongoDatabase database = addValidation(validator, "validation"); assertEquals(validator, getValidator()); Document rhubarb = new Document("jelly", "rhubarb").append("number", 20); database.getCollection("validation").insertOne(new Document("jelly", "grape")); try { database.getCollection("validation").insertOne(rhubarb); fail("Document should have failed validation"); } catch (MongoWriteException e) { assertTrue(e.getMessage().contains("Document failed validation")); } getMorphia().map(DocumentValidation.class); getDs().enableDocumentValidation(); assertEquals(Document.parse(DocumentValidation.class.getAnnotation(Validation.class).value()), getValidator()); try { database.getCollection("validation").insertOne(rhubarb); } catch (MongoWriteException e) { assertFalse(e.getMessage().contains("Document failed validation")); } try { getDs().save(new DocumentValidation("John", 1, new Date())); fail("Document should have failed validation"); } catch (WriteConcernException e) { assertTrue(e.getMessage().contains("Document failed validation")); } }
@Test public void insert() { getMorphia().map(DocumentValidation.class); getDs().enableDocumentValidation(); try { getAds().insert(new DocumentValidation("Harold", 8, new Date())); fail("Document validation should have complained"); } catch (WriteConcernException e) { // expected } getAds().insert(new DocumentValidation("Harold", 8, new Date()), new InsertOptions() .bypassDocumentValidation(true)); Query<DocumentValidation> query = getDs().find(DocumentValidation.class) .field("number").equal(8); Assert.assertNotNull(query.find(new FindOptions().limit(1)).tryNext()); List<DocumentValidation> list = asList(new DocumentValidation("Harold", 8, new Date()), new DocumentValidation("John", 8, new Date()), new DocumentValidation("Sarah", 8, new Date()), new DocumentValidation("Amy", 8, new Date()), new DocumentValidation("James", 8, new Date())); try { getAds().insert(list); fail("Document validation should have complained"); } catch (WriteConcernException e) { // expected } getAds().insert(list, new InsertOptions() .bypassDocumentValidation(true)); Assert.assertTrue(query.field("number").equal(8).find().hasNext()); }