artes
Version:
The simplest way to automate UI and API tests using Cucumber-style steps.
311 lines (269 loc) • 8.54 kB
JavaScript
const {
When,
context,
extractVarsFromResponse,
saveVar,
time,
random,
moduleConfig, resolveVariable
} = require("../helper/imports/commons");
const { api } = require("../helper/stepFunctions/exporter");
const path = require("path");
const fs = require("fs");
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);
await extractVarsFromResponse(context.response["Response Body"], vars);
},
);
When(
"User sends GET request to {string} with payload and saves {string} variables",
async function (url, vars, payload) {
await api.get(url, payload);
await extractVarsFromResponse(context.response["Response Body"], 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);
await extractVarsFromResponse(context.response["Response Body"], 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 saves {string} variables",
async (url, vars, payload) => {
await api.post(url, payload, "multipart");
await extractVarsFromResponse(context.response["Response Body"], vars);
},
);
When(
"User sends x-www-form-urlencoded POST request to {string} with payload:",
async (url, payload) => {
await api.post(url, payload, "application/x-www-form-urlencoded");
},
);
When(
"User sends x-www-form-urlencoded POST request to {string} with payload and saves {string} variables",
async (url, vars, payload) => {
await api.post(url, payload, "application/x-www-form-urlencoded");
await extractVarsFromResponse(context.response["Response Body"], 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);
await extractVarsFromResponse(context.response["Response Body"], 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");
await extractVarsFromResponse(context.response["Response Body"], vars);
},
);
When(
"User sends x-www-form-urlencoded PUT request to {string} with payload:",
async (url, payload) => {
await api.put(url, payload, "application/x-www-form-urlencoded");
},
);
When(
"User sends x-www-form-urlencoded PUT request to {string} with payload and saves {string} variables",
async (url, vars, payload) => {
await api.put(url, payload, "application/x-www-form-urlencoded");
await extractVarsFromResponse(context.response["Response Body"], 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);
await extractVarsFromResponse(context.response["Response Body"], 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");
await extractVarsFromResponse(context.response["Response Body"], vars);
},
);
When(
"User sends x-www-form-urlencoded PATCH request to {string} with payload:",
async (url, payload) => {
await api.patch(url, payload, "application/x-www-form-urlencoded");
},
);
When(
"User sends x-www-form-urlencoded PATCH request to {string} with payload and saves {string} variables",
async (url, vars, payload) => {
await api.patch(url, payload, "application/x-www-form-urlencoded");
await extractVarsFromResponse(context.response["Response Body"], 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);
await extractVarsFromResponse(context.response["Response Body"], 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}",
async function (url, vars, payload) {
await api.delete(url, payload);
await extractVarsFromResponse(context.response["Response Body"], vars);
},
);
When(
"User saves {string} variable from response as {string}",
async function (vars, customVarName) {
await extractVarsFromResponse(
context.response["Response Body"],
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(null), "\n");
});
When("User wants to see {string} variable", async function (variable) {
console.log(api.vars(variable), "\n");
});
When("User wants to see request body", async function () {
console.log("Request Body: ", context.response["Request Body"]);
});
When("User wants to see response body", async function () {
console.log("Response Body: ", context.response["Response Body"]);
});
When(
"User sends {string} request to {string} with payload:",
async function (method, url, payload) {
const httpMethod = method.toUpperCase();
switch (httpMethod) {
case "GET":
await api.get(url, payload);
break;
case "HEAD":
await api.head(url, payload);
break;
case "POST":
await api.post(url, payload);
break;
case "PUT":
await api.put(url, payload);
break;
case "PATCH":
await api.patch(url, payload);
break;
case "DELETE":
await api.delete(url, payload);
break;
default:
throw new Error(`Unsupported HTTP method: ${httpMethod}`);
}
},
);
When(
"User sends GET request to {string} and save {string} variable from {string} array as {string} randomly with payload:",
async (endPoint, varName, fromArray, variableKey, payload) => {
await api.get(endPoint, payload);
let responseBody;
if (fromArray == "[]") {
responseBody = await context.response["Response Body"];
} else {
responseBody = await context.response["Response Body"][fromArray];
}
const randomContent =
responseBody[random.number.int({ min: 0, max: responseBody.length - 1 })];
context.vars[variableKey] = randomContent[varName];
},
);
When(
"User sets {string} date {int} days from today",
async function (dateName, days) {
const expiresAt =
days < 0
? time().subtract(Math.abs(days), "day").toISOString()
: time().add(days, "day").toISOString();
context.vars[dateName] = expiresAt;
},
);
When(
"User convert {string} into base64 as {string}",
async (file, variable) => {
file = await resolveVariable(file);
const filePath = await path.join(moduleConfig.projectPath, file);
const fileData = await fs.readFileSync(filePath);
const base64Data = await fileData.toString("base64");
context.vars[variable] = await base64Data;
},
);