1 | 'use strict';
|
2 |
|
3 | var 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 |
|
11 | var 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 |
|
36 | describe('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 |
|
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 |
|
57 | var patches = annotext_instance.createPatch(updatedContent);
|
58 |
|
59 |
|
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 |
|
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 |
|
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 | });
|