@microsoft.azure/autorest.testserver
Version:
This project contains a set of OpenAPI definitions and a server implementing the corresponding API. Use this to test compliance of AutoRest generators.
503 lines (489 loc) • 24.6 kB
JavaScript
var express = require('express');
var router = express.Router();
var util = require('util');
var utils = require('../util/utils')
var _ = require('underscore');
var array = function (coverage) {
router.put('/:scenario', function (req, res, next) {
if (req.params.scenario === 'empty') {
if (util.inspect(req.body) !== '[]') {
utils.send400(res, next, "Did not like empty req '" + util.inspect(req.body) + "'");
} else {
coverage['putArrayEmpty']++;
res.status(200).end();
}
} else {
utils.send400(res, next, 'Request path must contain empty');
}
});
router.get('/:scenario', function (req, res, next) {
if (req.params.scenario === 'null' || req.params.scenario === 'notProvided') {
coverage['getArrayNull']++;
res.status(200).end();
} else if (req.params.scenario === 'empty') {
coverage['getArrayEmpty']++;
res.status(200).type('json').end('[]');
} else if (req.params.scenario === 'invalid') {
coverage['getArrayInvalid']++;
res.status(200).type('json').end('[1, 2, 3');
} else {
res.status(400).send('Request path must contain null or empty or invalid');
}
});
router.get('/prim/:type/:scenario', function (req, res, next) {
if (req.params.type == 'boolean') {
if (req.params.scenario === 'tfft') {
coverage['getArrayBooleanValid']++;
res.status(200).type('json').end('[ true, false, false, true]');
} else if (req.params.scenario === 'true.null.false') {
coverage['getArrayBooleanWithNull']++;
res.status(200).type('json').end('[ true, null, false ]');
} else if (req.params.scenario === 'true.boolean.false') {
coverage['getArrayBooleanWithString']++;
res.status(200).type('json').end('[true, \"boolean\", false]');
} else {
res.status(400).send('Request scenario for boolean primitive type must contain tfft or true.null.false or true.boolean.false');
}
} else if (req.params.type == 'integer') {
if (req.params.scenario === '1.-1.3.300') {
coverage['getArrayIntegerValid']++;
res.status(200).type('json').end('[ 1, -1, 3, 300]');
} else if (req.params.scenario === '1.null.zero') {
coverage['getArrayIntegerWithNull']++;
res.status(200).type('json').end('[ 1, null, 0 ]');
} else if (req.params.scenario === '1.integer.0') {
coverage['getArrayIntegerWithString']++;
res.status(200).type('json').end('[1, \"integer\", 0]');
} else {
res.status(400).send('Request scenario for integer primitive type must contain 1.-1.3.300 or 1.null.zero or 1.boolean.0');
}
} else if (req.params.type == 'long') {
if (req.params.scenario === '1.-1.3.300') {
coverage['getArrayLongValid']++;
res.status(200).type('json').end('[ 1, -1, 3, 300]');
} else if (req.params.scenario === '1.null.zero') {
coverage['getArrayLongWithNull']++;
res.status(200).type('json').end('[ 1, null, 0 ]');
} else if (req.params.scenario === '1.integer.0') {
coverage['getArrayLongWithString']++;
res.status(200).type('json').end('[1, \"integer\", 0]');
} else {
res.status(400).send('Request scenario for long primitive type must contain 1.-1.3.300 or 1.null.zero or 1.boolean.0');
}
} else if (req.params.type == 'float') {
if (req.params.scenario === '0--0.01-1.2e20') {
coverage['getArrayFloatValid']++;
res.status(200).type('json').end('[ 0, -0.01, -1.2e20]');
} else if (req.params.scenario === '0.0-null-1.2e20') {
coverage['getArrayFloatWithNull']++;
res.status(200).type('json').end('[ 0.0, null, -1.2e20 ]');
} else if (req.params.scenario === '1.number.0') {
coverage['getArrayFloatWithString']++;
res.status(200).type('json').end('[1, \"number\", 0]');
} else {
res.status(400).send('Request scenario for float primitive type must contain 0--0.01-1.2e20 or 0.0-null-1.2e20 or 1.number.0');
}
} else if (req.params.type == 'double') {
if (req.params.scenario === '0--0.01-1.2e20') {
coverage['getArrayDoubleValid']++;
res.status(200).type('json').end('[ 0, -0.01, -1.2e20]');
} else if (req.params.scenario === '0.0-null-1.2e20') {
coverage['getArrayDoubleWithNull']++;
res.status(200).type('json').end('[ 0.0, null, -1.2e20 ]');
} else if (req.params.scenario === '1.number.0') {
coverage['getArrayDoubleWithString']++;
res.status(200).type('json').end('[1, \"number\", 0]');
} else {
res.status(400).send('Request scenario for double primitive type must contain 0--0.01-1.2e20 or 0.0-null-1.2e20 or 1.number.0');
}
} else if (req.params.type == 'string') {
if (req.params.scenario === 'foo1.foo2.foo3') {
coverage['getArrayStringValid']++;
res.status(200).type('json').end('[ \"foo1\", \"foo2\", \"foo3\"]');
} else if (req.params.scenario === 'foo.null.foo2') {
coverage['getArrayStringWithNull']++;
res.status(200).type('json').end('[ \"foo\", null, \"foo2\" ]');
} else if (req.params.scenario === 'foo.123.foo2') {
coverage['getArrayStringWithNumber']++;
res.status(200).type('json').end('[\"foo\", 123, \"foo2\"]');
} else {
res.status(400).send('Request scenario for string primitive type must contain foo1.foo2.foo3 or foo.null.foo2 or foo.123.foo2');
}
} else if (req.params.type == 'enum') {
if (req.params.scenario === 'foo1.foo2.foo3') {
coverage['getArrayEnumValid']++;
res.status(200).type('json').end('[ \"foo1\", \"foo2\", \"foo3\"]');
} else {
res.status(400).send('Request scenario for enum primitive type must contain foo1.foo2.foo3');
}
} else if (req.params.type == 'string-enum') {
if (req.params.scenario === 'foo1.foo2.foo3') {
coverage['getArrayStringEnumValid']++;
res.status(200).type('json').end('[ \"foo1\", \"foo2\", \"foo3\"]');
} else {
res.status(400).send('Request scenario for enum primitive type must contain foo1.foo2.foo3');
}
} else if (req.params.type == 'date') {
if (req.params.scenario === 'valid') {
coverage['getArrayDateValid']++;
res.status(200).type('json').end('[\"2000-12-01\", \"1980-01-02\", \"1492-10-12\"]');
} else if (req.params.scenario === 'invalidnull') {
coverage['getArrayDateWithNull']++;
res.status(200).type('json').end('[\"2012-01-01\", null, \"1776-07-04\"]');
} else if (req.params.scenario === 'invalidchars') {
coverage['getArrayDateWithInvalidChars']++;
res.status(200).type('json').end('[\"2011-03-22\", \"date\"]');
} else {
res.status(400).send('Request scenario for date primitive type must contain valid or invalidnull or invalidchars');
}
} else if (req.params.type == 'uuid') {
if (req.params.scenario === 'valid') {
coverage['getArrayUuidValid']++;
res.status(200).type('json').end('[\"6dcc7237-45fe-45c4-8a6b-3a8a3f625652\", \"d1399005-30f7-40d6-8da6-dd7c89ad34db\", \"f42f6aa1-a5bc-4ddf-907e-5f915de43205\"]');
} else if (req.params.scenario === 'invalidchars') {
coverage['getArrayUuidWithInvalidChars']++;
res.status(200).type('json').end('[\"6dcc7237-45fe-45c4-8a6b-3a8a3f625652\", \"foo\"]');
} else {
res.status(400).send('Request scenario for uuid primitive type must contain valid or invalidchars');
}
} else if (req.params.type == 'date-time') {
if (req.params.scenario === 'valid') {
coverage['getArrayDateTimeValid']++;
res.status(200).type('json').end('[\"2000-12-01t00:00:01z\", \"1980-01-02T01:11:35+01:00\", \"1492-10-12T02:15:01-08:00\"]');
} else if (req.params.scenario === 'invalidnull') {
coverage['getArrayDateTimeWithNull']++;
res.status(200).type('json').end('[\"2000-12-01t00:00:01z\", null]');
} else if (req.params.scenario === 'invalidchars') {
coverage['getArrayDateTimeWithInvalidChars']++;
res.status(200).type('json').end('[\"2000-12-01t00:00:01z\", \"date-time\"]');
} else {
res.status(400).send('Request scenario for date-time primitive type must contain valid or invalidnull or invalidchars');
}
} else if (req.params.type == 'date-time-rfc1123') {
if (req.params.scenario === 'valid') {
coverage['getArrayDateTimeRfc1123Valid']++;
res.status(200).type('json').end('[\"Fri, 01 Dec 2000 00:00:01 GMT\", \"Wed, 02 Jan 1980 00:11:35 GMT\", \"Wed, 12 Oct 1492 10:15:01 GMT\"]');
} else {
res.status(400).send('Request scenario for date-time-rfc1123 primitive type must contain valid');
}
} else if (req.params.type == 'duration') {
if (req.params.scenario === 'valid') {
coverage['getArrayDurationValid']++;
res.status(200).type('json').end('[\"P123DT22H14M12.011S\", \"P5DT1H0M0S\"]');
} else {
res.status(400).send('Request scenario for duration primitive type must contain valid');
}
} else if (req.params.type == 'byte') {
if (req.params.scenario === 'valid') {
var bytes1 = new Buffer([255, 255, 255, 250]);
var bytes2 = new Buffer([1, 2, 3]);
var bytes3 = new Buffer([37, 41, 67]);
coverage['getArrayByteValid']++;
res.status(200).type('json').end('[\"' + bytes1.toString('base64') + '\", \"' + bytes2.toString('base64') + '\", \"' +
bytes3.toString('base64') + '\"]');
} else if (req.params.scenario === 'invalidnull') {
var bytesNull = new Buffer([171, 172, 173]);
coverage['getArrayByteWithNull']++;
res.status(200).type('json').end('[\"' + bytesNull.toString('base64') + '\", null]');
} else {
res.status(400).send('Request scenario for byte primitive type must contain valid or invalidnull');
}
} else if (req.params.type == 'base64url') {
if (req.params.scenario === 'valid') {
coverage['getArrayBase64Url']++;
res.status(200).type('json').end('[\"YSBzdHJpbmcgdGhhdCBnZXRzIGVuY29kZWQgd2l0aCBiYXNlNjR1cmw\", \"dGVzdCBzdHJpbmc\", \"TG9yZW0gaXBzdW0\"]');
} else {
res.status(400).send('Request scenario for base64url type must contain valid');
}
} else {
res.status(400).send('Request path must contain boolean or integer or float or double or string or date or date-time or byte or base64url');
}
});
router.put('/prim/:type/:scenario', function (req, res, next) {
if (req.params.type == 'boolean') {
if (req.params.scenario === 'tfft') {
if (util.inspect(req.body) !== util.inspect([true, false, false, true])) {
utils.send400(res, next, "Did not like empty req '" + util.inspect(req.body) + "'");
} else {
coverage['putArrayBooleanValid']++;
res.status(200).end();
}
} else {
res.status(400).send('Request scenario for boolean primitive type must contain tfft or true.null.false or true.boolean.false');
}
} else if (req.params.type == 'integer') {
if (req.params.scenario === '1.-1.3.300') {
if (util.inspect(req.body) !== util.inspect([1, -1, 3, 300])) {
utils.send400(res, next, "Did not like integer array req '" + util.inspect(req.body) + "'");
} else {
coverage['putArrayIntegerValid']++;
res.status(200).end();
}
} else {
res.status(400).send('Request scenario for integer primitive type must contain 1.-1.3.300');
}
} else if (req.params.type == 'long') {
if (req.params.scenario === '1.-1.3.300') {
if (util.inspect(req.body) !== util.inspect([1, -1, 3, 300])) {
utils.send400(res, next, "Did not like long array req '" + util.inspect(req.body) + "'");
} else {
coverage['putArrayLongValid']++;
res.status(200).end();
}
} else {
res.status(400).send('Request scenario for long primitive type must contain 1.-1.3.300');
}
} else if (req.params.type == 'float') {
if (req.params.scenario === '0--0.01-1.2e20') {
if (util.inspect(req.body) !== util.inspect([0, -0.01, -1.2e20])) {
utils.send400(res, next, "Did not like float array req '" + util.inspect(req.body) + "'");
} else {
coverage['putArrayFloatValid']++;
res.status(200).end();
}
} else {
res.status(400).send('Request scenario for float primitive type must contain 0--0.01-1.2e20 ');
}
} else if (req.params.type == 'double') {
if (req.params.scenario === '0--0.01-1.2e20') {
if (util.inspect(req.body) !== util.inspect([0, -0.01, -1.2e20])) {
utils.send400(res, next, "Did not like double array req '" + util.inspect(req.body) + "'");
} else {
coverage['putArrayDoubleValid']++;
res.status(200).end();
}
} else {
res.status(400).send('Request scenario for double primitive type must contain 0--0.01-1.2e20 ');
}
} else if (req.params.type == 'string') {
if (req.params.scenario === 'foo1.foo2.foo3') {
if (util.inspect(req.body) !== util.inspect(['foo1', 'foo2', 'foo3'])) {
utils.send400(res, next, "Did not like string array req '" + util.inspect(req.body) + "'");
} else {
coverage['putArrayStringValid']++;
res.status(200).end();
}
} else {
res.status(400).send('Request scenario for string primitive type must contain foo1.foo2.foo3');
}
} else if (req.params.type == 'enum') {
if (req.params.scenario === 'foo1.foo2.foo3') {
if (util.inspect(req.body) !== util.inspect(['foo1', 'foo2', 'foo3'])) {
utils.send400(res, next, "Did not like enum array req '" + util.inspect(req.body) + "'");
} else {
coverage['putArrayEnumValid']++;
res.status(200).end();
}
} else {
res.status(400).send('Request scenario for string primitive type must contain foo1.foo2.foo3');
}
} else if (req.params.type == 'string-enum') {
if (req.params.scenario === 'foo1.foo2.foo3') {
if (util.inspect(req.body) !== util.inspect(['foo1', 'foo2', 'foo3'])) {
utils.send400(res, next, "Did not like enum array req '" + util.inspect(req.body) + "'");
} else {
coverage['putArrayStringEnumValid']++;
res.status(200).end();
}
} else {
res.status(400).send('Request scenario for string enum primitive type must contain foo1.foo2.foo3');
}
} else if (req.params.type == 'date') {
if (req.params.scenario === 'valid') {
if (util.inspect(req.body) !== util.inspect(['2000-12-01', '1980-01-02', '1492-10-12'])) {
utils.send400(res, next, "Did not like date array req '" + util.inspect(req.body) + "'");
} else {
coverage['putArrayDateValid']++;
res.status(200).end();
}
} else {
res.status(400).send('Request scenario for date primitive type must contain valid');
}
} else if (req.params.type == 'uuid') {
if (req.params.scenario === 'valid') {
//uuid should be lowercase when converted to string
if (util.inspect(req.body) !== util.inspect(['6dcc7237-45fe-45c4-8a6b-3a8a3f625652', 'd1399005-30f7-40d6-8da6-dd7c89ad34db', 'f42f6aa1-a5bc-4ddf-907e-5f915de43205'])) {
utils.send400(res, next, "Did not like uuid array req '" + util.inspect(req.body) + "'");
} else {
coverage['putArrayUuidValid']++;
res.status(200).end();
}
} else {
res.status(400).send('Request scenario for uuid primitive type must contain valid');
}
} else if (req.params.type == 'date-time') {
if (req.params.scenario === 'valid') {
if ((_.isEqual(req.body, ['2000-12-01T00:00:01Z', '1980-01-02T00:11:35Z', '1492-10-12T10:15:01Z'])) ||
(_.isEqual(req.body, ['2000-12-01T00:00:01.000Z', '1980-01-02T00:11:35.000Z', '1492-10-12T10:15:01.000Z']))) {
coverage['putArrayDateTimeValid']++;
res.status(200).end();
} else {
utils.send400(res, next, "Did not like date-time array req '" + util.inspect(req.body) + "'");
}
} else {
res.status(400).send('Request scenario for date-time primitive type must contain valid');
}
} else if (req.params.type == 'date-time-rfc1123') {
if (req.params.scenario === 'valid') {
if (_.isEqual(req.body, ['Fri, 01 Dec 2000 00:00:01 GMT', 'Wed, 02 Jan 1980 00:11:35 GMT', 'Wed, 12 Oct 1492 10:15:01 GMT'])) {
coverage['putArrayDateTimeRfc1123Valid']++;
res.status(200).end();
} else {
utils.send400(res, next, "Did not like date-time-rfc1123 array req '" + util.inspect(req.body) + "'");
}
} else {
res.status(400).send('Request scenario for date-time-rfc1123 primitive type must contain valid');
}
} else if (req.params.type == 'duration') {
if (req.params.scenario === 'valid') {
if (_.isEqual(req.body, ['P123DT22H14M12.011S', 'P5DT1H']) || _.isEqual(req.body, ['P123DT22H14M12.010999999998603S', 'P5DT1H'])) {
coverage['putArrayDurationValid']++;
res.status(200).end();
} else {
utils.send400(res, next, "Did not like duration array req '" + util.inspect(req.body) + "'");
}
} else {
res.status(400).send('Request scenario for duration primitive type must contain valid');
}
} else if (req.params.type == 'byte') {
if (req.params.scenario === 'valid') {
var bytes1 = new Buffer([255, 255, 255, 250]);
var bytes2 = new Buffer([1, 2, 3]);
var bytes3 = new Buffer([37, 41, 67]);
if (util.inspect(req.body) !== util.inspect([bytes1.toString('base64'), bytes2.toString('base64'), bytes3.toString('base64')])) {
utils.send400(res, next, "Did not like byte[] array req '" + util.inspect(req.body) + "'");
} else {
coverage['putArrayByteValid']++;
res.status(200).end();
}
} else {
res.status(400).send('Request scenario for byte primitive type must contain valid ');
}
} else {
res.status(400).send('Request path must contain boolean or integer or float or double or string or date or date-time or byte');
}
});
router.get('/complex/:scenario', function (req, res, next) {
if (req.params.scenario === 'null') {
coverage['getArrayComplexNull']++;
res.status(200).end();
} else if (req.params.scenario === 'empty') {
coverage['getArrayComplexEmpty']++;
res.status(200).type('json').end('[]');
} else if (req.params.scenario === 'itemnull') {
coverage['getArrayComplexItemNull']++;
res.status(200).type('json').end('[{\"integer\": 1, \"string\": \"2\"}, null, {\"integer\": 5, \"string\": \"6\"}]');
} else if (req.params.scenario === 'itemempty') {
coverage['getArrayComplexItemEmpty']++;
res.status(200).type('json').end('[{\"integer\": 1, \"string\": \"2\"}, {}, {\"integer\": 5, \"string\": \"6\"}]');
} else if (req.params.scenario === 'valid') {
coverage['getArrayComplexValid']++;
res.status(200).type('json').end('[{\"integer\": 1, \"string\": \"2\"}, {\"integer\": 3, \"string\": \"4\"}, {\"integer\": 5, \"string\": \"6\"}]');
} else {
utils.send400(res, next, 'Request path must contain null, empty, itemnull, itemempty, or valid for complex array get scenarios.')
}
});
router.put('/complex/:scenario', function (req, res, next) {
if (req.params.scenario === 'valid') {
if (_.isEqual(req.body, [{
'integer': 1,
'string': '2'
}, {
'integer': 3,
'string': '4'
}, {
'integer': 5,
'string': '6'
}])) {
coverage['putArrayComplexValid']++;
res.status(200).end();
} else {
utils.send400(res, next, "Did not like complex array req '" + util.inspect(req.body) + "'");
}
} else {
utils.send400(res, next, 'Request path must contain valid for complex array put scenarios.');
}
});
router.get('/array/:scenario', function (req, res, next) {
if (req.params.scenario === 'null') {
coverage['getArrayArrayNull']++;
res.status(200).end();
} else if (req.params.scenario === 'empty') {
coverage['getArrayArrayEmpty']++;
res.status(200).type('json').end('[]');
} else if (req.params.scenario === 'itemnull') {
coverage['getArrayArrayItemNull']++;
res.status(200).type('json').end('[[\"1\", "2\", \"3\"], null, [\"7\", \"8\", \"9\"]]');
} else if (req.params.scenario === 'itemempty') {
coverage['getArrayArrayItemEmpty']++;
res.status(200).type('json').end('[[\"1\", "2\", \"3\"], [], [\"7\", \"8\", \"9\"]]');
} else if (req.params.scenario === 'valid') {
coverage['getArrayArrayValid']++;
res.status(200).type('json').end('[[\"1\", "2\", \"3\"], [\"4\", \"5\", \"6\"], [\"7\", \"8\", \"9\"]]');
} else {
utils.send400(res, next, 'Request path must contain null, empty, itemnull, itemempty, or valid for array of array get scenarios.')
}
});
router.put('/array/:scenario', function (req, res, next) {
if (req.params.scenario === 'valid') {
if (_.isEqual(req.body, [
['1', '2', '3'],
['4', '5', '6'],
['7', '8', '9']
])) {
coverage['putArrayArrayValid']++;
res.status(200).end();
} else {
utils.send400(res, next, "Did not like array array req '" + util.inspect(req.body) + "'");
}
} else {
utils.send400(res, next, 'Request path must contain valid for array of array put scenarios.');
}
});
router.get('/dictionary/:scenario', function (req, res, next) {
if (req.params.scenario === 'null') {
coverage['getArrayDictionaryNull']++;
res.status(200).end();
} else if (req.params.scenario === 'empty') {
coverage['getArrayDictionaryEmpty']++;
res.status(200).type('json').end('[]');
} else if (req.params.scenario === 'itemnull') {
coverage['getArrayDictionaryItemNull']++;
res.status(200).type('json').end('[{\"1\": \"one\", \"2\": \"two\", \"3\": \"three\"}, null, {\"7\": \"seven\", \"8\": \"eight\", \"9\": \"nine\"}]');
} else if (req.params.scenario === 'itemempty') {
coverage['getArrayDictionaryItemEmpty']++;
res.status(200).type('json').end('[{\"1\": \"one\", \"2\": \"two\", \"3\": \"three\"}, {}, {\"7\": \"seven\", \"8\": \"eight\", \"9\": \"nine\"}]');
} else if (req.params.scenario === 'valid') {
coverage['getArrayDictionaryValid']++;
res.status(200).type('json').end('[{\"1\": \"one\", \"2\": \"two\", \"3\": \"three\"}, {\"4\": \"four\", \"5\": \"five\", \"6\": \"six\"}, {\"7\": \"seven\", \"8\": \"eight\", \"9\": \"nine\"}]');
} else {
utils.send400(res, next, 'Request path must contain null, empty, itemnull, itemempty, or valid for dictionary array get scenarios.')
}
});
router.put('/dictionary/:scenario', function (req, res, next) {
if (req.params.scenario === 'valid') {
if (_.isEqual(req.body, [{
'1': 'one',
'2': 'two',
'3': 'three'
}, {
'4': 'four',
'5': 'five',
'6': 'six'
}, {
'7': 'seven',
'8': 'eight',
'9': 'nine'
}])) {
coverage['putArrayDictionaryValid']++;
res.status(200).end();
} else {
utils.send400(res, next, "Did not like complex array req '" + util.inspect(req.body) + "'");
}
} else {
utils.send400(res, next, 'Request path must contain valid for dictionary array put scenarios.');
}
});
}
array.prototype.router = router;
module.exports = array;