#1248 createXMLSample added XML display for Model in definitions

This commit is contained in:
Anna Bodnia
2016-01-14 17:41:50 +02:00
parent 8917a9bf76
commit 1c555c00b8
4 changed files with 169 additions and 22 deletions

36
dist/swagger-ui.js vendored
View File

@@ -26868,12 +26868,13 @@ SwaggerUi.partials.signature = (function () {
}; };
}; };
var createArrayXML = function (name, items, xml) { var createArrayXML = function (name, items, xml, models) {
var value; var value;
if (!items) { return ''; } if (!items) { return ''; }
value = createXMLSample(name, items) + createXMLSample(name, items); value = createXMLSample(name, items, models);
value += value;
xml = xml || {}; xml = xml || {};
@@ -26884,7 +26885,19 @@ SwaggerUi.partials.signature = (function () {
return value; return value;
}; };
function createObjectXML (name, properties, xml) { var getModelXML = function (modelType, models) {
var type = simpleRef(modelType);
var model = models[type] || {};
var name = model.name || modelType;
if (!model.definition) {
return '';
}
return createXMLSample(name, model.definition, models);
};
function createObjectXML (name, properties, xml, models) {
var props; var props;
if (!properties) { return ''; } if (!properties) { return ''; }
@@ -26892,13 +26905,13 @@ SwaggerUi.partials.signature = (function () {
properties = properties || {}; properties = properties || {};
props = _.map(properties, function (prop, key) { props = _.map(properties, function (prop, key) {
return createXMLSample(key, prop); return createXMLSample(key, prop, models);
}).join(''); }).join('');
return wrapTag(name, props); return wrapTag(name, props);
} }
function createXMLSample (name, definition) { function createXMLSample (name, definition, models) {
var primitivesMap = { var primitivesMap = {
'string': { 'string': {
'date': new Date(1).toISOString().split('T')[0], 'date': new Date(1).toISOString().split('T')[0],
@@ -26920,8 +26933,13 @@ SwaggerUi.partials.signature = (function () {
var xml = definition.xml || {}; var xml = definition.xml || {};
var attributes = []; var attributes = [];
var namespace = getNamespace(xml); var namespace = getNamespace(xml);
var $ref = definition.$ref;
var value; var value;
if (_.isString($ref)) {
return getModelXML($ref, models);
}
name = getName(name, xml); name = getName(name, xml);
if (namespace) { if (namespace) {
@@ -26931,12 +26949,16 @@ SwaggerUi.partials.signature = (function () {
// Here are going to be else statements for Array and Object types // Here are going to be else statements for Array and Object types
if (_.keys(primitivesMap).indexOf(type) !== -1) { if (_.keys(primitivesMap).indexOf(type) !== -1) {
if (_.isArray(definition.enum)){
value = definition.enum[0];
} else {
value = definition.example || primitivesMap[type][format] || primitivesMap[type].default; value = definition.example || primitivesMap[type][format] || primitivesMap[type].default;
}
return wrapTag(name, value, attributes); return wrapTag(name, value, attributes);
} else if (type === 'array') { } else if (type === 'array') {
return createArrayXML(name, definition.items, xml); return createArrayXML(name, definition.items, xml, models);
} else if (type === 'object') { } else if (type === 'object') {
return createObjectXML(name, definition.properties, xml); return createObjectXML(name, definition.properties, xml, models);
} }
return ''; return '';

File diff suppressed because one or more lines are too long

View File

@@ -701,12 +701,13 @@ SwaggerUi.partials.signature = (function () {
}; };
}; };
var createArrayXML = function (name, items, xml) { var createArrayXML = function (name, items, xml, models) {
var value; var value;
if (!items) { return ''; } if (!items) { return ''; }
value = createXMLSample(name, items) + createXMLSample(name, items); value = createXMLSample(name, items, models);
value += value;
xml = xml || {}; xml = xml || {};
@@ -717,7 +718,19 @@ SwaggerUi.partials.signature = (function () {
return value; return value;
}; };
function createObjectXML (name, properties, xml) { var getModelXML = function (modelType, models) {
var type = simpleRef(modelType);
var model = models[type] || {};
var name = model.name || modelType;
if (!model.definition) {
return '';
}
return createXMLSample(name, model.definition, models);
};
function createObjectXML (name, properties, xml, models) {
var props; var props;
if (!properties) { return ''; } if (!properties) { return ''; }
@@ -725,13 +738,13 @@ SwaggerUi.partials.signature = (function () {
properties = properties || {}; properties = properties || {};
props = _.map(properties, function (prop, key) { props = _.map(properties, function (prop, key) {
return createXMLSample(key, prop); return createXMLSample(key, prop, models);
}).join(''); }).join('');
return wrapTag(name, props); return wrapTag(name, props);
} }
function createXMLSample (name, definition) { function createXMLSample (name, definition, models) {
var primitivesMap = { var primitivesMap = {
'string': { 'string': {
'date': new Date(1).toISOString().split('T')[0], 'date': new Date(1).toISOString().split('T')[0],
@@ -753,8 +766,13 @@ SwaggerUi.partials.signature = (function () {
var xml = definition.xml || {}; var xml = definition.xml || {};
var attributes = []; var attributes = [];
var namespace = getNamespace(xml); var namespace = getNamespace(xml);
var $ref = definition.$ref;
var value; var value;
if (_.isString($ref)) {
return getModelXML($ref, models);
}
name = getName(name, xml); name = getName(name, xml);
if (namespace) { if (namespace) {
@@ -764,12 +782,16 @@ SwaggerUi.partials.signature = (function () {
// Here are going to be else statements for Array and Object types // Here are going to be else statements for Array and Object types
if (_.keys(primitivesMap).indexOf(type) !== -1) { if (_.keys(primitivesMap).indexOf(type) !== -1) {
if (_.isArray(definition.enum)){
value = definition.enum[0];
} else {
value = definition.example || primitivesMap[type][format] || primitivesMap[type].default; value = definition.example || primitivesMap[type][format] || primitivesMap[type].default;
}
return wrapTag(name, value, attributes); return wrapTag(name, value, attributes);
} else if (type === 'array') { } else if (type === 'array') {
return createArrayXML(name, definition.items, xml); return createArrayXML(name, definition.items, xml, models);
} else if (type === 'object') { } else if (type === 'object') {
return createObjectXML(name, definition.properties, xml); return createObjectXML(name, definition.properties, xml, models);
} }
return ''; return '';

View File

@@ -2,6 +2,67 @@
describe('SwaggerUi.partials.signature tests', function () { describe('SwaggerUi.partials.signature tests', function () {
var sut = SwaggerUi.partials.signature; var sut = SwaggerUi.partials.signature;
var models = {
'Pet': {
'definition': {
'type': 'object',
'required': [ 'name', 'photoUrls' ],
'properties': {
'id': {
'type': 'integer',
'format': 'int64 '
},
'category': { '$ref': '#/definitions/Category' },
'name': {
'type': 'string',
'example': 'doggie'
},
'photoUrls': {
'type': 'array',
'xml': {
'name': 'photoUrl',
'wrapped':true
},
'items': { 'type': 'string' }
},
'tags': {
'type': 'array',
'xml': { 'name': 'tag', 'wrapped':true},
'items': { '$ref': '#/definitions/Tag' }
},
'status': {
'type': 'string',
'description': 'pet status in the store',
'enum':[ 'available', 'pending', 'sold' ]
}
},
'xml': { 'name': 'Pet' }
},
'name': 'Pet'
},
'Category': {
'definition': {
'type': 'object',
'properties': {
'id': { 'type': 'integer', 'format': 'int64' },
'name': { 'type': 'string' }
},
'xml': { 'name': 'Category' }
},
'name': 'Category'
},
'Tag': {
'definition': {
'type': 'object',
'properties': {
'id': { 'type': 'integer', 'format': 'int64' },
'name': { 'type': 'string' }
},
'xml': { 'name': 'Tag' }
},
'name': 'Tag'
}
};
describe('method createXMLSample', function () { describe('method createXMLSample', function () {
var date = new Date(1).toISOString().split('T')[0]; var date = new Date(1).toISOString().split('T')[0];
@@ -128,9 +189,7 @@ describe('SwaggerUi.partials.signature tests', function () {
expect(sut.createXMLSample(name, definition)).to.equal(expected); expect(sut.createXMLSample(name, definition)).to.equal(expected);
}); });
});
describe('array', function () {
it('returns tag <animal>string</animal><animal>string</animal> when passing string items with name', function () { it('returns tag <animal>string</animal><animal>string</animal> when passing string items with name', function () {
var expected = '<animal>string</animal><animal>string</animal>'; var expected = '<animal>string</animal><animal>string</animal>';
var name = 'animals'; var name = 'animals';
@@ -346,9 +405,6 @@ describe('SwaggerUi.partials.signature tests', function () {
name: 'alien' name: 'alien'
} }
} }
},
xml: {
wrapped: true
} }
}, },
cat: { cat: {
@@ -363,5 +419,52 @@ describe('SwaggerUi.partials.signature tests', function () {
expect(sut.createXMLSample(name, definition)).to.equal(expected); expect(sut.createXMLSample(name, definition)).to.equal(expected);
}); });
}); });
describe('schema is in definitions', function () {
it('returns array of Tags wrapped into Tags', function () {
var expected = '<Tags>' +
'<Tag><id>1</id><name>string</name></Tag>' +
'<Tag><id>1</id><name>string</name></Tag>' +
'</Tags>';
var schema = {
type: 'array',
items: {
$ref: '#/definitions/Tag'
},
xml: {
name: 'Tags',
wrapped: true
}
};
expect(sut.createXMLSample('', schema, models)).to.equal(expected);
});
it('returns Object with properties Pet and name', function () {
var expected = '<Pet>' +
'<id>1</id>' +
'<Category>' +
'<id>1</id>' +
'<name>string</name>' +
'</Category>' +
'<name>doggie</name>' +
'<photoUrl>' +
'<photoUrl>string</photoUrl>' +
'<photoUrl>string</photoUrl>' +
'</photoUrl>' +
'<tag>' +
'<Tag><id>1</id><name>string</name></Tag>' +
'<Tag><id>1</id><name>string</name></Tag>' +
'</tag>' +
'<status>available</status>' +
'</Pet>';
var schema = {
$ref: '#/definitions/Pet'
};
expect(sut.createXMLSample('', schema, models)).to.equal(expected);
});
});
}); });
}); });