Skip to content

Commit 96557e6

Browse files
committed
Fix #62: Bugfix for required properties validation
1 parent dc7af18 commit 96557e6

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

src/dataValidation.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ export default function DataValidator(schema) {
184184
next_schema = this.getRef(next_schema.$ref);
185185

186186
if (schema.hasOwnProperty('required') && Array.isArray(schema.required)) {
187-
if (schema.required.indexOf(key) > -1)
187+
if (schema.required.indexOf(key) > -1 && !next_schema.hasOwnProperty('required'))
188188
next_schema['required'] = true;
189189
}
190190

tests/dataValidation.test.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ test('object has all the keys that are in schema', () => {
184184
});
185185

186186
test('object required properties', () => {
187+
// 1.
187188
let schema = {
188189
'type': 'object',
189190
'properties': {'a': {'type': 'string'}},
@@ -194,6 +195,49 @@ test('object required properties', () => {
194195
let validator = new DataValidator(schema);
195196
expect(validator.validate(wrong_data).isValid).toBe(false);
196197
expect(validator.validate(data).isValid).toBe(true);
198+
199+
// 2. Nested
200+
schema = {
201+
'properties': {
202+
'object1': {
203+
'type': 'object',
204+
'properties': {
205+
'prop1':{'type': 'string'}
206+
},
207+
'required':['prop1'],
208+
},
209+
'object2': {
210+
'type': 'object',
211+
'properties': {
212+
'prop3': {
213+
'type': 'string'
214+
},
215+
'object3': {
216+
'type': 'object',
217+
'properties': {
218+
'prop4': {'type': 'string'}
219+
},
220+
'required': ['prop4']
221+
}
222+
},
223+
'required': ['prop3', 'object3']
224+
}
225+
},
226+
'required': ['object1'],
227+
}
228+
229+
let wrong_data_1 = {'object1': {'prop1': ''}, 'object2': {'prop3': '', 'object3': {'prop4': ''}}}
230+
let wrong_data_2 = {'object1': {'prop1': 'x'}, 'object2': {'prop3': '', 'object3': {'prop4': ''}}}
231+
let wrong_data_3 = {'object1': {'prop1': 'x'}, 'object2': {'prop3': 'x', 'object3': {'prop4': ''}}}
232+
let wrong_data_4 = {'object1': {'prop1': ''}, 'object2': {'prop3': 'x', 'object3': {'prop4': 'x'}}}
233+
data = {'object1': {'prop1': 'x'}, 'object2': {'prop3': 'x', 'object3': {'prop4': 'x'}}}
234+
235+
validator = new DataValidator(schema);
236+
expect(validator.validate(wrong_data_1).isValid).toBe(false);
237+
expect(validator.validate(wrong_data_2).isValid).toBe(false);
238+
expect(validator.validate(wrong_data_3).isValid).toBe(false);
239+
expect(validator.validate(wrong_data_4).isValid).toBe(false);
240+
expect(validator.validate(data).isValid).toBe(true);
197241
});
198242

199243
test('additionalProperties type', () => {

0 commit comments

Comments
 (0)