-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathtest.js
More file actions
95 lines (88 loc) · 2.44 KB
/
test.js
File metadata and controls
95 lines (88 loc) · 2.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
'use strict'
var assert = require('assert')
var gcloud = require('gcloud')
var schema = require('./')
describe('gcloud-datastore-schema', function () {
it('should catch errors from the readme', function (done) {
var datastore = schema(gcloud.datastore({ projectId: 'project-id' }))
datastore.register('Person', {
name: String,
age: Number,
tools: Array,
favoriteNumbers: [Number],
isPremiumUser: Boolean,
gpa: gcloud.datastore.double,
address: {
streetNumber: Number,
streetName: String,
zip: {
firstPart: Number,
secondPart: Number
}
},
phoneNumbers: [
{
metadata: {
type: String,
availability: [
String
]
},
number: String
}
],
fullName: function (input) {
return input.split(' ').length > 1
}
})
datastore.save({
key: datastore.key('Person'),
data: {
name: 'Doc',
age: 8,
tools: ['Stethoscope', 'Positive attitude'],
favoriteNumbers: [16, 91],
gpa: gcloud.datastore.int(4.0),
address: {
streetNumber: 123,
streetName: 'Main',
zip: {
firstPart: 12345,
secondPart: 4444
}
},
phoneNumbers: [
{
number: '555-1212',
metadata: {
availability: [
'9-5',
95
]
}
}
],
fullName: 'Doc',
extraData: true,
extraExtraData: false
}
}, function (err) {
assert.strictEqual(err.code, 'ESCHEMAVIOLATION')
assert.strictEqual(err.message, 'Schema validation failed')
assert.deepEqual(err.errors, [
{
kind: 'Person',
errors: [
'Schema definition expected property: "isPremiumUser"',
'Schema definition violated for property: "gpa". Expected type: Double, received: Int',
'Schema definition expected property: "phoneNumbers[].metadata.type"',
'Schema definition violated for property: "phoneNumbers[].metadata.availability[].availability". Expected type: String, received: 95',
'Schema definition violated for property: "fullName"',
'Unexpected properties found: "extraData", "extraExtraData"'
]
}
])
done()
})
})
})