Skip to content

Commit f33aa72

Browse files
Issue #208 making else non mandatory (#210)
* assigns a default value to else * adds test cases
1 parent 2e992e9 commit f33aa72

File tree

2 files changed

+54
-14
lines changed

2 files changed

+54
-14
lines changed

index.js

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -704,7 +704,7 @@ function addIfThenElse (schema, name, externalSchema, fullSchema) {
704704
const copy = merge({}, schema)
705705
const i = copy.if
706706
const then = copy.then
707-
const e = copy.else
707+
const e = copy.else ? copy.else : { additionalProperties: true }
708708
delete copy.if
709709
delete copy.then
710710
delete copy.else
@@ -727,27 +727,25 @@ function addIfThenElse (schema, name, externalSchema, fullSchema) {
727727
code += `
728728
}
729729
`
730-
if (e) {
731-
merged = merge(copy, e)
730+
merged = merge(copy, e)
732731

733-
code += `
732+
code += `
734733
else {
735734
`
736735

737-
if (merged.if && merged.then) {
738-
innerR = addIfThenElse(merged, name + 'Else', externalSchema, fullSchema)
739-
code += innerR.code
740-
laterCode += innerR.laterCode
741-
}
736+
if (merged.if && merged.then) {
737+
innerR = addIfThenElse(merged, name + 'Else', externalSchema, fullSchema)
738+
code += innerR.code
739+
laterCode += innerR.laterCode
740+
}
742741

743-
r = buildInnerObject(merged, name + 'Else', externalSchema, fullSchema)
744-
code += r.code
745-
laterCode += r.laterCode
742+
r = buildInnerObject(merged, name + 'Else', externalSchema, fullSchema)
743+
code += r.code
744+
laterCode += r.laterCode
746745

747-
code += `
746+
code += `
748747
}
749748
`
750-
}
751749
return { code: code, laterCode: laterCode }
752750
}
753751

test/if-then-else.test.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,33 @@ const nestedDeepElseSchema = {
149149
additionalProperties: schema
150150
}
151151

152+
const noElseSchema = {
153+
type: 'object',
154+
properties: {
155+
},
156+
if: {
157+
properties: {
158+
kind: { type: 'string', enum: ['foobar'] }
159+
}
160+
},
161+
then: {
162+
properties: {
163+
kind: { type: 'string', enum: ['foobar'] },
164+
foo: { type: 'string' },
165+
bar: { type: 'number' },
166+
list: {
167+
type: 'array',
168+
items: {
169+
type: 'object',
170+
properties: {
171+
name: { type: 'string' },
172+
value: { type: 'string' }
173+
}
174+
}
175+
}
176+
}
177+
}
178+
}
152179
const fooBarInput = {
153180
kind: 'foobar',
154181
foo: 'FOO',
@@ -205,6 +232,15 @@ const alphabetOutput = JSON.stringify({
205232
const deepFoobarOutput = JSON.stringify({
206233
foobar: JSON.parse(foobarOutput)
207234
})
235+
const noElseGreetingOutput = JSON.stringify({
236+
kind: 'greeting',
237+
foo: 'FOO',
238+
bar: 42,
239+
hi: 'HI',
240+
hello: 45,
241+
a: 'A',
242+
b: 35
243+
})
208244

209245
t.test('if-then-else', t => {
210246
const tests = [
@@ -261,6 +297,12 @@ t.test('if-then-else', t => {
261297
schema: nestedDeepElseSchema,
262298
input: deepFoobarInput,
263299
expected: deepFoobarOutput
300+
},
301+
{
302+
name: 'no else',
303+
schema: noElseSchema,
304+
input: greetingInput,
305+
expected: noElseGreetingOutput
264306
}
265307
]
266308

0 commit comments

Comments
 (0)