UNPKG

synctos

Version:

The Syncmaker. A tool to build comprehensive sync functions for Couchbase Sync Gateway.

110 lines (95 loc) 3.98 kB
const sampleSpecHelperMaker = require('./helpers/sample-spec-helper-maker'); const testFixtureMaker = require('../src/testing/test-fixture-maker'); describe('Sample notification transport processing summary doc definition', () => { const testFixture = testFixtureMaker.initFromSyncFunction('build/sync-functions/test-sample-sync-function.js'); const errorFormatter = testFixture.validationErrorFormatter; const sampleSpecHelper = sampleSpecHelperMaker.init(testFixture); afterEach(() => { testFixture.resetTestEnvironment(); }); function verifyProcessingSummaryWritten(doc, oldDoc) { testFixture.verifyDocumentAccepted(doc, oldDoc, sampleSpecHelper.getExpectedAuthorization('notification-transport-write')); } function verifyProcessingSummaryNotWritten(doc, oldDoc, expectedErrorMessages) { testFixture.verifyDocumentRejected( doc, oldDoc, 'notificationTransportProcessingSummary', expectedErrorMessages, sampleSpecHelper.getExpectedAuthorization('notification-transport-write')); } it('successfully creates a valid notification transport processing summary document', () => { const doc = { _id: 'biz.901.notification.ABC.processedTransport.XYZ', nonce: 'my-nonce', processedAt: '2016-06-04T21:02:19.013Z', processedBy: 'foobar', sentAt: '2016-06-04T21:02:55.013Z' }; verifyProcessingSummaryWritten(doc); }); it('cannot create a notification transport processing summary document when the properties are invalid', () => { const doc = { _id: 'biz.109.notification.ABC.processedTransport.XYZ', processedBy: [ ], sentAt: '2016-06-04T21:02:55.9999Z' // too many digits in the millisecond segment }; verifyProcessingSummaryNotWritten( doc, void 0, [ errorFormatter.requiredValueViolation('nonce'), errorFormatter.typeConstraintViolation('processedBy', 'string'), errorFormatter.requiredValueViolation('processedAt'), errorFormatter.datetimeFormatInvalid('sentAt') ]); }); it('successfully replaces a valid notification transport processing summary document', () => { const doc = { _id: 'biz.119.notification.ABC.processedTransport.XYZ', nonce: 'my-nonce', processedAt: '2016-06-04T21:02:19.013Z' }; const oldDoc = { _id: 'biz.119.notification.ABC.processedTransport.XYZ', nonce: 'my-nonce', processedBy: null, processedAt: '2016-06-04T21:02:19.013Z' }; verifyProcessingSummaryWritten(doc, oldDoc); }); it('cannot replace a notification transport processing summary document when the properties are invalid', () => { const doc = { _id: 'biz.275.notification.ABC.processedTransport.XYZ', nonce: 471, processedAt: '2016-06-04T09:27:07.514Z', sentAt: '' }; const oldDoc = { _id: 'biz.275.notification.ABC.processedTransport.XYZ', processedBy: 'foobar', processedAt: '2016-06-03T21:02:19.013Z', sentAt: '2016-07-15' }; verifyProcessingSummaryNotWritten( doc, oldDoc, [ errorFormatter.immutableItemViolation('nonce'), errorFormatter.typeConstraintViolation('nonce', 'string'), errorFormatter.immutableItemViolation('processedBy'), errorFormatter.immutableItemViolation('processedAt'), errorFormatter.datetimeFormatInvalid('sentAt'), errorFormatter.immutableItemViolation('sentAt') ]); }); it('cannot delete a notification transport processing summary document because it is marked as undeletable', () => { const doc = { _id: 'biz.317.notification.ABC.processedTransport.XYZ', _deleted: true }; const oldDoc = { _id: 'biz.317.notification.ABC.processedTransport.XYZ', processedBy: 'foobar', processedAt: '2016-06-04T21:02:19.013Z' }; verifyProcessingSummaryNotWritten(doc, oldDoc, errorFormatter.cannotDeleteDocViolation()); }); });