@testwizard/core
Version:
88 lines (74 loc) • 3.12 kB
JavaScript
;
const fetch = require('node-fetch');
const Errors = require('./errors');
class RestClient {
constructor(baseUri) {
this.baseUri = baseUri;
}
async get(relativeUrl, errorMessagePrefix) {
return await this.send('GET', relativeUrl, undefined, errorMessagePrefix);
}
async getJson(relativeUrl, errorMessagePrefix) {
var response = await this.get(relativeUrl, errorMessagePrefix);
return await response.json();
}
async getText(relativeUrl, errorMessagePrefix) {
var response = await this.get(relativeUrl, errorMessagePrefix);
return await response.text();
}
async post(relativeUrl, requestObj, errorMessagePrefix) {
return await this.send('POST', relativeUrl, requestObj, errorMessagePrefix);
}
async postJson(relativeUrl, requestObj, errorMessagePrefix) {
var response = await this.post(relativeUrl, requestObj, errorMessagePrefix);
return await response.json();
}
async put(relativeUrl, requestObj, errorMessagePrefix) {
return await this.send('PUT', relativeUrl, requestObj, errorMessagePrefix);
}
async delete(relativeUrl, requestObj, errorMessagePrefix) {
return await this.send('DELETE', relativeUrl, requestObj, errorMessagePrefix);
}
async send(method, relativeUrl, requestObj, errorMessagePrefix) {
const settings = {
method: method,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
}
};
if (requestObj !== undefined)
settings.body = JSON.stringify(requestObj);
const response = await fetch(this.baseUri + relativeUrl, settings);
if (!response.ok)
await this.throwHttpRequestError(response, errorMessagePrefix);
return response;
}
async throwHttpRequestError(response, message) {
switch (response.status) {
case 0:
throw new Errors.SystemError(message + ': Could not connect to robot');
case 409:
const result = await response.json();
message += ': ' + result.message
if (result.type === 'System')
throw new Errors.SystemError(message);
else if (result.type === 'Script')
throw new Errors.ScriptError(message);
else
throw new Error(message);
case 500:
const ex = await response.json();
message += ': ' + ex.exceptionMessage;
if (ex.exceptionType == "TestWizard.Automation.Extensibility.Exceptions.TestSystemException")
throw new Errors.SystemError(message);
break;
default:
const body = await response.text();
if (body)
message += ': ' + body;
}
throw new Error(message);
}
}
module.exports = RestClient;