synctos
Version:
The Syncmaker. A tool to build comprehensive sync functions for Couchbase Sync Gateway.
69 lines (60 loc) • 1.8 kB
JavaScript
const testFixtureMaker = require('../src/testing/test-fixture-maker');
describe('Custom validation constraint:', () => {
const testFixture =
testFixtureMaker.initFromSyncFunction('build/sync-functions/test-custom-validation-sync-function.js');
afterEach(() => {
testFixture.resetTestEnvironment();
});
it('allows a document if custom validation succeeds', () => {
const doc = {
_id: 'my-doc',
type: 'customValidationDoc',
baseProp: {
failValidation: false,
customValidationProp: 'foo'
}
};
testFixture.verifyDocumentCreated(doc);
});
it('blocks a document if custom validation fails', () => {
const oldDoc = {
_id: 'my-doc',
type: 'customValidationDoc',
baseProp: { }
};
const doc = {
_id: 'my-doc',
type: 'customValidationDoc',
baseProp: {
failValidation: true,
customValidationProp: 'foo'
}
};
const expectedCurrentItemEntry = {
itemValue: doc.baseProp.customValidationProp,
itemName: 'customValidationProp'
};
const expectedValidationItemStack = [
{ // The document (root)
itemValue: doc,
oldItemValue: oldDoc,
itemName: null
},
{ // The parent of the property with the customValidation constraint
itemValue: doc.baseProp,
oldItemValue: oldDoc.baseProp,
itemName: 'baseProp'
}
];
testFixture.verifyDocumentNotReplaced(
doc,
oldDoc,
'customValidationDoc',
[
`doc: ${JSON.stringify(doc)}`,
`oldDoc: ${JSON.stringify(oldDoc)}`,
`currentItemEntry: ${JSON.stringify(expectedCurrentItemEntry)}`,
`validationItemStack: ${JSON.stringify(expectedValidationItemStack)}`
]);
});
});