@tiledesk/tiledesk-server 2.19.12 → 2.19.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,844 @@
1
+ process.env.NODE_ENV = 'test';
2
+ let chai = require('chai');
3
+ let expect = require('chai').expect;
4
+
5
+ let chaiHttp = require('chai-http');
6
+ let server = require('../app');
7
+ const projectService = require('../services/projectService');
8
+ const userService = require('../services/userService');
9
+ var RoleConstants = require("../models/roleConstants");
10
+ const Project_user = require('../models/project_user');
11
+ let should = chai.should();
12
+
13
+ let log = false;
14
+
15
+ chai.use(chaiHttp);
16
+
17
+
18
+ describe('Data Tables Route', () => {
19
+
20
+ it('create-with-empty-schema', (done) => {
21
+
22
+ let email = "test-signup-" + Date.now() + "@email.com";
23
+ let pwd = "pwd";
24
+
25
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(savedUser => {
26
+ projectService.create("test-create-empty-table", savedUser._id).then(savedProject => {
27
+
28
+ chai.request(server)
29
+ .post('/' + savedProject._id + '/tables')
30
+ .auth(email, pwd)
31
+ .send({ name: "users" })
32
+ .end((err, res) => {
33
+
34
+ if (err) { console.error("err: ", err); }
35
+ if (log) { console.log("res.body: ", res.body); }
36
+
37
+ res.should.have.status(200);
38
+ res.body.should.be.a('object');
39
+ expect(res.body.name).to.equal("users");
40
+ expect(res.body.id_project).to.equal(savedProject._id.toString());
41
+ expect(res.body.schema).to.be.an('array').that.is.empty;
42
+
43
+ done();
44
+ })
45
+ })
46
+ })
47
+ })
48
+
49
+ it('create-table-with-schema', (done) => {
50
+
51
+ let email = "test-signup-" + Date.now() + "@email.com";
52
+ let pwd = "pwd";
53
+
54
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(savedUser => {
55
+ projectService.create("test-create-table-with-schema", savedUser._id).then(savedProject => {
56
+ chai.request(server)
57
+ .post('/' + savedProject._id + '/tables')
58
+ .auth(email, pwd)
59
+ .send({ name: "users", schema: [{ name: "name", type: "string" }, { name: "repo", type: "number" }] })
60
+ .end((err, res) => {
61
+
62
+ if (err) { console.error("err: ", err); }
63
+ if (log) { console.log("res.body: ", res.body); }
64
+
65
+ res.should.have.status(200);
66
+ res.body.should.be.a('object');
67
+ expect(res.body.name).to.equal("users");
68
+ expect(res.body.id_project).to.equal(savedProject._id.toString());
69
+ expect(res.body.schema).to.be.an('array').that.is.lengthOf(2);
70
+ expect(res.body.schema[0].name).to.equal("name");
71
+ expect(res.body.schema[0].type).to.equal("string");
72
+ expect(res.body.schema[1].name).to.equal("repo");
73
+ expect(res.body.schema[1].type).to.equal("number");
74
+
75
+ done();
76
+ })
77
+ })
78
+ })
79
+ })
80
+
81
+ it('create-table-with-invalid-schema', (done) => {
82
+
83
+ let email = "test-signup-" + Date.now() + "@email.com";
84
+ let pwd = "pwd";
85
+
86
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(savedUser => {
87
+ projectService.create("test-create-table-with-schema", savedUser._id).then(savedProject => {
88
+ chai.request(server)
89
+ .post('/' + savedProject._id + '/tables')
90
+ .auth(email, pwd)
91
+ .send({ name: "users", schema: { name: "string", repo: "number" } })
92
+ .end((err, res) => {
93
+
94
+ if (err) { console.error("err: ", err); }
95
+ if (log) { console.log("res.body: ", res.body); }
96
+
97
+ res.should.have.status(400);
98
+ res.body.should.be.a('object');
99
+ expect(res.body.success).to.equal(false);
100
+ expect(res.body.message).to.equal("schema must be an array");
101
+
102
+ done();
103
+ })
104
+ })
105
+ })
106
+ })
107
+
108
+ it('create-table-rejects-invalid-column-name', (done) => {
109
+
110
+ let email = "test-signup-" + Date.now() + "@email.com";
111
+ let pwd = "pwd";
112
+
113
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(savedUser => {
114
+ projectService.create("test-invalid-column-name", savedUser._id).then(savedProject => {
115
+ chai.request(server)
116
+ .post('/' + savedProject._id + '/tables')
117
+ .auth(email, pwd)
118
+ .send({ name: "users", schema: [{ name: "full name", type: "string" }] })
119
+ .end((err, res) => {
120
+ res.should.have.status(400);
121
+ expect(res.body.message).to.include('letters, numbers and underscore');
122
+ done();
123
+ })
124
+ })
125
+ })
126
+ })
127
+
128
+ it('update-table-name', (done) => {
129
+
130
+ let email = "test-signup-" + Date.now() + "@email.com";
131
+ let pwd = "pwd";
132
+
133
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(savedUser => {
134
+ projectService.create("test-create-table-with-schema", savedUser._id).then(savedProject => {
135
+ chai.request(server)
136
+ .post('/' + savedProject._id + '/tables')
137
+ .auth(email, pwd)
138
+ .send({ name: "users", schema: [{ name: "name", type: "string" }, { name: "repo", type: "number" }] })
139
+ .end((err, res) => {
140
+
141
+ if (err) { console.error("err: ", err); }
142
+ if (log) { console.log("res.body: ", res.body); }
143
+
144
+ res.should.have.status(200);
145
+ res.body.should.be.a('object');
146
+
147
+ const id_table = res.body._id;
148
+
149
+ chai.request(server)
150
+ .put('/' + savedProject._id + '/tables/' + id_table)
151
+ .auth(email, pwd)
152
+ .send({ name: "users-renamed" })
153
+ .end((err, res) => {
154
+ if (err) { console.error("err: ", err); }
155
+ if (log) { console.log("res.body: ", res.body); }
156
+
157
+ res.should.have.status(200);
158
+ res.body.should.be.a('object');
159
+ expect(res.body.name).to.equal("users-renamed");
160
+
161
+ done();
162
+ })
163
+ })
164
+ })
165
+ })
166
+ })
167
+
168
+ it('update-table-schema-adding-column', (done) => {
169
+
170
+ let email = "test-signup-" + Date.now() + "@email.com";
171
+ let pwd = "pwd";
172
+
173
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(savedUser => {
174
+ projectService.create("test-create-table-with-schema", savedUser._id).then(savedProject => {
175
+ chai.request(server)
176
+ .post('/' + savedProject._id + '/tables')
177
+ .auth(email, pwd)
178
+ .send({ name: "users", schema: [{ name: "name", type: "string" }, { name: "repo", type: "number" }] })
179
+ .end((err, res) => {
180
+
181
+ if (err) { console.error("err: ", err); }
182
+ if (log) { console.log("res.body: ", res.body); }
183
+
184
+ res.should.have.status(200);
185
+ res.body.should.be.a('object');
186
+
187
+ const id_table = res.body._id;
188
+
189
+ chai.request(server)
190
+ .put('/' + savedProject._id + '/tables/' + id_table + '/insert')
191
+ .auth(email, pwd)
192
+ .send({ data: { name: "John Doe", repo: 100 } })
193
+ .end(() => {
194
+ let updateSchema = [
195
+ ...res.body.schema,
196
+ { name: "country", type: "string" }
197
+ ];
198
+
199
+ chai.request(server)
200
+ .put('/' + savedProject._id + '/tables/' + id_table)
201
+ .auth(email, pwd)
202
+ .send({ schema: updateSchema })
203
+ .end((err, res) => {
204
+ if (err) { console.error("err: ", err); }
205
+ if (log) { console.log("res.body: ", res.body); }
206
+
207
+ res.should.have.status(200);
208
+ expect(res.body.schema).to.be.an('array').that.is.lengthOf(3);
209
+
210
+ chai.request(server)
211
+ .get('/' + savedProject._id + '/tables/' + id_table + '/rows/list')
212
+ .auth(email, pwd)
213
+ .end((err2, listRes) => {
214
+ listRes.should.have.status(200);
215
+ expect(listRes.body[0].name).to.equal("John Doe");
216
+ expect(listRes.body[0].repo).to.equal(100);
217
+ expect(listRes.body[0].country).to.equal(null);
218
+ done();
219
+ });
220
+ });
221
+ });
222
+ })
223
+ })
224
+ })
225
+ })
226
+
227
+ it('update-table-schema-removing-column', (done) => {
228
+
229
+ let email = "test-signup-" + Date.now() + "@email.com";
230
+ let pwd = "pwd";
231
+
232
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(savedUser => {
233
+ projectService.create("test-create-table-with-schema", savedUser._id).then(savedProject => {
234
+ chai.request(server)
235
+ .post('/' + savedProject._id + '/tables')
236
+ .auth(email, pwd)
237
+ .send({ name: "users", schema: [{ name: "name", type: "string" }, { name: "repo", type: "number" }, { name: "country", type: "string" }] })
238
+ .end((err, res) => {
239
+
240
+ if (err) { console.error("err: ", err); }
241
+ if (log) { console.log("res.body: ", res.body); }
242
+
243
+ res.should.have.status(200);
244
+ res.body.should.be.a('object');
245
+
246
+ const id_table = res.body._id;
247
+
248
+ res.body.schema.pop();
249
+ let updateSchema = res.body.schema;
250
+
251
+ chai.request(server)
252
+ .put('/' + savedProject._id + '/tables/' + id_table)
253
+ .auth(email, pwd)
254
+ .send({ schema: updateSchema })
255
+ .end((err, res) => {
256
+ if (err) { console.error("err: ", err); }
257
+ if (log) { console.log("res.body: ", res.body); }
258
+
259
+ res.should.have.status(200);
260
+ res.body.should.be.a('object');
261
+ expect(res.body.schema).to.be.an('array').that.is.lengthOf(2);
262
+ expect(res.body.schema[0].name).to.equal("name");
263
+ expect(res.body.schema[0].type).to.equal("string");
264
+ expect(res.body.schema[1].name).to.equal("repo");
265
+ expect(res.body.schema[1].type).to.equal("number");
266
+
267
+
268
+ done();
269
+ })
270
+ })
271
+ })
272
+ })
273
+ })
274
+
275
+ it('update-table-schema-renaming-column', (done) => {
276
+
277
+ let email = "test-signup-" + Date.now() + "@email.com";
278
+ let pwd = "pwd";
279
+
280
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(savedUser => {
281
+ projectService.create("test-create-table-with-schema", savedUser._id).then(savedProject => {
282
+ chai.request(server)
283
+ .post('/' + savedProject._id + '/tables')
284
+ .auth(email, pwd)
285
+ .send({ name: "users", schema: [{ name: "name", type: "string" }, { name: "repo", type: "number" }] })
286
+ .end((err, res) => {
287
+
288
+ if (err) { console.error("err: ", err); }
289
+ if (log) { console.log("res.body: ", res.body); }
290
+
291
+ res.should.have.status(200);
292
+ res.body.should.be.a('object');
293
+
294
+ const id_table = res.body._id;
295
+
296
+ let updateSchema = res.body.schema;
297
+ updateSchema[1].name = "repo_renamed";
298
+
299
+ chai.request(server)
300
+ .put('/' + savedProject._id + '/tables/' + id_table)
301
+ .auth(email, pwd)
302
+ .send({ schema: updateSchema })
303
+ .end((err, res) => {
304
+ if (err) { console.error("err: ", err); }
305
+ if (log) { console.log("res.body: ", res.body); }
306
+
307
+ res.should.have.status(200);
308
+ res.body.should.be.a('object');
309
+ expect(res.body.schema).to.be.an('array').that.is.lengthOf(2);
310
+ expect(res.body.schema[0].name).to.equal("name");
311
+ expect(res.body.schema[0].type).to.equal("string");
312
+ expect(res.body.schema[1].name).to.equal("repo_renamed");
313
+ expect(res.body.schema[1].type).to.equal("number");
314
+
315
+
316
+ done();
317
+ })
318
+ })
319
+ })
320
+ })
321
+ })
322
+
323
+ it('insert-row-into-table', (done) => {
324
+
325
+ let email = "test-signup-" + Date.now() + "@email.com";
326
+ let pwd = "pwd";
327
+
328
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(savedUser => {
329
+ projectService.create("test-create-table-with-schema", savedUser._id).then(savedProject => {
330
+ chai.request(server)
331
+ .post('/' + savedProject._id + '/tables')
332
+ .auth(email, pwd)
333
+ .send({ name: "users", schema: [{ name: "name", type: "string" }, { name: "repo", type: "number" }] })
334
+ .end((err, res) => {
335
+
336
+ if (err) { console.error("err: ", err); }
337
+ if (log) { console.log("res.body: ", res.body); }
338
+
339
+ res.should.have.status(200);
340
+ res.body.should.be.a('object');
341
+
342
+ const id_table = res.body._id;
343
+
344
+ let row = {
345
+ name: "John Doe",
346
+ repo: 100
347
+ }
348
+ chai.request(server)
349
+ .post('/' + savedProject._id + '/tables/' + id_table + '/row/insert')
350
+ .auth(email, pwd)
351
+ .send({ data: row })
352
+ .end((err, res) => {
353
+
354
+ if (err) { console.error("err: ", err); }
355
+ if (log) { console.log("res.body: ", res.body); }
356
+
357
+ res.should.have.status(200);
358
+ res.body.should.be.a('object');
359
+ res.body.data.should.be.a('object');
360
+ expect(res.body.data.name).to.equal("John Doe");
361
+ expect(res.body.data.repo).to.equal(100);
362
+
363
+ done();
364
+ })
365
+ })
366
+ })
367
+ })
368
+ })
369
+
370
+ it('insert-row-into-table-and-rename-column', (done) => {
371
+
372
+ let email = "test-signup-" + Date.now() + "@email.com";
373
+ let pwd = "pwd";
374
+
375
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(savedUser => {
376
+ projectService.create("test-create-table-with-schema", savedUser._id).then(savedProject => {
377
+ chai.request(server)
378
+ .post('/' + savedProject._id + '/tables')
379
+ .auth(email, pwd)
380
+ .send({ name: "users", schema: [{ name: "name", type: "string" }, { name: "repo", type: "number" }] })
381
+ .end((err, res) => {
382
+
383
+ if (err) { console.error("err: ", err); }
384
+ if (log) { console.log("res.body: ", res.body); }
385
+
386
+ res.should.have.status(200);
387
+ res.body.should.be.a('object');
388
+
389
+ const id_table = res.body._id;
390
+ const table_schema = res.body.schema;
391
+
392
+ let row = {
393
+ name: "John Doe",
394
+ repo: 100
395
+ }
396
+ chai.request(server)
397
+ .post('/' + savedProject._id + '/tables/' + id_table + '/row/insert')
398
+ .auth(email, pwd)
399
+ .send({ data: row })
400
+ .end((err, res) => {
401
+
402
+ if (err) { console.error("err: ", err); }
403
+ if (log) { console.log("res.body: ", res.body); }
404
+
405
+ res.should.have.status(200);
406
+ res.body.should.be.a('object');
407
+ res.body.data.should.be.a('object');
408
+ expect(res.body.data.name).to.equal("John Doe");
409
+ expect(res.body.data.repo).to.equal(100);
410
+
411
+ table_schema[1].name = "repo_renamed";
412
+
413
+ chai.request(server)
414
+ .put('/' + savedProject._id + '/tables/' + id_table)
415
+ .auth(email, pwd)
416
+ .send({ schema: table_schema })
417
+ .end((err, res) => {
418
+
419
+ if (err) { console.error("err: ", err); }
420
+ if (log) { console.log("res.body: ", res.body); }
421
+
422
+ res.should.have.status(200);
423
+ res.body.should.be.a('object');
424
+
425
+ chai.request(server)
426
+ .get('/' + savedProject._id + '/tables/' + id_table)
427
+ .auth(email, pwd)
428
+ .end((err, res) => {
429
+ if (err) { console.error("err: ", err); }
430
+ if (log) { console.log("res.body: ", res.body); }
431
+
432
+ res.should.have.status(200);
433
+
434
+ done();
435
+ })
436
+ })
437
+ })
438
+ })
439
+ })
440
+ })
441
+ }).timeout(5000);
442
+
443
+ it('list-rows', (done) => {
444
+
445
+ let email = "test-signup-" + Date.now() + "@email.com";
446
+ let pwd = "pwd";
447
+
448
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(savedUser => {
449
+ projectService.create("test-create-table-with-schema", savedUser._id).then(savedProject => {
450
+
451
+ chai.request(server)
452
+ .post('/' + savedProject._id + '/tables')
453
+ .auth(email, pwd)
454
+ .send({ name: "users", schema: [{ name: "name", type: "string" }, { name: "repo", type: "number" }] })
455
+ .end((err, res) => {
456
+
457
+ if (err) { console.error("err: ", err); }
458
+ if (log) { console.log("res.body: ", res.body); }
459
+
460
+ res.should.have.status(200);
461
+ res.body.should.be.a('object');
462
+
463
+ const id_table = res.body._id;
464
+
465
+ let row = {
466
+ name: "John Doe",
467
+ repo: 100
468
+ }
469
+ chai.request(server)
470
+ .post('/' + savedProject._id + '/tables/' + id_table + '/row/insert')
471
+ .auth(email, pwd)
472
+ .send({ data: row })
473
+ .end((err, res) => {
474
+
475
+ if (err) { console.error("err: ", err); }
476
+ if (log) { console.log("res.body: ", res.body); }
477
+
478
+ res.should.have.status(200);
479
+ res.body.should.be.a('object');
480
+ res.body.data.should.be.a('object');
481
+ expect(res.body.data.name).to.equal("John Doe");
482
+ expect(res.body.data.repo).to.equal(100);
483
+
484
+ let row = {
485
+ name: "Jane Baker",
486
+ repo: 43
487
+ }
488
+
489
+ chai.request(server)
490
+ .post('/' + savedProject._id + '/tables/' + id_table + '/row/insert')
491
+ .auth(email, pwd)
492
+ .send({ data: row })
493
+ .end((err, res) => {
494
+
495
+ if (err) { console.error("err: ", err); }
496
+ if (log) { console.log("res.body: ", res.body); }
497
+
498
+ res.should.have.status(200);
499
+ res.body.should.be.a('object');
500
+ res.body.data.should.be.a('object');
501
+ expect(res.body.data.name).to.equal("Jane Baker");
502
+ expect(res.body.data.repo).to.equal(43);
503
+
504
+ chai.request(server)
505
+ .get('/' + savedProject._id + '/tables/' + id_table)
506
+ .auth(email, pwd)
507
+ .end((err, res) => {
508
+
509
+ if (err) { console.error("err: ", err); }
510
+ if (log) { console.log("res.body: ", res.body); }
511
+
512
+ res.should.have.status(200);
513
+ res.body.should.be.a('object');
514
+ res.body.rows.should.be.an('array').that.is.lengthOf(2);
515
+ expect(res.body.rows[0].name).to.equal("John Doe");
516
+ expect(res.body.rows[0].repo).to.equal(100);
517
+ expect(res.body.rows[1].name).to.equal("Jane Baker");
518
+ expect(res.body.rows[1].repo).to.equal(43);
519
+
520
+ done();
521
+ })
522
+ })
523
+
524
+ })
525
+ })
526
+ })
527
+ })
528
+ }).timeout(5000);
529
+
530
+ it('update-row-by-id-row', (done) => {
531
+
532
+ let email = "test-signup-" + Date.now() + "@email.com";
533
+ let pwd = "pwd";
534
+
535
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(savedUser => {
536
+ projectService.create("test-update-id-row", savedUser._id).then(savedProject => {
537
+
538
+ chai.request(server)
539
+ .post('/' + savedProject._id + '/tables')
540
+ .auth(email, pwd)
541
+ .send({ name: "users", schema: [{ name: "name", type: "string" }, { name: "repo", type: "number" }] })
542
+ .end((err, res) => {
543
+
544
+ if (err) { console.error("err: ", err); }
545
+ if (log) { console.log("res.body: ", res.body); }
546
+
547
+ res.should.have.status(200);
548
+ res.body.should.be.a('object');
549
+
550
+ const id_table = res.body._id;
551
+
552
+ chai.request(server)
553
+ .post('/' + savedProject._id + '/tables/' + id_table + '/row/insert')
554
+ .auth(email, pwd)
555
+ .send({ data: { name: "John Doe", repo: 100 } })
556
+ .end((err, res) => {
557
+
558
+ if (err) { console.error("err: ", err); }
559
+ if (log) { console.log(" 111 res.body: ", res.body); }
560
+
561
+ res.should.have.status(200);
562
+ res.body.should.be.a('object');
563
+
564
+ const id_row = res.body._id;
565
+
566
+ chai.request(server)
567
+ .put('/' + savedProject._id + '/tables/' + id_table + '/row/update')
568
+ .auth(email, pwd)
569
+ .send({ id_row: id_row, data: { repo: 200 } })
570
+ .end((err, res) => {
571
+
572
+ if (err) { console.error("err: ", err); }
573
+ if (log) { console.log("*** res.body: ", res.body); }
574
+
575
+ res.should.have.status(200);
576
+ expect(res.body.data.name).to.equal("John Doe");
577
+ expect(res.body.data.repo).to.equal(200);
578
+
579
+ done();
580
+ });
581
+ });
582
+ });
583
+ });
584
+ });
585
+ }).timeout(5000);
586
+
587
+ it('update-row-by-conditions', (done) => {
588
+
589
+ let email = "test-signup-" + Date.now() + "@email.com";
590
+ let pwd = "pwd";
591
+
592
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(savedUser => {
593
+ projectService.create("test-update-conditions", savedUser._id).then(savedProject => {
594
+
595
+ chai.request(server)
596
+ .post('/' + savedProject._id + '/tables')
597
+ .auth(email, pwd)
598
+ .send({ name: "users", schema: [{ name: "name", type: "string" }, { name: "repo", type: "number" }] })
599
+ .end((err, res) => {
600
+
601
+ if (err) { console.error("err: ", err); }
602
+ if (log) { console.log("res.body: ", res.body); }
603
+
604
+ res.should.have.status(200);
605
+ res.body.should.be.a('object');
606
+
607
+ const id_table = res.body._id;
608
+
609
+ chai.request(server)
610
+ .post('/' + savedProject._id + '/tables/' + id_table + '/row/insert')
611
+ .auth(email, pwd)
612
+ .send({ data: { name: "Jane Baker", repo: 43 } })
613
+ .end((err, res) => {
614
+
615
+ if (err) { console.error("err: ", err); }
616
+ if (log) { console.log("res.body: ", res.body); }
617
+
618
+ res.should.have.status(200);
619
+ res.body.should.be.a('object');
620
+
621
+ chai.request(server)
622
+ .put('/' + savedProject._id + '/tables/' + id_table + '/row/update')
623
+ .auth(email, pwd)
624
+ .send({
625
+ must_match: 'all',
626
+ conditions: [{ column: 'name', operator: 'equal', value: 'Jane Baker' }],
627
+ data: { repo: 99 },
628
+ })
629
+ .end((err, res) => {
630
+
631
+ if (err) { console.error("err: ", err); }
632
+ if (log) { console.log("res.body: ", res.body); }
633
+
634
+ res.should.have.status(200);
635
+ expect(res.body).to.be.an('array').that.has.lengthOf(1);
636
+ expect(res.body[0].data.repo).to.equal(99);
637
+ done();
638
+ });
639
+ });
640
+ });
641
+ });
642
+ });
643
+ }).timeout(5000);
644
+
645
+ it('delete-row-by-conditions', (done) => {
646
+
647
+ let email = "test-signup-" + Date.now() + "@email.com";
648
+ let pwd = "pwd";
649
+
650
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(savedUser => {
651
+ projectService.create("test-delete-conditions", savedUser._id).then(savedProject => {
652
+
653
+ chai.request(server)
654
+ .post('/' + savedProject._id + '/tables')
655
+ .auth(email, pwd)
656
+ .send({ name: "users", schema: [{ name: "name", type: "string" }] })
657
+ .end((err, res) => {
658
+
659
+ if (err) { console.error("err: ", err); }
660
+ if (log) { console.log("res.body: ", res.body); }
661
+
662
+ res.should.have.status(200);
663
+ res.body.should.be.a('object');
664
+
665
+ const id_table = res.body._id;
666
+
667
+ chai.request(server)
668
+ .post('/' + savedProject._id + '/tables/' + id_table + '/row/insert')
669
+ .auth(email, pwd)
670
+ .send({ data: { name: "To Delete" } })
671
+ .end((err, res) => {
672
+
673
+ if (err) { console.error("err: ", err); }
674
+ if (log) { console.log("res.body: ", res.body); }
675
+
676
+ res.should.have.status(200);
677
+ res.body.should.be.a('object');
678
+
679
+ chai.request(server)
680
+ .put('/' + savedProject._id + '/tables/' + id_table + '/row/delete')
681
+ .auth(email, pwd)
682
+ .send({
683
+ must_match: 'all',
684
+ conditions: [{ column: 'name', operator: 'equal', value: 'To Delete' }],
685
+ })
686
+ .end((err, res) => {
687
+
688
+ if (err) { console.error("err: ", err); }
689
+ if (log) { console.log("res.body: ", res.body); }
690
+
691
+ res.should.have.status(200);
692
+ expect(res.body).to.be.an('array').that.has.lengthOf(1);
693
+ expect(res.body[0].data.name).to.equal("To Delete");
694
+
695
+ chai.request(server)
696
+ .get('/' + savedProject._id + '/tables/' + id_table + '/rows/list')
697
+ .auth(email, pwd)
698
+ .end((err, res) => {
699
+
700
+ if (err) { console.error("err: ", err); }
701
+ if (log) { console.log("res.body: ", res.body); }
702
+
703
+ res.should.have.status(200);
704
+ res.body.should.be.a('array');
705
+ expect(res.body.length).to.equal(0);
706
+
707
+ done();
708
+ });
709
+ });
710
+ });
711
+ });
712
+ });
713
+ });
714
+ }).timeout(5000);
715
+
716
+ it('delete-row-by-conditions-any', (done) => {
717
+
718
+ let email = "test-signup-" + Date.now() + "@email.com";
719
+ let pwd = "pwd";
720
+
721
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(savedUser => {
722
+ projectService.create("test-delete-multi-any", savedUser._id).then(savedProject => {
723
+
724
+ chai.request(server)
725
+ .post('/' + savedProject._id + '/tables')
726
+ .auth(email, pwd)
727
+ .send({ name: "users", schema: [{ name: "name", type: "string" }, { name: "country", type: "string" }] })
728
+ .end((err, res) => {
729
+
730
+ if (err) { console.error("err: ", err); }
731
+
732
+ res.should.have.status(200);
733
+ const id_table = res.body._id;
734
+
735
+ const inserts = [
736
+ { data: { name: "Alice", country: "IT" } },
737
+ { data: { name: "Bob", country: "US" } },
738
+ { data: { name: "Charlie", country: "IT" } },
739
+ ];
740
+
741
+ let pending = inserts.length;
742
+ inserts.forEach(function (payload) {
743
+ chai.request(server)
744
+ .post('/' + savedProject._id + '/tables/' + id_table + '/row/insert')
745
+ .auth(email, pwd)
746
+ .send(payload)
747
+ .end(function () {
748
+ pending -= 1;
749
+ if (pending > 0) return;
750
+
751
+ chai.request(server)
752
+ .put('/' + savedProject._id + '/tables/' + id_table + '/row/delete')
753
+ .auth(email, pwd)
754
+ .send({
755
+ must_match: 'any',
756
+ conditions: [
757
+ { column: 'country', operator: 'equal', value: 'IT' },
758
+ { column: 'name', operator: 'equal', value: 'Bob' },
759
+ ],
760
+ })
761
+ .end((err, res) => {
762
+
763
+ if (err) { console.error("err: ", err); }
764
+
765
+ res.should.have.status(200);
766
+ expect(res.body).to.be.an('array').that.has.lengthOf(3);
767
+
768
+ chai.request(server)
769
+ .get('/' + savedProject._id + '/tables/' + id_table + '/rows/list')
770
+ .auth(email, pwd)
771
+ .end((err, res) => {
772
+
773
+ if (err) { console.error("err: ", err); }
774
+
775
+ res.should.have.status(200);
776
+ expect(res.body).to.be.an('array').that.has.lengthOf(0);
777
+ done();
778
+ });
779
+ });
780
+ });
781
+ });
782
+ });
783
+ });
784
+ });
785
+ }).timeout(5000);
786
+
787
+ it('upsert-row-by-conditions-rejects-multiple-matches', (done) => {
788
+
789
+ let email = "test-signup-" + Date.now() + "@email.com";
790
+ let pwd = "pwd";
791
+
792
+ userService.signup(email, pwd, "Test Firstname", "Test lastname").then(savedUser => {
793
+ projectService.create("test-upsert-409", savedUser._id).then(savedProject => {
794
+
795
+ chai.request(server)
796
+ .post('/' + savedProject._id + '/tables')
797
+ .auth(email, pwd)
798
+ .send({ name: "users", schema: [{ name: "country", type: "string" }, { name: "status", type: "string" }] })
799
+ .end((err, res) => {
800
+
801
+ if (err) { console.error("err: ", err); }
802
+
803
+ res.should.have.status(200);
804
+ const id_table = res.body._id;
805
+
806
+ const inserts = [
807
+ { data: { country: "IT", status: "old" } },
808
+ { data: { country: "IT", status: "old" } },
809
+ ];
810
+
811
+ let pending = inserts.length;
812
+ inserts.forEach(function (payload) {
813
+ chai.request(server)
814
+ .post('/' + savedProject._id + '/tables/' + id_table + '/row/insert')
815
+ .auth(email, pwd)
816
+ .send(payload)
817
+ .end(function () {
818
+ pending -= 1;
819
+ if (pending > 0) return;
820
+
821
+ chai.request(server)
822
+ .put('/' + savedProject._id + '/tables/' + id_table + '/row/upsert')
823
+ .auth(email, pwd)
824
+ .send({
825
+ must_match: 'all',
826
+ conditions: [{ column: 'country', operator: 'equal', value: 'IT' }],
827
+ data: { status: 'active' },
828
+ })
829
+ .end((err, res) => {
830
+
831
+ if (err) { console.error("err: ", err); }
832
+
833
+ res.should.have.status(409);
834
+ expect(res.body.message).to.equal('Multiple rows match the conditions');
835
+ done();
836
+ });
837
+ });
838
+ });
839
+ });
840
+ });
841
+ });
842
+ }).timeout(5000);
843
+
844
+ })