artes
Version:
The package provide step definitions and user writes feature files, and the package handles automation, with optional POM files and custom step definitions.
249 lines (211 loc) • 5.93 kB
JavaScript
const {
When,
context,
expect,
selector,
extractVarsFromResponse,
saveVar,
} = require("../helper/imports/commons");
const { api } = require("../helper/stepFunctions/exporter");
const Ajv = require("ajv");
When("User sends GET request to {string}", async function (url) {
await api.get(url);
});
When(
"User sends GET request to {string} with payload:",
async function (url, payload) {
await api.get(url, payload);
},
);
When(
"User sends GET request to {string} and saves {string} variables",
async function (url, vars) {
await api.get(url);
extractVarsFromResponse(vars);
},
);
When(
"User sends GET request to {string} with payload and saves {string} variables",
async function (url, vars, payload) {
await api.get(url, payload);
extractVarsFromResponse(vars);
},
);
When("User sends HEAD request to {string}", async function (url) {
await api.head(url);
});
When(
"User sends POST request to {string} with payload:",
async function (url, payload) {
await api.post(url, payload);
},
);
When(
"User sends POST request to {string} with payload and saves {string} variables",
async function (url, vars, payload) {
await api.post(url, payload);
extractVarsFromResponse(vars);
},
);
When(
"User sends multipart POST request to {string} with payload:",
async (url, payload) => {
await api.post(url, payload, "multipart");
},
);
When(
"User sends multipart POST request to {string} with payload and {string} variables",
async (url, vars, payload) => {
await api.post(url, payload, "multipart");
extractVarsFromResponse(vars);
},
);
When(
"User sends PUT request to {string} with payload:",
async function (url, payload) {
await api.put(url, payload);
},
);
When(
"User sends PUT request to {string} with payload and saves {string} variables",
async function (url, vars, payload) {
await api.put(url, payload);
extractVarsFromResponse(vars);
},
);
When(
"User sends multipart PUT request to {string} with payload:",
async function (url, payload) {
await api.put(url, payload, "multipart");
},
);
When(
"User sends multipart PUT request to {string} with payload and saves {string} variables",
async function (url, vars, payload) {
await api.put(url, payload, "multipart");
extractVarsFromResponse(vars);
},
);
When(
"User sends PATCH request to {string} with payload:",
async function (url, payload) {
await api.patch(url, payload);
},
);
When(
"User sends PATCH request to {string} with payload and saves {string} variables",
async function (url, vars, payload) {
await api.patch(url, payload);
extractVarsFromResponse(vars);
},
);
When(
"User sends multipart PATCH request to {string} with payload:",
async function (url, payload) {
await api.patch(url, payload, "multipart");
},
);
When(
"User sends multipart PATCH request to {string} with payload and saves {string} variables",
async function (url, vars, payload) {
await api.patch(url, payload, "multipart");
extractVarsFromResponse(vars);
},
);
When("User sends DELETE request to {string}", async function (url) {
await api.delete(url);
});
When(
"User sends DELETE request to {string} and saves {string} variables",
async function (url, vars) {
await api.delete(url);
extractVarsFromResponse(vars);
},
);
When(
"User sends DELETE request to {string} with payload:",
async function (url, payload) {
await api.delete(url, payload);
},
);
When(
"User sends DELETE request to {string} with payload and saves {string} variables",
async function (url, vars, payload) {
await api.delete(url, payload);
extractVarsFromResponse(vars);
},
);
When(
"User saves {string} variable from response as {string}",
async function (vars, customVarName) {
extractVarsFromResponse(vars, customVarName);
},
);
When(
"User saves {string} variable as {string}",
async function (value, customVarName) {
saveVar(value, customVarName);
},
);
When("User wants to see saved variables", async function () {
console.log("\nVariables:", api.vars(), "\n");
});
When("User wants to see request body", async function () {
console.log("Request Body: ", context.response.requestBody);
});
When("User wants to see response body", async function () {
console.log("Request Body: ", context.response.responseBody);
});
When(
"User sends {string} request to {string}",
async function (method, url, reqParams) {
const httpMethod = method.toUpperCase();
let headers = {};
let body;
if (["POST", "PUT", "PATCH"].includes(httpMethod)) {
const payload = JSON.parse(reqParams);
headers = payload.headers || {};
body = payload.body || {};
}
switch (httpMethod) {
case "GET":
await api.get(url);
break;
case "HEAD":
await api.head(url);
break;
case "POST":
await api.post(url, headers, body);
break;
case "PUT":
await api.put(url, headers, body);
break;
case "PATCH":
await api.patch(url, headers, body);
break;
case "DELETE":
await api.delete(url);
break;
default:
throw new Error(`Unsupported HTTP method: ${httpMethod}`);
}
},
);
When(
"User expects that request should have {int} status code",
async function (expectedStatusCode) {
const actualStatusCode = await context.response.response.status();
expect(actualStatusCode).toBe(expectedStatusCode);
},
);
When(
"User expects that response body should match {string} schema",
async function (expectedSchema) {
const schema = selector(expectedSchema);
const ajv = new Ajv();
const validate = ajv.compile(schema);
const responseBody = context.response?.responseBody;
const valid = validate(responseBody);
expect(valid).toBe(true);
},
);