UNPKG

@testwizard/core

Version:

88 lines (74 loc) 3.12 kB
'use strict'; 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;