UNPKG

10.5 kBJavaScriptView Raw
1'use strict';
2
3var should = require('should'),
4 util = require('./test'),
5 uu = require('util'),
6 uuid = require('uuid'),
7 async = require('async'),
8 annotext = require('../annotext'),
9 diff_match_patch = require('googlediff');
10
11var reconstructContentFromHeader = function(parsed) {
12 parsed.header.annotations.sort(function(a, b) {
13 var leftProp;
14 var rightProp;
15
16 var test = function(val) {
17 if (val.index != null)
18 return val.index;
19 if (val.range_start != null)
20 return val.range_start;
21 };
22
23 return test(a) - test(b);
24 });
25 var reconstructedContent = "";
26 parsed.header.annotations.forEach(function(rev) {
27 if (rev.index != null) {
28 reconstructedContent += parsed.content[rev.index];
29 } else {
30 reconstructedContent += parsed.content.substr(rev.range_start, rev.range_end - rev.range_start + 1);
31 }
32 });
33 reconstructedContent.should.equal(parsed.content);
34}
35
36describe('AnnoText Unit tests', function() {
37 describe('api.update', function() {
38 it('revision indexes correct', function(done) {
39 var user_key = uuid.v4();
40 var revision_key = uuid.v4();
41 var update_revision_key = uuid.v4();
42 var annotext_instance = new annotext();
43 var edit_date = new Date();
44
45 var sampleContent = "mmmm";
46 var updatedContent = "mmmmm";
47
48 // create the baseline document
49 annotext_instance.update({
50 user_key: user_key,
51 revision_key: revision_key,
52 content: sampleContent,
53 edit_date: edit_date
54 });
55
56 // create disconnected patches (read-only)
57 var patches = annotext_instance.createPatch(updatedContent);
58
59 // apply the patches to the doc
60 annotext_instance.update({
61 user_key: user_key,
62 revision_key: update_revision_key,
63 patches: patches,
64 edit_date: edit_date
65 });
66
67 var parsed = annotext_instance.parse();
68 should.exist(parsed.header.annotations);
69 parsed.header.annotations.length.should.equal(2);
70
71 reconstructContentFromHeader(parsed);
72
73 done();
74 });
75
76 it('created revision runs correct', function(done) {
77 var user_key = uuid.v4();
78 var revision_key = uuid.v4();
79 var update_revision_key = uuid.v4();
80 var annotext_instance = new annotext();
81 var edit_date = new Date();
82
83 var sampleContent = "mmmm";
84 var updatedContent = "mmmmn";
85
86 // create the baseline document
87 annotext_instance.update({
88 user_key: user_key,
89 revision_key: revision_key,
90 content: sampleContent,
91 edit_date: edit_date
92 });
93
94 var patches = annotext_instance.createPatch(updatedContent);
95 annotext_instance.update({
96 user_key: user_key,
97 revision_key: revision_key,
98 patches: patches,
99 edit_date: edit_date
100 });
101
102 var parsed = annotext_instance.parse();
103 should.exist(parsed.header.annotations);
104 parsed.header.annotations.length.should.equal(1);
105
106 reconstructContentFromHeader(parsed);
107
108 done();
109 });
110
111
112 it('custom data attached to revision', function(done) {
113 var user_key = uuid.v4();
114 var revision_key = uuid.v4();
115 var update_revision_key = uuid.v4();
116 var annotext_instance = new annotext();
117 var edit_date = new Date();
118
119 var sampleContent = "mmmm";
120 var updatedContent = "mmmmn";
121
122 annotext_instance.update({
123 user_key: user_key,
124 revision_key: revision_key,
125 content: sampleContent,
126 custom_inline: {
127 go: 'ninja-go'
128 },
129 edit_date: edit_date
130 });
131
132 var patches = annotext_instance.createPatch(updatedContent);
133 annotext_instance.update({
134 patches: patches,
135 user_key: user_key,
136 revision_key: revision_key,
137 edit_date: edit_date
138 });
139
140 var parsed = annotext_instance.parse();
141 should.exist(parsed.header.annotations);
142 parsed.header.annotations.length.should.equal(1);
143 parsed.header.annotations[0].go.should.equal('ninja-go');
144
145 reconstructContentFromHeader(parsed);
146
147 done();
148 });
149
150 });
151
152 describe('api.update', function() {
153 it('revision indexes correct', function(done) {
154 var user_key = uuid.v4();
155 var revision_key = uuid.v4();
156 var annotext_instance = new annotext();
157 var sampleContent = "mmmm";
158
159 var textAnnotateDoc = annotext_instance.update({
160 user_key: user_key,
161 revision_key: revision_key,
162 content: sampleContent
163 });
164 var parsedDoc = annotext_instance.parse();
165
166 should.exist(parsedDoc.header.annotations);
167 parsedDoc.header.annotations.length.should.equal(1);
168 parsedDoc.header.annotations[0].range_start.should.equal(0);
169 parsedDoc.header.annotations[0].range_end.should.equal(3);
170
171 reconstructContentFromHeader(parsedDoc);
172
173 done();
174 });
175
176 it('retains parent revision reference', function(done) {
177 var user_key = uuid.v4();
178 var revision_key = uuid.v4();
179 var parent_revision_key = uuid.v4();
180 var annotext_instance = new annotext();
181 var sampleContent = "mmmm";
182
183 annotext_instance.update({
184 user_key: user_key,
185 revision_key: revision_key,
186 content: sampleContent,
187 custom_header: {
188 parent_revision_key: parent_revision_key
189 }
190 });
191
192 var parsedDoc = annotext_instance.parse();
193
194 parsedDoc.content.should.equal(sampleContent);
195 parsedDoc.header.annotations.length.should.equal(1);
196
197 done();
198 });
199
200 it('custom creation data', function(done) {
201 var user_key = uuid.v4();
202 var revision_key = uuid.v4();
203 var parent_revision_key = uuid.v4();
204 var annotext_instance = new annotext();
205 var sampleContent = "mmmm";
206
207 annotext_instance.update({
208 user_key: user_key,
209 revision_key: revision_key,
210 content: sampleContent,
211 custom_header: {
212 parent_revision_key: parent_revision_key
213 },
214 custom_inline: {
215 go: 'ninja-go'
216 }
217 });
218
219 var parsedDoc = annotext_instance.parse();
220
221 parsedDoc.header.parent_revision_key.should.equal(parent_revision_key);
222 parsedDoc.header.annotations[0].go.should.equal('ninja-go');
223
224 return done();
225 });
226 });
227
228
229 describe('update', function() {
230 it('Crazy User-Key', function(done) {
231 var annotextDoc = new annotext();
232 var doc = "---\nannotations:\n - { range_start: 0, range_end: 18, created: \'2013-11-24T17:06:01.153Z\', user: yxuesbv7, revision: 21bf0c14-fe9e-428c-94c5-f1db5e3f2cc8 }\ncreated: \'2013-11-24T17:06:01.153Z\'\n---\nThis is my story...";
233 var newContent = "asdfasdf";
234 var user_key = "My name's mike D";
235 var revision_key = uuid.v4();
236
237
238 annotextDoc.update({
239 content: newContent,
240 user_key: user_key,
241 revision_key: revision_key
242 });
243
244 return done();
245 });
246
247 it('Crazy Revision-Key', function(done) {
248 var annotextDocumentProcessor = new annotext();
249 var doc = "---\nannotations:\n - { range_start: 0, range_end: 18, created: \'2013-11-24T17:06:01.153Z\', user: yxuesbv7, revision: 21bf0c14-fe9e-428c-94c5-f1db5e3f2cc8 }\ncreated: \'2013-11-24T17:06:01.153Z\'\n---\nThis is my story...";
250 var newContent = "asdfasdf";
251 var user_key = "toddpi314";
252 var revision_key = uuid.v4() + " " + uuid.v4();
253
254 annotextDocumentProcessor.update({
255 content: newContent,
256 user_key: user_key,
257 revision_key: revision_key,
258
259 });
260
261 return done();
262 });
263
264 it('Validate Revision Timestamp', function(done) {
265 var annotextDoc = new annotext();
266 var doc = "---\nannotations:\n - { range_start: 0, range_end: 18, created: \'2013-11-24T17:06:01.153Z\', user: yxuesbv7, revision: 21bf0c14-fe9e-428c-94c5-f1db5e3f2cc8 }\ncreated: \'2013-11-24T17:06:01.153Z\'\n---\nThis is my story...";
267 var content = "asdfasdf";
268 var user_key = "toddpi314";
269 var revision_key = uuid.v4() + " " + uuid.v4();
270 var edit_date = new Date();
271
272 annotextDoc.update(
273 {
274 content: content,
275 user_key: user_key,
276 revision_key: revision_key,
277 edit_date : edit_date
278 });
279
280 var parsed = annotextDoc.parse();
281 should.exist(parsed.header);
282 return done();
283 });
284 });
285 describe('parse', function() {
286 it('Standard Success', function(done) {
287 var jsonDoc = "---\nannotations:\n - { range_start: 0, range_end: 18, created: \'2013-11-24T17:06:01.153Z\', user: yxuesbv7, revision: 21bf0c14-fe9e-428c-94c5-f1db5e3f2cc8 }\ncreated: \'2013-11-24T17:06:01.153Z\'\n---\nThis is my story...";
288 var annotextDoc = new annotext(jsonDoc);
289
290 // do the test
291 var parseContext = annotextDoc.parse();
292
293 should.exist(parseContext);
294 should.exist(parseContext.header);
295 should.exist(parseContext.header.annotations);
296 should.exist(parseContext.header.created);
297 should.exist(parseContext.content);
298
299 reconstructContentFromHeader(parseContext);
300
301 done();
302 });
303 });
304});