monastery 1.28.4 → 1.30.1

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.
package/test/validate.js CHANGED
@@ -19,7 +19,7 @@ module.exports = function(monastery, opendb) {
19
19
  detail: 'This field is required.',
20
20
  meta: { rule: 'required', model: 'user', field: 'name' }
21
21
  })
22
- await expect(user.validate({ name : '' }, { ignoreUndefined: true })).rejects.toContainEqual({
22
+ await expect(user.validate({ name : '' }, { validateUndefined: false })).rejects.toContainEqual({
23
23
  status: '400',
24
24
  title: 'name',
25
25
  detail: 'This field is required.',
@@ -27,8 +27,8 @@ module.exports = function(monastery, opendb) {
27
27
  })
28
28
 
29
29
  // Required error (insert, and with ignoreRequired)
30
- await expect(user.validate({}, { ignoreUndefined: true })).resolves.toEqual({})
31
- await expect(user.validate({}, { ignoreUndefined: true, update: true })).resolves.toEqual({})
30
+ await expect(user.validate({}, { validateUndefined: false })).resolves.toEqual({})
31
+ await expect(user.validate({}, { validateUndefined: false, update: true })).resolves.toEqual({})
32
32
 
33
33
  // No required error (update)
34
34
  await expect(user.validate({}, { update: true })).resolves.toEqual({})
@@ -87,77 +87,121 @@ module.exports = function(monastery, opendb) {
87
87
  let db = (await opendb(false)).db
88
88
  let user = db.model('user', { fields: {
89
89
  animals: {
90
- cat: { type: 'string', required: true },
90
+ cat: { type: 'string', required: true }, // {} = required on insert
91
91
  dog: {
92
92
  name: { type: 'string' },
93
- color: { type: 'string', required: true }
93
+ color: { type: 'string', required: true } // {} = required on insert
94
94
  }
95
95
  }
96
96
  }})
97
97
 
98
- // Invalid subdocument type
99
- await expect(user.validate({ animals: { dog: 1 }})).rejects.toContainEqual({
100
- status: '400',
101
- title: 'animals.dog',
102
- detail: 'Value was not an object.',
103
- meta: { rule: 'isObject', model: 'user', field: 'dog' }
104
- })
98
+ // Insert: Required subdocument properties
99
+ await expect(user.validate({})).rejects.toEqual(
100
+ expect.arrayContaining([
101
+ expect.objectContaining({
102
+ status: '400',
103
+ title: 'animals.cat',
104
+ detail: 'This field is required.',
105
+ meta: { rule: 'required', model: 'user', field: 'cat' }
106
+ }),
107
+ expect.objectContaining({
108
+ status: '400',
109
+ title: 'animals.dog.color',
110
+ detail: 'This field is required.',
111
+ meta: { rule: 'required', model: 'user', field: 'color' }
112
+ }),
113
+ ])
114
+ )
105
115
 
106
- // Required subdocument property (required on insert)
107
- await expect(user.validate({})).rejects.toContainEqual({
108
- status: '400',
109
- title: 'animals.cat',
110
- detail: 'This field is required.',
111
- meta: { rule: 'required', model: 'user', field: 'cat' }
112
- })
116
+ // Insert: Required subdocument properties
117
+ await expect(user.validate({ animals: {} })).rejects.toEqual(
118
+ expect.arrayContaining([
119
+ expect.objectContaining({
120
+ status: '400',
121
+ title: 'animals.cat',
122
+ detail: 'This field is required.',
123
+ meta: { rule: 'required', model: 'user', field: 'cat' }
124
+ }),
125
+ expect.objectContaining({
126
+ status: '400',
127
+ title: 'animals.dog.color',
128
+ detail: 'This field is required.',
129
+ meta: { rule: 'required', model: 'user', field: 'color' }
130
+ }),
131
+ ])
132
+ )
113
133
 
114
- // Required subdocument property (required on insert)
115
- await expect(user.validate({})).rejects.toContainEqual({
116
- status: '400',
117
- title: 'animals.dog.color',
118
- detail: 'This field is required.',
119
- meta: { rule: 'required', model: 'user', field: 'color' }
120
- })
134
+ // Insert: Invalid subdocument type
135
+ await expect(user.validate({ animals: { dog: 1 }})).rejects.toEqual(
136
+ expect.arrayContaining([
137
+ expect.objectContaining({
138
+ status: '400',
139
+ title: 'animals.cat',
140
+ detail: 'This field is required.',
141
+ meta: { rule: 'required', model: 'user', field: 'cat' }
142
+ }),
143
+ expect.objectContaining({
144
+ status: '400',
145
+ title: 'animals.dog',
146
+ detail: 'Value was not an object.',
147
+ meta: { rule: 'isObject', model: 'user', field: 'dog' }
148
+ }),
149
+ ])
150
+ )
121
151
 
122
- // Required subdocument property (required on update when a parent is specified)
123
- await expect(user.validate({ animals: {} }, { update: true })).rejects.toContainEqual({
124
- status: '400',
125
- title: 'animals.cat',
126
- detail: 'This field is required.',
127
- meta: { rule: 'required', model: 'user', field: 'cat' }
152
+ // Insert: Ignore required subdocument property with a defined parent
153
+ await expect(user.validate({ animals: {} }, { validateUndefined: false })).resolves.toEqual({
154
+ animals: {}
128
155
  })
129
156
 
130
- // Required subdocument property (required on update when a parent is specified)
131
- await expect(user.validate({ animals: { dog: {}} }, { update: true })).rejects.toContainEqual({
132
- status: '400',
133
- title: 'animals.dog.color',
134
- detail: 'This field is required.',
135
- meta: { rule: 'required', model: 'user', field: 'color' }
136
- })
157
+ // Update: Required subdocument property when a parent/grandparent is specified
158
+ await expect(user.validate({ animals: {} }, { update: true })).rejects.toEqual(
159
+ expect.arrayContaining([
160
+ expect.objectContaining({
161
+ status: '400',
162
+ title: 'animals.cat',
163
+ detail: 'This field is required.',
164
+ meta: { rule: 'required', model: 'user', field: 'cat' }
165
+ }),
166
+ expect.objectContaining({
167
+ status: '400',
168
+ title: 'animals.dog.color',
169
+ detail: 'This field is required.',
170
+ meta: { rule: 'required', model: 'user', field: 'color' }
171
+ }),
172
+ ])
173
+ )
137
174
 
138
- // Required subdocument property (required on update when a grand-parent is specified)
139
- await expect(user.validate({ animals: {} }, { update: true })).rejects.toContainEqual({
140
- status: '400',
141
- title: 'animals.dog.color',
142
- detail: 'This field is required.',
143
- meta: { rule: 'required', model: 'user', field: 'color' }
144
- })
175
+ // Update: Required subdocument property when a parent is specified
176
+ await expect(user.validate({ animals: { dog: {}} }, { update: true })).rejects.toEqual(
177
+ expect.arrayContaining([
178
+ expect.objectContaining({
179
+ status: '400',
180
+ title: 'animals.cat',
181
+ detail: 'This field is required.',
182
+ meta: { rule: 'required', model: 'user', field: 'cat' }
183
+ }),
184
+ expect.objectContaining({
185
+ status: '400',
186
+ title: 'animals.dog.color',
187
+ detail: 'This field is required.',
188
+ meta: { rule: 'required', model: 'user', field: 'color' }
189
+ }),
190
+ ])
191
+ )
145
192
 
146
- // Ignore required subdocument property (not required on update)
193
+ // Update: Ignore required subdocument property when root parent is undefined
147
194
  await expect(user.validate({}, { update: true })).resolves.toEqual({})
148
195
 
149
- // Ignore required subdocument property with a defined parent (update) (not required if ignoreUndefined set)
150
- await expect(user.validate({ animals: {} }, { ignoreUndefined: true })).resolves.toEqual({
151
- animals: {}
152
- })
153
196
 
154
- // Ignore required subdocument property with a defined parent (not required if ignoreUndefined set)
155
- await expect(user.validate({ animals: {} }, { update: true, ignoreUndefined: true })).resolves.toEqual({
197
+ // Update: Ignore required subdocument property with a defined parent when validateUndefined = false
198
+ await expect(user.validate({ animals: {} }, { update: true, validateUndefined: false })).resolves.toEqual({
156
199
  animals: {}
157
200
  })
158
201
 
159
- // Required subdocument property (defined with ignoreUndefined)
160
- await expect(user.validate({ animals: { cat: '' }}, { update: true, ignoreUndefined: true })).rejects.toContainEqual({
202
+ // Update: Required defined subdocument property when validateUndefined = false
203
+ await expect(user.validate({ animals: { cat: '' }}, { update: true, validateUndefined: false }))
204
+ .rejects.toContainEqual({
161
205
  status: '400',
162
206
  title: 'animals.cat',
163
207
  detail: 'This field is required.',
@@ -214,17 +258,17 @@ module.exports = function(monastery, opendb) {
214
258
  await expect(user.validate({ animals: { dogs: [] }}))
215
259
  .resolves.toEqual({ animals: { dogs: [] }})
216
260
 
217
- // No undefined item errors with ignoreUndefined
261
+ // No undefined item errors with validateUndefined=false
218
262
  await expect(user.validate(
219
263
  { animals: { dogs: [{ name: 'sparky' }] }},
220
- { update: true, ignoreUndefined: true }
264
+ { update: true, validateUndefined: false }
221
265
  ))
222
266
  .resolves.toEqual({ animals: { dogs: [{ name: 'sparky' }] }})
223
267
 
224
- // Requried error within an array subdocument (even during update when parent defined && ignoreUndefined = true)
268
+ // Requried error within an array subdocument (even during update when parent defined && validateUndefined = false)
225
269
  await expect(user.validate(
226
270
  { animals: { dogs: [{ name: 'sparky', color: '' }] }},
227
- { update: true, ignoreUndefined: true }
271
+ { update: true, validateUndefined: false }
228
272
  ))
229
273
  .rejects.toContainEqual(error)
230
274
  })
@@ -233,7 +277,6 @@ module.exports = function(monastery, opendb) {
233
277
  let fn = validate._getMostSpecificKeyMatchingPath
234
278
  let mock = {
235
279
  'cats.name': true,
236
- 'cats.name': true,
237
280
 
238
281
  'dogs.name': true,
239
282
  'dogs.$.name': true,
@@ -318,7 +361,7 @@ module.exports = function(monastery, opendb) {
318
361
  // Setup
319
362
  // Todo: Setup testing for array array subdocument field messages
320
363
  let db = (await opendb(false)).db
321
- let arrayWithSchema = (array, schema) => { array.schema = schema; return array }
364
+ // let arrayWithSchema = (array, schema) => { array.schema = schema; return array }
322
365
  let user = db.model('user', {
323
366
  fields: {
324
367
  name: { type: 'string', minLength: 4 },
@@ -415,14 +458,16 @@ module.exports = function(monastery, opendb) {
415
458
  meta: { rule: 'minLength', model: 'user', field: 'name' }
416
459
  })
417
460
  // array-subdocument-1-field error
418
- await expect(user.validate({ catNames: [{ name: 'carla' }, { name: 'ben' }] })).rejects.toContainEqual({
461
+ await expect(user.validate({ catNames: [{ name: 'carla' }, { name: 'ben' }] }))
462
+ .rejects.toContainEqual({
419
463
  status: '400',
420
464
  title: 'catNames.1.name',
421
465
  detail: 'min length error (1)',
422
466
  meta: { rule: 'minLength', model: 'user', field: 'name' }
423
467
  })
424
468
  // array-subdocument-2-field error
425
- await expect(user.validate({ catNames: [{ name: 'carla' }, { name: 'carla' }, { name: 'ben' }] })).rejects.toContainEqual({
469
+ await expect(user.validate({ catNames: [{ name: 'carla' }, { name: 'carla' }, { name: 'ben' }] }))
470
+ .rejects.toContainEqual({
426
471
  status: '400',
427
472
  title: 'catNames.2.name',
428
473
  detail: 'min length error (2)',
@@ -431,28 +476,32 @@ module.exports = function(monastery, opendb) {
431
476
 
432
477
 
433
478
  // array-subdocument-field error (loose $ match)
434
- await expect(user.validate({ pigNames: [[{ name: 'ben' }]] })).rejects.toContainEqual({
479
+ await expect(user.validate({ pigNames: [[{ name: 'ben' }]] }))
480
+ .rejects.toContainEqual({
435
481
  status: '400',
436
482
  title: 'pigNames.0.0.name',
437
483
  detail: 'min length error ($)',
438
484
  meta: { rule: 'minLength', model: 'user', field: 'name' }
439
485
  })
440
486
  // array-subdocument-1-field error
441
- await expect(user.validate({ pigNames: [[{ name: 'carla' }, { name: 'ben' }]] })).rejects.toContainEqual({
487
+ await expect(user.validate({ pigNames: [[{ name: 'carla' }, { name: 'ben' }]] }))
488
+ .rejects.toContainEqual({
442
489
  status: '400',
443
490
  title: 'pigNames.0.1.name',
444
491
  detail: 'min length error (1)',
445
492
  meta: { rule: 'minLength', model: 'user', field: 'name' }
446
493
  })
447
494
  // array-subdocument-0-2-field error
448
- await expect(user.validate({ pigNames: [[{ name: 'carla' }, { name: 'carla' }, { name: 'ben' }]] })).rejects.toContainEqual({
495
+ await expect(user.validate({ pigNames: [[{ name: 'carla' }, { name: 'carla' }, { name: 'ben' }]] }))
496
+ .rejects.toContainEqual({
449
497
  status: '400',
450
498
  title: 'pigNames.0.2.name',
451
499
  detail: 'min length error (deep 0 2)',
452
500
  meta: { rule: 'minLength', model: 'user', field: 'name' }
453
501
  })
454
502
  // array-subdocument-2-0-field error (fallback)
455
- await expect(user.validate({ pigNames: [[],[],[{ name: 'carla' },{ name: 'carla' },{ name: 'ben' }]] })).rejects.toContainEqual({
503
+ await expect(user.validate({ pigNames: [[],[],[{ name: 'carla' },{ name: 'carla' },{ name: 'ben' }]] }))
504
+ .rejects.toContainEqual({
456
505
  status: '400',
457
506
  title: 'pigNames.2.2.name',
458
507
  detail: 'min length error (deep $ 2)',
@@ -475,7 +524,7 @@ module.exports = function(monastery, opendb) {
475
524
  name: { type: 'string', bigName: 8 },
476
525
  animals: [{
477
526
  name: { type: 'string', bigName: 8 }
478
- }]
527
+ }],
479
528
  },
480
529
  rules: {
481
530
  bigName: function(value, ruleArg) {
@@ -483,6 +532,21 @@ module.exports = function(monastery, opendb) {
483
532
  }
484
533
  }
485
534
  })
535
+ let user2 = db.model('user2', {
536
+ fields: {
537
+ name: { type: 'string' },
538
+ nickname: { type: 'string', requiredIfNoName: true },
539
+ age: { type: 'number', required: true },
540
+ },
541
+ rules: {
542
+ requiredIfNoName: {
543
+ validateUndefined: true,
544
+ fn: function(value, ruleArg) {
545
+ return value || this.name
546
+ }
547
+ }
548
+ }
549
+ })
486
550
 
487
551
  // Basic field
488
552
  await expect(user.validate({ name: 'benjamin' })).resolves.toEqual({ name: 'benjamin' })
@@ -494,13 +558,48 @@ module.exports = function(monastery, opendb) {
494
558
  })
495
559
 
496
560
  // subdocument in an array
497
- await expect(user.validate({ animals: [{ name: 'benjamin' }] })).resolves.toEqual({ animals: [{ name: 'benjamin' }] })
561
+ await expect(user.validate({ animals: [{ name: 'benjamin' }] })).resolves.toEqual({
562
+ animals: [{ name: 'benjamin' }]
563
+ })
498
564
  await expect(user.validate({ animals: [{ name: 'ben' }] })).rejects.toContainEqual({
499
565
  status: '400',
500
566
  title: 'animals.0.name',
501
567
  detail: 'Invalid data property for rule "bigName".',
502
568
  meta: { rule: 'bigName', model: 'user', field: 'name' }
503
569
  })
570
+
571
+ // Required rule based off another field (create)
572
+ await expect(user2.validate({ name: 'benjamin', age: 12 })).resolves.toEqual({
573
+ name: 'benjamin',
574
+ age: 12
575
+ })
576
+ await expect(user2.validate({ nickname: 'benny', age: 12 })).resolves.toEqual({
577
+ nickname: 'benny',
578
+ age: 12
579
+ })
580
+ await expect(user2.validate({ })).rejects.toEqual([
581
+ {
582
+ 'detail': 'Invalid data property for rule "requiredIfNoName".',
583
+ 'meta': { 'field': 'nickname', 'model': 'user2', 'rule': 'requiredIfNoName'},
584
+ 'status': '400',
585
+ 'title': 'nickname'
586
+ }, {
587
+ 'detail': 'This field is required.',
588
+ 'meta': { 'field': 'age', 'model': 'user2', 'rule': 'required'},
589
+ 'status': '400',
590
+ 'title': 'age'
591
+ }
592
+ ])
593
+ await expect(user2.validate({ }, { validateUndefined: false })).resolves.toEqual({})
594
+
595
+ // Required rule based off another field (update)
596
+ await expect(user2.validate({ }, { update: true })).resolves.toEqual({})
597
+ await expect(user2.validate({ nickname: '' }, { update: true })).rejects.toEqual([{
598
+ 'detail': 'Invalid data property for rule "requiredIfNoName".',
599
+ 'meta': { 'field': 'nickname', 'model': 'user2', 'rule': 'requiredIfNoName'},
600
+ 'status': '400',
601
+ 'title': 'nickname'
602
+ }])
504
603
  })
505
604
 
506
605
  test('Validated data', async () => {
@@ -524,8 +623,13 @@ module.exports = function(monastery, opendb) {
524
623
  // Ignores invalid data
525
624
  await expect(user.validate({ badprop: true, schema: {} })).resolves.toEqual({})
526
625
 
527
- // Allows null data
528
- await expect(user.validate({ name: null })).resolves.toEqual({ name: null })
626
+ // Rejects null for non object/array fields
627
+ await expect(user.validate({ name: null })).rejects.toEqual([{
628
+ 'detail': 'Value was not a string.',
629
+ 'meta': {'detailLong': undefined, 'field': 'name', 'model': 'user', 'rule': 'isString'},
630
+ 'status':'400',
631
+ 'title': 'name'
632
+ }])
529
633
 
530
634
  // String data
531
635
  await expect(user.validate({ name: 'Martin Luther' })).resolves.toEqual({ name: 'Martin Luther' })
@@ -548,9 +652,14 @@ module.exports = function(monastery, opendb) {
548
652
 
549
653
  // Subdocument property data (null)
550
654
  await expect(user.validate({ animals: { dog: null }}))
551
- .resolves.toEqual({ animals: { dog: null }})
552
-
553
- // Subdocument property data (bad data)
655
+ .rejects.toEqual([{
656
+ 'detail': 'Value was not a string.',
657
+ 'meta': {'detailLong': undefined, 'field': 'dog', 'model': 'user', 'rule': 'isString'},
658
+ 'status': '400',
659
+ 'title': 'animals.dog',
660
+ }])
661
+
662
+ // Subdocument property data (unknown data)
554
663
  await expect(user.validate({ animals: { dog: 'sparky', cat: 'grumpy' } }))
555
664
  .resolves.toEqual({ animals: { dog: 'sparky' } })
556
665
 
@@ -588,11 +697,11 @@ module.exports = function(monastery, opendb) {
588
697
 
589
698
  // Index, mongodb connection error
590
699
  await expect(user3._setupIndexes({ name: { type: 'string', index: 'text' }})).rejects
591
- .toEqual({ type: "info", detail: "Skipping createIndex on the 'user3' model, no mongodb connection found." })
700
+ .toEqual({ type: 'info', detail: 'Skipping createIndex on the \'user3\' model, no mongodb connection found.' })
592
701
 
593
702
  // Model id (Monk ObjectId)
594
- let data = await user4.validate({ name: "5d4356299d0f010017602f6b" })
595
- await expect(data.name.toString()).toEqual(db.id("5d4356299d0f010017602f6b").toString())
703
+ let data = await user4.validate({ name: '5d4356299d0f010017602f6b' })
704
+ await expect(data.name.toString()).toEqual(db.id('5d4356299d0f010017602f6b').toString())
596
705
  await expect(data.name).toEqual(expect.any(Object))
597
706
 
598
707
  // Bad model id (Monk ObjectId)
@@ -617,7 +726,6 @@ module.exports = function(monastery, opendb) {
617
726
  amount: { type: 'number', required: true },
618
727
  }})
619
728
 
620
-
621
729
  // MinLength
622
730
  await expect(user.validate({ name: 'Martin Luther' })).resolves.toEqual({name: 'Martin Luther'})
623
731
  await expect(user.validate({ name: 'Carl' })).rejects.toContainEqual({
@@ -661,7 +769,12 @@ module.exports = function(monastery, opendb) {
661
769
  await expect(user2.validate({ amount: 0 })).resolves.toEqual({ amount: 0 }) // required
662
770
  await expect(user.validate({ amount: '0' })).resolves.toEqual({ amount: 0 }) // required
663
771
  await expect(user.validate({ amount: undefined })).resolves.toEqual({}) // not required
664
- await expect(user.validate({ amount: null })).resolves.toEqual({ amount: null }) // not required
772
+ await expect(user.validate({ amount: null })).rejects.toEqual([{ // type error
773
+ 'detail': 'Value was not a number.',
774
+ 'meta': { 'field': 'amount', 'model': 'user', 'rule': 'isNumber'},
775
+ 'status': '400',
776
+ 'title': 'amount'
777
+ }])
665
778
 
666
779
  // Number required
667
780
  let mock1 = {
@@ -686,14 +799,14 @@ module.exports = function(monastery, opendb) {
686
799
  await expect(user.validate({ amount: 'bad' })).rejects.toContainEqual(mock2)
687
800
  })
688
801
 
689
- test('Schema default objects', async (done) => {
802
+ test('Schema default objects', async () => {
690
803
  let db = (await opendb(null, {
691
804
  timestamps: false,
692
805
  defaultObjects: true,
693
806
  serverSelectionTimeoutMS: 2000
694
807
  })).db
695
808
 
696
- let base = { names: [], animals: { dogs: [] }}
809
+ // let base = { names: [], animals: { dogs: [] }}
697
810
  let user = db.model('user', { fields: {
698
811
  name: { type: 'string' },
699
812
  names: [{ type: 'string' }],
@@ -710,10 +823,9 @@ module.exports = function(monastery, opendb) {
710
823
  })
711
824
 
712
825
  db.close()
713
- done()
714
826
  })
715
827
 
716
- test('Schema nullObjects', async (done) => {
828
+ test('Schema nullObjects', async () => {
717
829
  let db = (await opendb(null, {
718
830
  timestamps: false,
719
831
  nullObjects: true,
@@ -728,10 +840,15 @@ module.exports = function(monastery, opendb) {
728
840
  }})
729
841
 
730
842
  // Subdocument data (null/string)
843
+ await expect(user.validate({ animals: 'notAnObject' })).rejects.toEqual([{
844
+ 'detail': 'Value was not an object.',
845
+ 'meta': {'detailLong': undefined, 'field': 'animals', 'model': 'user', 'rule': 'isObject'},
846
+ 'status': '400',
847
+ 'title': 'animals'
848
+ }])
731
849
  await expect(user.validate({ animals: '', names: null })).resolves.toEqual({ animals: null, names: null })
732
850
 
733
851
  db.close()
734
- done()
735
852
  })
736
853
 
737
854
  test('Validation options', async () => {
@@ -788,13 +905,13 @@ module.exports = function(monastery, opendb) {
788
905
  { people2: [{ people3: [{}, {}] }] },
789
906
  { skipValidation: ['people2.$.people3.0.name'] }
790
907
  )).rejects.toContainEqual({
791
- detail: "This field is required.",
792
- status: "400",
793
- title: "people2.0.people3.1.name",
908
+ detail: 'This field is required.',
909
+ status: '400',
910
+ title: 'people2.0.people3.1.name',
794
911
  meta: {
795
- field: "name",
796
- model: "user3",
797
- rule: "required"
912
+ field: 'name',
913
+ model: 'user3',
914
+ rule: 'required'
798
915
  }
799
916
  })
800
917
 
@@ -808,18 +925,18 @@ module.exports = function(monastery, opendb) {
808
925
 
809
926
  // Non existing validation field entries
810
927
  await expect(user3.validate({ people: [{}] }, { skipValidation: ['people.badField'] })).rejects.toContainEqual({
811
- detail: "This field is required.",
812
- status: "400",
813
- title: "people.0.name",
928
+ detail: 'This field is required.',
929
+ status: '400',
930
+ title: 'people.0.name',
814
931
  meta: {
815
- model: "user3",
816
- field: "name",
817
- rule: "required"
932
+ model: 'user3',
933
+ field: 'name',
934
+ rule: 'required'
818
935
  }
819
936
  })
820
937
  })
821
938
 
822
- test('Validation hooks', async (done) => {
939
+ test('Validation hooks', async () => {
823
940
  let db = (await opendb(null)).db
824
941
  let user = db.model('user', {
825
942
  fields: {
@@ -841,16 +958,16 @@ module.exports = function(monastery, opendb) {
841
958
  let userDoc = await user.insert({ data: { first: 'Martin', last: 'Luther' }})
842
959
 
843
960
  // Catch validate (a)synchronous errors thrown in function or through `next(err)`
844
- await expect(user.validate({ first: '' })).rejects.toThrow(`beforeValidate error 1..`)
845
- await expect(user.validate({ first: 'Martin' })).rejects.toThrow(`beforeValidate error 2..`)
961
+ await expect(user.validate({ first: '' })).rejects.toThrow('beforeValidate error 1..')
962
+ await expect(user.validate({ first: 'Martin' })).rejects.toThrow('beforeValidate error 2..')
846
963
  await expect(user.validate({ first: 'Martin', last: 'Luther' })).resolves.toEqual({
847
964
  first: 'Martin',
848
965
  last: 'Luther'
849
966
  })
850
967
 
851
968
  // Catch insert (a)synchronous errors thrown in function or through `next(err)`
852
- await expect(user.insert({ data: { first: '' } })).rejects.toThrow(`beforeValidate error 1..`)
853
- await expect(user.insert({ data: { first: 'Martin' } })).rejects.toThrow(`beforeValidate error 2..`)
969
+ await expect(user.insert({ data: { first: '' } })).rejects.toThrow('beforeValidate error 1..')
970
+ await expect(user.insert({ data: { first: 'Martin' } })).rejects.toThrow('beforeValidate error 2..')
854
971
  await expect(user.insert({ data: { first: 'Martin', last: 'Luther' } })).resolves.toEqual({
855
972
  _id: expect.any(Object),
856
973
  first: 'Martin',
@@ -858,15 +975,17 @@ module.exports = function(monastery, opendb) {
858
975
  })
859
976
 
860
977
  // Catch update (a)synchronous errors thrown in function or through `next(err)`
861
- await expect(user.update({ query: userDoc._id, data: { first: '' } })).rejects.toThrow(`beforeValidate error 1..`)
862
- await expect(user.update({ query: userDoc._id, data: { first: 'Martin' } })).rejects.toThrow(`beforeValidate error 2..`)
863
- await expect(user.update({ query: userDoc._id, data: { first: 'Martin', last: 'Luther' } })).resolves.toEqual({
864
- first: 'Martin',
865
- last: 'Luther'
866
- })
978
+ await expect(user.update({ query: userDoc._id, data: { first: '' } }))
979
+ .rejects.toThrow('beforeValidate error 1..')
980
+ await expect(user.update({ query: userDoc._id, data: { first: 'Martin' } }))
981
+ .rejects.toThrow('beforeValidate error 2..')
982
+ await expect(user.update({ query: userDoc._id, data: { first: 'Martin', last: 'Luther' } }))
983
+ .resolves.toEqual({
984
+ first: 'Martin',
985
+ last: 'Luther'
986
+ })
867
987
 
868
988
  db.close()
869
- done()
870
989
  })
871
990
 
872
991
  }
package/test/virtuals.js CHANGED
@@ -1,6 +1,6 @@
1
1
  module.exports = function(monastery, opendb) {
2
2
 
3
- test('Virtuals', async (done) => {
3
+ test('Virtuals', async () => {
4
4
  // Setup
5
5
  let db = (await opendb(null)).db
6
6
  // Test model setup
@@ -145,10 +145,9 @@ module.exports = function(monastery, opendb) {
145
145
  })
146
146
 
147
147
  db.close()
148
- done()
149
148
  })
150
149
 
151
- test('Insert/update virtuals (validate)', async (done) => {
150
+ test('Insert/update virtuals (validate)', async () => {
152
151
  // Setup
153
152
  let db = (await opendb(null)).db
154
153
  let user = db.model('user', {
@@ -246,7 +245,6 @@ module.exports = function(monastery, opendb) {
246
245
  }
247
246
  })
248
247
  db.close()
249
- done()
250
248
  })
251
249
 
252
250
  }