apidog-reporter-allure
Version:
An adapter for apidog proving reports in allure format
165 lines (164 loc) • 6.07 kB
JavaScript
;
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;
}