diff --git a/lib/generators/index.js b/lib/generators/index.js index 9a300dd..8bd8a0f 100644 --- a/lib/generators/index.js +++ b/lib/generators/index.js @@ -23,7 +23,7 @@ const mock = (schema, useExample) => { return mock; }; -const objectMock = ({ properties, additionalProperties }, useExample ) => { +const objectMock = ({ properties, additionalProperties, allOf }, useExample ) => { let mockObj = {}; if (properties) { Object.keys(properties).forEach(function (key) { @@ -40,6 +40,17 @@ const objectMock = ({ properties, additionalProperties }, useExample ) => { //Create a random property mockObj[Chance.word()] = mock(additionalProperties, useExample); } + + /** + * Check if `allOf` is defined. If so, iterate through all of the objects mentioned + * in the array and merge them with this result. + */ + if (allOf) { + allOf.forEach((subObject) => { + Object.assign(mockObj, mock(subObject, useExample)); + }); + } + return mockObj; }; /** diff --git a/tests/fixture/petstore.json b/tests/fixture/petstore.json index cf8c6a3..269a484 100644 --- a/tests/fixture/petstore.json +++ b/tests/fixture/petstore.json @@ -806,6 +806,27 @@ "Pet": { "type": "object", "required": ["name", "photoUrls"], + "allOf": [ + { + "type": "object", + "properties": { + "test-one": { + "type": "integer", + "format": "int64" + } + } + }, + { + "type": "object", + "properties": { + "test-two": { + "type": "integer", + "format": "int64", + "example": 20 + } + } + } + ], "properties": { "id": { "type": "integer", diff --git a/tests/response_mockgen.js b/tests/response_mockgen.js index 5af1d85..aff8742 100644 --- a/tests/response_mockgen.js +++ b/tests/response_mockgen.js @@ -78,6 +78,21 @@ describe('Response Mock generator', () => { }); }); + it('should include properties specified in allOf for path /pet/{petId}', (done) => { + swagmock.responses({ + path: '/pet/{petId}', + operation: 'get', + response: '200', + useExamples: true + }, (err, mock) => { + let resp = mock.responses; + Assert.ok(resp['test-one'], 'Generated value for test-one'); + Assert.equal(resp['test-two'], 20); + Assert.ok(resp['name'], 'Generated value for name'); + done(); + }); + }); + it('should generate response mock for path /pet/{petId}/uploadImage', (done) => { swagmock.responses({ path: '/pet/{petId}/uploadImage',