recoder-code
Version:
Complete AI-powered development platform with ML model training, plugin registry, real-time collaboration, monitoring, infrastructure automation, and enterprise deployment capabilities
83 lines (74 loc) • 2.88 kB
JavaScript
var expect = require('chai').expect;
var types = require('../../lib/types');
var json1Type = require('ot-json1');
types.register(json1Type.type);
module.exports = function() {
describe('with json1 and composition returns null', function() {
var firstOp = json1Type.insertOp(['color'], 'gold');
var secondOp = json1Type.removeOp(['color']);
it('uses composed ops that returns null', function() {
var firstOp = json1Type.insertOp(['color'], 'gold');
var secondOp = json1Type.removeOp(['color']);
expect(json1Type.type.compose(firstOp, secondOp)).eql(null);
});
it('composes server operations', function(done) {
var doc = this.backend.connect().get('dogs', 'fido');
var doc2 = this.backend.connect().get('dogs', 'fido');
doc.create({age: 3}, json1Type.type.uri, function(err) {
if (err) return done(err);
doc2.fetch(function(err) {
if (err) return done(err);
doc.submitOp(json1Type.removeOp(['age']), function(err) {
if (err) return done(err);
doc2.submitOp(json1Type.removeOp(['age']), function(err) {
if (err) return done(err);
expect(doc.data).eql({});
expect(doc.version).eql(2);
done();
});
});
});
});
});
it('create and ops submitted sync get composed even if the composition returns null', function(done) {
var doc = this.backend.connect().get('dogs', 'fido');
doc.create({age: 3}, json1Type.type.uri);
doc.submitOp(firstOp);
doc.submitOp(secondOp, function(err) {
if (err) return done(err);
expect(doc.data).eql({age: 3});
// Version is 1 instead of 3, because the create and ops got composed
expect(doc.version).eql(1);
done();
});
});
it('ops submitted sync get composed even if the composition returns null', function(done) {
var doc = this.backend.connect().get('dogs', 'fido');
doc.create({age: 3}, json1Type.type.uri, function(err) {
if (err) return done(err);
doc.submitOp(firstOp);
doc.submitOp(secondOp, function(err) {
if (err) return done(err);
expect(doc.data).eql({age: 3});
// Ops get composed
expect(doc.version).eql(2);
done();
});
});
});
it('delete ops submitted sync does not get composed', function(done) {
var doc = this.backend.connect().get('dogs', 'fido');
doc.create({age: 3}, json1Type.type.uri, function(err) {
if (err) return done(err);
doc.submitOp(firstOp);
doc.del(function(err) {
if (err) return done(err);
expect(doc.data).eql(undefined);
// del DOES NOT get composed
expect(doc.version).eql(3);
done();
});
});
});
});
};