|
1 | 1 | var async = require('async');
|
2 | 2 | var expect = require('expect.js');
|
3 | 3 | var types = require('../../lib/types');
|
4 |
| -var serializable_type = require('../ot-mock-serializable-json0').type; |
5 |
| - |
6 |
| -types.register(serializable_type); |
| 4 | +var deserializedType = require('./deserialized-type'); |
| 5 | +types.register(deserializedType.type); |
| 6 | +types.register(deserializedType.type2); |
7 | 7 |
|
8 | 8 | module.exports = function() {
|
9 | 9 | describe('client submit', function() {
|
@@ -43,16 +43,6 @@ describe('client submit', function() {
|
43 | 43 | });
|
44 | 44 | });
|
45 | 45 |
|
46 |
| - it('can create a new doc with a serializable type', function(done) { |
47 |
| - var doc = this.backend.connect().get('dogs', 'fido'); |
48 |
| - doc.create(serializable_type.serialize({age: 3}), serializable_type.uri, function(err) { |
49 |
| - if (err) return done(err); |
50 |
| - expect(doc.data).eql({age: 3}); |
51 |
| - expect(doc.version).eql(1); |
52 |
| - done(); |
53 |
| - }); |
54 |
| - }); |
55 |
| - |
56 | 46 | it('can create then delete then create a doc', function(done) {
|
57 | 47 | var doc = this.backend.connect().get('dogs', 'fido');
|
58 | 48 | doc.create({age: 3}, function(err) {
|
@@ -88,19 +78,6 @@ describe('client submit', function() {
|
88 | 78 | });
|
89 | 79 | });
|
90 | 80 |
|
91 |
| - it('can create then submit an op on a serializable type', function(done) { |
92 |
| - var doc = this.backend.connect().get('dogs', 'fido'); |
93 |
| - doc.create(serializable_type.serialize({age: 3}), serializable_type.uri, function(err) { |
94 |
| - if (err) return done(err); |
95 |
| - doc.submitOp({p: ['age'], na: 2}, function(err) { |
96 |
| - if (err) return done(err); |
97 |
| - expect(doc.data).eql({age: 5}); |
98 |
| - expect(doc.version).eql(2); |
99 |
| - done(); |
100 |
| - }); |
101 |
| - }); |
102 |
| - }); |
103 |
| - |
104 | 81 | it('can create then submit an op sync', function(done) {
|
105 | 82 | var doc = this.backend.connect().get('dogs', 'fido');
|
106 | 83 | doc.create({age: 3});
|
@@ -167,33 +144,6 @@ describe('client submit', function() {
|
167 | 144 | });
|
168 | 145 | });
|
169 | 146 |
|
170 |
| - it('ops submitted sync get composed with a serializable type', function(done) { |
171 |
| - var doc = this.backend.connect().get('dogs', 'fido'); |
172 |
| - doc.create(serializable_type.serialize({age: 3}), serializable_type.uri); |
173 |
| - doc.submitOp({p: ['age'], na: 2}); |
174 |
| - doc.submitOp({p: ['age'], na: 2}, function(err) { |
175 |
| - if (err) return done(err); |
176 |
| - expect(doc.data).eql({age: 7}); |
177 |
| - // Version is 1 instead of 3, because the create and ops got composed |
178 |
| - expect(doc.version).eql(1); |
179 |
| - doc.submitOp({p: ['age'], na: 2}); |
180 |
| - doc.submitOp({p: ['age'], na: 2}, function(err) { |
181 |
| - if (err) return done(err); |
182 |
| - expect(doc.data).eql({age: 11}); |
183 |
| - // Ops get composed |
184 |
| - expect(doc.version).eql(2); |
185 |
| - doc.submitOp({p: ['age'], na: 2}); |
186 |
| - doc.del(function(err) { |
187 |
| - if (err) return done(err); |
188 |
| - expect(doc.data).eql(undefined); |
189 |
| - // del DOES NOT get composed |
190 |
| - expect(doc.version).eql(4); |
191 |
| - done(); |
192 |
| - }); |
193 |
| - }); |
194 |
| - }); |
195 |
| - }); |
196 |
| - |
197 | 147 | it('does not compose ops when doc.preventCompose is true', function(done) {
|
198 | 148 | var doc = this.backend.connect().get('dogs', 'fido');
|
199 | 149 | doc.preventCompose = true;
|
@@ -434,23 +384,6 @@ describe('client submit', function() {
|
434 | 384 | });
|
435 | 385 | });
|
436 | 386 |
|
437 |
| - it('can commit then fetch in a new connection to get the same data with a serializable type', function(done) { |
438 |
| - var doc = this.backend.connect().get('dogs', 'fido'); |
439 |
| - var doc2 = this.backend.connect().get('dogs', 'fido'); |
440 |
| - doc.create(serializable_type.serialize({age: 3}), serializable_type.uri, function(err) { |
441 |
| - if (err) return done(err); |
442 |
| - doc2.fetch(function(err) { |
443 |
| - if (err) return done(err); |
444 |
| - expect(doc.data).eql({age: 3}); |
445 |
| - expect(doc2.data).eql({age: 3}); |
446 |
| - expect(doc.version).eql(1); |
447 |
| - expect(doc2.version).eql(1); |
448 |
| - expect(doc.data).not.equal(doc2.data); |
449 |
| - done(); |
450 |
| - }); |
451 |
| - }); |
452 |
| - }); |
453 |
| - |
454 | 387 | it('an op submitted concurrently is transformed by the first', function(done) {
|
455 | 388 | var doc = this.backend.connect().get('dogs', 'fido');
|
456 | 389 | var doc2 = this.backend.connect().get('dogs', 'fido');
|
@@ -1111,5 +1044,99 @@ describe('client submit', function() {
|
1111 | 1044 | });
|
1112 | 1045 | });
|
1113 | 1046 |
|
| 1047 | + describe('type.deserialize', function() { |
| 1048 | + it('can create a new doc', function(done) { |
| 1049 | + var doc = this.backend.connect().get('dogs', 'fido'); |
| 1050 | + doc.create([3], deserializedType.type.uri, function(err) { |
| 1051 | + if (err) return done(err); |
| 1052 | + expect(doc.data).a(deserializedType.Node); |
| 1053 | + expect(doc.data).eql({value: 3, next: null}); |
| 1054 | + done(); |
| 1055 | + }); |
| 1056 | + }); |
| 1057 | + |
| 1058 | + it('is stored serialized in backend', function() { |
| 1059 | + var db = this.backend.db; |
| 1060 | + var doc = this.backend.connect().get('dogs', 'fido'); |
| 1061 | + doc.create([3], deserializedType.type.uri, function(err) { |
| 1062 | + if (err) return done(err); |
| 1063 | + db.getSnapshot('dogs', fido, null, null, function(err, snapshot) { |
| 1064 | + if (err) return done(err); |
| 1065 | + expect(snapshot.data).eql([3]); |
| 1066 | + done(); |
| 1067 | + }); |
| 1068 | + }); |
| 1069 | + }); |
| 1070 | + |
| 1071 | + it('deserializes on fetch', function(done) { |
| 1072 | + var doc = this.backend.connect().get('dogs', 'fido'); |
| 1073 | + var doc2 = this.backend.connect().get('dogs', 'fido'); |
| 1074 | + var backend = this.backend; |
| 1075 | + doc.create([3], deserializedType.type.uri, function(err) { |
| 1076 | + if (err) return done(err); |
| 1077 | + doc2.fetch(function(err) { |
| 1078 | + if (err) return done(err); |
| 1079 | + expect(doc2.data).a(deserializedType.Node); |
| 1080 | + expect(doc2.data).eql({value: 3, next: null}); |
| 1081 | + done(); |
| 1082 | + }); |
| 1083 | + }); |
| 1084 | + }); |
| 1085 | + |
| 1086 | + it('can create then submit an op', function(done) { |
| 1087 | + var doc = this.backend.connect().get('dogs', 'fido'); |
| 1088 | + doc.create([3], deserializedType.type.uri, function(err) { |
| 1089 | + if (err) return done(err); |
| 1090 | + doc.submitOp({insert: 0, value: 2}, function(err) { |
| 1091 | + if (err) return done(err); |
| 1092 | + expect(doc.data).eql({value: 2, next: {value: 3, next: null}}); |
| 1093 | + done(); |
| 1094 | + }); |
| 1095 | + }); |
| 1096 | + }); |
| 1097 | + |
| 1098 | + it('server fetches and transforms by already committed op', function(done) { |
| 1099 | + var doc = this.backend.connect().get('dogs', 'fido'); |
| 1100 | + var doc2 = this.backend.connect().get('dogs', 'fido'); |
| 1101 | + var backend = this.backend; |
| 1102 | + doc.create([3], deserializedType.type.uri, function(err) { |
| 1103 | + if (err) return done(err); |
| 1104 | + doc2.fetch(function(err) { |
| 1105 | + if (err) return done(err); |
| 1106 | + doc.submitOp({insert: 0, value: 2}, function(err) { |
| 1107 | + if (err) return done(err); |
| 1108 | + doc2.submitOp({insert: 1, value: 4}, function(err) { |
| 1109 | + if (err) return done(err); |
| 1110 | + expect(doc2.data).eql({value: 2, next: {value: 3, next: {value: 4, next: null}}}); |
| 1111 | + done(); |
| 1112 | + }); |
| 1113 | + }); |
| 1114 | + }); |
| 1115 | + }); |
| 1116 | + }); |
| 1117 | + }); |
| 1118 | + |
| 1119 | + describe('type.createDeserialized', function() { |
| 1120 | + it('can create a new doc', function(done) { |
| 1121 | + var doc = this.backend.connect().get('dogs', 'fido'); |
| 1122 | + doc.create([3], deserializedType.type2.uri, function(err) { |
| 1123 | + if (err) return done(err); |
| 1124 | + expect(doc.data).a(deserializedType.Node); |
| 1125 | + expect(doc.data).eql({value: 3, next: null}); |
| 1126 | + done(); |
| 1127 | + }); |
| 1128 | + }); |
| 1129 | + |
| 1130 | + it('can create a new doc from deserialized form', function(done) { |
| 1131 | + var doc = this.backend.connect().get('dogs', 'fido'); |
| 1132 | + doc.create(new deserializedType.Node(3), deserializedType.type2.uri, function(err) { |
| 1133 | + if (err) return done(err); |
| 1134 | + expect(doc.data).a(deserializedType.Node); |
| 1135 | + expect(doc.data).eql({value: 3, next: null}); |
| 1136 | + done(); |
| 1137 | + }); |
| 1138 | + }); |
| 1139 | + }); |
| 1140 | + |
1114 | 1141 | });
|
1115 | 1142 | };
|
0 commit comments