refactor: api test suite to accept methods other than GET

v1.18.x
Julian Lam 4 years ago
parent 93f65f89e7
commit 843aff582d

@ -94,26 +94,32 @@ describe('Read API', async () => {
writeApi = await SwaggerParser.dereference(writeApiPath);
// Iterate through all documented paths, make a call to it, and compare the result body with what is defined in the spec
const paths = Object.keys(writeApi.paths);
// const paths = Object.keys(readApi.paths);
// const paths = Object.keys(writeApi.paths);
const paths = Object.keys(readApi.paths);
paths.forEach((path) => {
const context = writeApi.paths[path];
// const context = readApi.paths[path];
// const context = writeApi.paths[path];
const context = readApi.paths[path];
let schema;
let response;
const urls = [];
const methods = [];
let url;
let method;
const headers = {};
const qs = {};
it('should have examples when parameters are present', () => {
Object.keys(context).forEach((method) => {
Object.keys(context).forEach((_method) => {
if (_method !== 'get') {
return;
}
it('should have examples when parameters are present', () => {
method = _method;
const parameters = context[method].parameters;
let testPath = path;
if (parameters) {
parameters.forEach((param) => {
assert(param.example !== null && param.example !== undefined, path + ' has parameters without examples');
assert(param.example !== null && param.example !== undefined, `${method.toUpperCase()} ${path} has parameters without examples`);
switch (param.in) {
case 'path':
@ -129,40 +135,41 @@ describe('Read API', async () => {
});
}
urls.push = nconf.get('url') + testPath;
methods.push(method);
url = nconf.get('url') + testPath;
});
});
it('should resolve with a 200 when called', async () => {
await setupData();
try {
response = await request(url, {
jar: !unauthenticatedRoutes.includes(path) ? jar : undefined,
json: true,
headers: headers,
qs: qs,
});
} catch (e) {
assert(!e, path + ' resolved with ' + e.message);
}
});
it('should resolve with a 200 when called', async () => {
await setupData();
// Recursively iterate through schema properties, comparing type
it('response should match schema definition', () => {
const has200 = context.get.responses['200'];
if (!has200) {
return;
}
try {
response = await request(url, {
method: method,
jar: !unauthenticatedRoutes.includes(path) ? jar : undefined,
json: true,
headers: headers,
qs: qs,
});
} catch (e) {
assert(!e, `${method.toUpperCase()} ${path} resolved with ${e.message}`);
}
});
console.log(response);
const hasJSON = has200.content && has200.content['application/json'];
if (hasJSON) {
schema = context.get.responses['200'].content['application/json'].schema;
compare(schema, response, 'root');
}
// Recursively iterate through schema properties, comparing type
it('response should match schema definition', () => {
const has200 = context[method].responses['200'];
if (!has200) {
return;
}
const hasJSON = has200.content && has200.content['application/json'];
if (hasJSON) {
schema = context[method].responses['200'].content['application/json'].schema;
compare(schema, response, 'root');
}
// TODO someday: text/csv, binary file type checking?
// TODO someday: text/csv, binary file type checking?
});
});
});

Loading…
Cancel
Save