UNPKG

apidog-reporter-allure

Version:
165 lines (164 loc) 6.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.handleHttpExecution = handleHttpExecution; var _allureJsCommons = require("allure-js-commons"); var _allure = _interopRequireDefault(require("../allure")); var _utils = require("../utils"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function formatBody(headers, body) { if (!body.length) { return ''; } const contentType = headers.find(({ key }) => key === 'Content-Type').value; return (0, _utils.prettyBody)(body, contentType); } function handleHttpRequest({ requestError, metaInfo, timings, request, response, responseValidation, scriptErrors }, step) { step.addParameter('name', metaInfo.httpApiName); if (request) { step.addParameter('host', request.baseUrl); } _allure.default.startStep(`${metaInfo.httpApiMethod} ${metaInfo.httpApiPath}`, timings.preProcessorsCompleted); if (request) { _allure.default.startStep('Request', timings.preProcessorsCompleted); _allure.default.stepStatus({ status: _allureJsCommons.Status.PASSED, message: `Headers:\n${(0, _utils.prettyHeaders)(request.headers)}}${request.body && request.body.raw ? `\n\nBody:\n${formatBody(request.headers, request.body.raw)}` : ''}`, end: timings.preProcessorsCompleted }); if (requestError) { _allure.default.stepStatus({ status: _allureJsCommons.Status.FAILED, message: `Response code: '${requestError.code}'\nReason: '${requestError.message}'` }); _allure.default.testStatus({ message: `[HTTP] ${metaInfo.httpApiMethod} ${metaInfo.httpApiPath}`, trace: `Response code: '${requestError.code}'\nReason: '${requestError.message}` }); } else if (response) { _allure.default.stepStatus({ message: `Status code: ${response.code}\n\n${response.cookies?.length > 0 ? `Cookies:\n\n${(0, _utils.prettyHeaders)(response.cookies)}\n\n` : ''}Headers:\n${response.headers ? (0, _utils.prettyHeaders)(response.headers) : '[]'}\n\nBody:\n${(bytes => { const bytesView = new Uint8Array(bytes); const content = new TextDecoder().decode(bytesView); return formatBody(response.headers, content); })(response.stream)}` }); } if (responseValidation) { let isCorrect = true; if (responseValidation.schema) { _allure.default.startStep(`Validate schema`, timings.postProcessorsStarted); if (!responseValidation.schema.valid) { isCorrect = false; _allure.default.stepStatus({ status: _allureJsCommons.Status.FAILED, message: responseValidation.schema.message, end: timings.postProcessorsStarted }); _allure.default.testStatus({ message: `[HTTP] ${metaInfo.httpApiMethod} ${metaInfo.httpApiPath}`, trace: `${response ? `Response code: '${response.code}'\n\n` : ''}Schema was invalid: ${responseValidation.schema.message}` }); } else { _allure.default.stepStatus({ status: _allureJsCommons.Status.PASSED, end: timings.postProcessorsStarted }); } } if (responseValidation.responseCode) { _allure.default.startStep(`Validate response code`, timings.postProcessorsStarted); if (!responseValidation.responseCode.valid) { isCorrect = false; _allure.default.stepStatus({ status: _allureJsCommons.Status.FAILED, message: responseValidation.responseCode.message, end: timings.postProcessorsStarted }); _allure.default.testStatus({ message: `[HTTP] ${metaInfo.httpApiMethod} ${metaInfo.httpApiPath}`, trace: responseValidation.responseCode.message }); } else { _allure.default.stepStatus({ status: _allureJsCommons.Status.PASSED, end: timings.postProcessorsStarted }); } } if (scriptErrors && scriptErrors.length > 0) { scriptErrors.map(({ error }) => error).sort((a1, a2) => a1.timestamp - a2.timestamp).forEach(({ name, message, timestamp }) => { _allure.default.testStatus({ message }); _allure.default.startStep(message, timestamp); _allure.default.stepStatus({ status: _allureJsCommons.Status.FAILED, end: timestamp }); isCorrect = false; }); } _allure.default.stepStatus({ status: isCorrect ? _allureJsCommons.Status.PASSED : _allureJsCommons.Status.FAILED }); } } _allure.default.endStep(timings.postProcessorsStarted); } function handleHttpAssertions({ assertions }, time) { if (!assertions) { return; } _allure.default.startStep('Assertions', time); let isSuccess = true; assertions.forEach(assertion => { isSuccess &&= assertion.passed; _allure.default.startStep(assertion.name, time); if (!assertion.passed) { _allure.default.stepStatus({ status: _allureJsCommons.Status.FAILED, message: JSON.stringify(assertion.error), end: time }); } else { _allure.default.stepStatus({ status: _allureJsCommons.Status.PASSED, end: time }); } }); _allure.default.stepStatus({ status: isSuccess ? _allureJsCommons.Status.PASSED : _allureJsCommons.Status.FAILED, end: time }); } function handleHttpExecution(item) { _allure.default.startStep(`[${item.metaInfo.type}] ${item.name}`, item.timings.started); if (_allure.default.currentStep) { _allure.default.currentStep.step.status = item.passed ? _allureJsCommons.Status.PASSED : _allureJsCommons.Status.FAILED; handleHttpRequest(item, _allure.default.currentStep.step); handleHttpAssertions(item, item.timings.postProcessorsStarted); _allure.default.endStep(item.timings.completed); } return item.passed; }