artes 1.0.42 → 1.0.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "artes",
3
- "version": "1.0.42",
3
+ "version": "1.0.44",
4
4
  "description": "The package provide step definitions and user writes feature files, and the package handles automation, with optional POM files and custom step definitions.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -27,15 +27,16 @@
27
27
  "dependencies": {
28
28
  "@cucumber/cucumber": "^11.0.1",
29
29
  "@cucumber/messages": "^26.0.1",
30
- "@gatling.io/core": "3.12.0",
30
+ "@faker-js/faker": "^9.8.0",
31
31
  "@gatling.io/cli": "3.12.0",
32
+ "@gatling.io/core": "3.12.0",
32
33
  "@gatling.io/http": "3.12.0",
33
34
  "@types/node": "^22.9.0",
35
+ "ajv": "^8.17.1",
34
36
  "allure-commandline": "^2.30.0",
35
37
  "allure-cucumberjs": "^3.0.5",
36
38
  "allure-js-commons": "^3.0.5",
37
39
  "playwright": "^1.48.2",
38
- "ajv": "^8.17.1",
39
40
  "rimraf": "^6.0.1"
40
41
  },
41
42
  "repository": {
@@ -3,13 +3,17 @@ const { Given, When, Then } = require("@cucumber/cucumber");
3
3
  const {
4
4
  getElement,
5
5
  getSelector,
6
+ saveVar,
7
+ resolveVariable,
6
8
  } = require("../pomController/elementController");
9
+ const { faker } = require('@faker-js/faker');
7
10
  const { context } = require("../../hooks/context");
8
11
 
9
12
  const element = getElement;
10
13
  const selector = getSelector;
11
14
  const page = context.page;
12
15
  const request = context.request;
16
+ const random = faker;
13
17
 
14
18
  const path = require("path");
15
19
  const modulePath = process.cwd();
@@ -35,6 +39,9 @@ module.exports = {
35
39
  Then,
36
40
  element,
37
41
  selector,
42
+ saveVar,
43
+ resolveVariable,
44
+ random,
38
45
  page,
39
46
  request,
40
47
  context,
@@ -84,10 +84,35 @@ class Elements {
84
84
  this.elements?.[element]?.selector || this.elements?.[element] || element;
85
85
  return selector;
86
86
  }
87
+
88
+ static saveVar(value, customName, path) {
89
+ if (!customName) {
90
+ const flatKey = path
91
+ .split(".")
92
+ .map((part, i) =>
93
+ i === 0 ? part : part[0].toUpperCase() + part.slice(1),
94
+ )
95
+ .join("");
96
+
97
+ context.vars[flatKey] = value;
98
+ } else {
99
+ context.vars[customName] = value;
100
+ }
101
+ }
102
+
103
+ static resolveVariable(template) {
104
+ if (typeof template !== "string") return template;
105
+ return template.replace(/{{\s*(\w+)\s*}}/g, (_, varName) => {
106
+ const value = context.vars[varName];
107
+ return value !== undefined ? value : `{{${varName}}}`;
108
+ });
109
+ }
87
110
  }
88
111
 
89
112
  module.exports = {
90
113
  getElement: Elements.getElement.bind(Elements),
91
114
  addElements: Elements.addElements.bind(Elements),
92
115
  getSelector: Elements.getSelector.bind(Elements),
116
+ saveVar: Elements.saveVar.bind(Elements),
117
+ resolveVariable: Elements.resolveVariable.bind(Elements),
93
118
  };
@@ -1,8 +1,16 @@
1
- const { context } = require("../imports/commons");
1
+ const { context, selector, resolveVariable } = require("../imports/commons");
2
2
 
3
3
  const api = {
4
- get: async (url) => {
5
- const res = await context.request.get(url);
4
+ get: async (url, payload) => {
5
+ const URL = await selector(url);
6
+ const resolvedURL = await resolveVariable(URL);
7
+
8
+ const resolvedPayload = resolveVariable(payload);
9
+ const payloadJSON = (await resolvedPayload) && JSON.parse(resolvedPayload);
10
+
11
+ const res = await context.request.get(resolvedURL, {
12
+ headers: payloadJSON ? payloadJSON.headers : {},
13
+ });
6
14
  const header = await res.headers();
7
15
  const body = await res.json();
8
16
 
@@ -16,7 +24,10 @@ const api = {
16
24
  context.response = response;
17
25
  },
18
26
  head: async (url) => {
19
- const res = await context.request.head(url);
27
+ const URL = await selector(url);
28
+ const resolvedURL = await resolveVariable(URL);
29
+
30
+ const res = await context.request.head(resolvedURL);
20
31
  const header = await res.headers();
21
32
 
22
33
  const response = {
@@ -28,18 +39,25 @@ const api = {
28
39
 
29
40
  context.response = response;
30
41
  },
31
- post: async (url, reqHeader, reqBody) => {
32
- const res = await context.request.post(url, {
33
- headers: reqHeader,
34
- body: reqBody,
42
+ post: async (url, payload) => {
43
+ const URL = await selector(url);
44
+ const resolvedURL = await resolveVariable(URL);
45
+
46
+ const resolvedPayload = await resolveVariable(payload);
47
+ const payloadJSON = (await resolvedPayload) && JSON.parse(resolvedPayload);
48
+
49
+ const res = await context.request.post(resolvedURL, {
50
+ headers: payloadJSON ? payloadJSON.headers : {},
51
+ data: payloadJSON ? payloadJSON.body : {},
35
52
  });
53
+
36
54
  const header = await res.headers();
37
55
  const body = await res.json();
38
56
 
39
57
  const response = {
40
58
  url: res.url(),
41
- requestHeaders: reqHeader,
42
- requestBody: reqBody,
59
+ requestHeaders: payloadJSON.headers,
60
+ requestBody: payloadJSON.body,
43
61
  response: res,
44
62
  responseHeaders: header,
45
63
  responseBody: body,
@@ -47,17 +65,25 @@ const api = {
47
65
 
48
66
  context.response = response;
49
67
  },
50
- put: async (url, reqHeader, reqBody) => {
51
- const res = await context.request.put(url, {
52
- body: JSON.stringify(reqBody),
68
+ put: async (url, payload) => {
69
+ const URL = await selector(url);
70
+ const resolvedURL = await resolveVariable(URL);
71
+
72
+ const resolvedPayload = await resolveVariable(payload);
73
+ const payloadJSON = (await resolvedPayload) && JSON.parse(resolvedPayload);
74
+
75
+ const res = await context.request.put(resolvedURL, {
76
+ headers: payloadJSON ? payloadJSON.headers : {},
77
+ data: payloadJSON ? payloadJSON.body : {},
53
78
  });
79
+
54
80
  const header = await res.headers();
55
81
  const body = await res.json();
56
82
 
57
83
  const response = {
58
84
  url: res.url(),
59
- requestHeaders: reqHeader,
60
- requestBody: reqBody,
85
+ requestHeaders: payloadJSON.headers,
86
+ requestBody: payloadJSON.body,
61
87
  response: res,
62
88
  responseHeaders: header,
63
89
  responseBody: body,
@@ -65,17 +91,25 @@ const api = {
65
91
 
66
92
  context.response = response;
67
93
  },
68
- patch: async (url, reqHeader, reqBody) => {
69
- const res = await context.request.patch(url, {
70
- body: JSON.stringify(reqBody),
94
+ patch: async (url, payload) => {
95
+ const URL = await selector(url);
96
+ const resolvedURL = await resolveVariable(URL);
97
+
98
+ const resolvedPayload = await resolveVariable(payload);
99
+ const payloadJSON = (await resolvedPayload) && JSON.parse(resolvedPayload);
100
+
101
+ const res = await context.request.patch(resolvedURL, {
102
+ headers: payloadJSON ? payloadJSON.headers : {},
103
+ data: payloadJSON ? payloadJSON.body : {},
71
104
  });
105
+
72
106
  const header = await res.headers();
73
107
  const body = await res.json();
74
108
 
75
109
  const response = {
76
110
  url: res.url(),
77
- requestHeaders: reqHeader,
78
- requestBody: reqBody,
111
+ requestHeaders: payloadJSON.headers,
112
+ requestBody: payloadJSON.body,
79
113
  response: res,
80
114
  responseHeaders: header,
81
115
  responseBody: body,
@@ -83,8 +117,17 @@ const api = {
83
117
 
84
118
  context.response = response;
85
119
  },
86
- delete: async (url) => {
87
- const res = await context.request.delete(url);
120
+ delete: async (url, payload) => {
121
+ const URL = await selector(url);
122
+ const resolvedURL = await resolveVariable(URL);
123
+
124
+ const resolvedPayload = await resolveVariable(payload);
125
+ const payloadJSON = (await resolvedPayload) && JSON.parse(resolvedPayload);
126
+
127
+ const res = await context.request.delete(resolvedURL, {
128
+ headers: payloadJSON.headers,
129
+ });
130
+
88
131
  const header = await res.headers();
89
132
  const body = await res.json();
90
133
 
@@ -97,6 +140,9 @@ const api = {
97
140
 
98
141
  context.response = response;
99
142
  },
143
+ vars: () => {
144
+ context.vars
145
+ },
100
146
  };
101
147
 
102
148
  module.exports = { api };
@@ -3,20 +3,62 @@ const {
3
3
  context,
4
4
  expect,
5
5
  selector,
6
+ saveVar
6
7
  } = require("../helper/imports/commons");
7
8
  const { api } = require("../helper/stepFunctions/exporter");
8
9
  const Ajv = require("ajv");
9
10
 
11
+ function extractVarsFromResponse(vars, customVarName) {
12
+ const responseBody = context.response.responseBody;
13
+
14
+ function getValueByPath(obj, path) {
15
+ const keys = path.split(".");
16
+ let current = obj;
17
+
18
+ for (const key of keys) {
19
+ if (current && typeof current === "object" && key in current) {
20
+ current = current[key];
21
+ } else {
22
+ return undefined;
23
+ }
24
+ }
25
+
26
+ return current;
27
+ }
28
+
29
+ vars.split(",").forEach((v) => {
30
+ const path = v.trim();
31
+ const value = getValueByPath(responseBody, path);
32
+ if (value !== undefined) {
33
+ saveVar(value, customVarName, path);
34
+ }
35
+ });
36
+ }
37
+
10
38
  When("User sends GET request to {string}", async function (url) {
11
39
  await api.get(url);
12
40
  });
13
41
 
42
+ When(
43
+ "User sends GET request to {string} with payload:",
44
+ async function (url, reqParams) {
45
+ await api.get(url, payload);
46
+ },
47
+ );
48
+
14
49
  When(
15
50
  "User sends GET request to {string} and saves {string} variables",
16
51
  async function (url, vars) {
17
- await api.get(url);
18
- vars = vars.split(",").map((v) => v.trim());
19
- console.log(vars);
52
+ await api.get(url, payload);
53
+ extractVarsFromResponse(vars);
54
+ },
55
+ );
56
+
57
+ When(
58
+ "User sends GET request to {string} with payload and saves {string} variables",
59
+ async function (url, vars, payload) {
60
+ await api.get(url, payload);
61
+ extractVarsFromResponse(vars);
20
62
  },
21
63
  );
22
64
 
@@ -26,22 +68,46 @@ When("User sends HEAD request to {string}", async function (url) {
26
68
 
27
69
  When(
28
70
  "User sends POST request to {string} with payload:",
29
- async function (url, reqParams) {
30
- const payload = JSON.parse(reqParams);
31
- await api.post(url, payload.headers, payload.body);
71
+ async function (url, payload) {
72
+ await api.post(url, payload);
32
73
  },
33
74
  );
34
75
 
35
- When("User sends PUT request to {string} with payload:", async function (url) {
36
- const payload = JSON.parse(reqParams);
37
- await api.put(url, payload.headers, payload.body);
38
- });
76
+ When(
77
+ "User sends POST request to {string} with payload and saves {string} variables",
78
+ async function (url, payload) {
79
+ await api.post(url, payload);
80
+ extractVarsFromResponse(vars);
81
+ },
82
+ );
83
+
84
+ When(
85
+ "User sends PUT request to {string} with payload:",
86
+ async function (url, payload) {
87
+ await api.put(url, payload);
88
+ },
89
+ );
90
+
91
+ When(
92
+ "User sends PUT request to {string} with payload and saves {string} variables",
93
+ async function (url, payload) {
94
+ await api.put(url, payload);
95
+ extractVarsFromResponse(vars);
96
+ },
97
+ );
39
98
 
40
99
  When(
41
100
  "User sends PATCH request to {string} with payload:",
42
- async function (url) {
43
- const payload = JSON.parse(reqParams);
44
- await api.patch(url, payload.headers, payload.body);
101
+ async function (url, payload) {
102
+ await api.patch(url, payload);
103
+ },
104
+ );
105
+
106
+ When(
107
+ "User sends PATCH request to {string} with payload and saves {string} variables",
108
+ async function (url, payload) {
109
+ await api.patch(url, payload);
110
+ extractVarsFromResponse(vars);
45
111
  },
46
112
  );
47
113
 
@@ -49,6 +115,56 @@ When("User sends DELETE request to {string}", async function (url) {
49
115
  await api.delete(url);
50
116
  });
51
117
 
118
+ When(
119
+ "User sends DELETE request to {string} and saves {string} variables",
120
+ async function (url, vars) {
121
+ await api.delete(url);
122
+ extractVarsFromResponse(vars);
123
+ },
124
+ );
125
+
126
+ When(
127
+ "User sends DELETE request to {string} with payload:",
128
+ async function (url, payload) {
129
+ await api.delete(url, payload);
130
+ },
131
+ );
132
+
133
+ When(
134
+ "User sends DELETE request to {string} with payload and saves {string} variables",
135
+ async function (url, vars, payload) {
136
+ await api.delete(url, payload);
137
+ extractVarsFromResponse(vars);
138
+ },
139
+ );
140
+
141
+ When(
142
+ "User saves {string} variable from response as {string}",
143
+ async function (vars, customVarName) {
144
+ extractVarsFromResponse(vars, customVarName);
145
+ },
146
+ );
147
+
148
+ When(
149
+ "User saves {string} variable as {string}",
150
+ async function (value, customVarName) {
151
+ saveVar(value, customVarName);
152
+ },
153
+ );
154
+
155
+ When("User wants to see saved variables", async function () {
156
+ console.log("\nVariables:", api.vars(), "\n");
157
+
158
+ });
159
+
160
+ When("User wants to see request body", async function () {
161
+ console.log("Request Body: ", context.response.requestBody);
162
+ });
163
+
164
+ When("User wants to see response body", async function () {
165
+ console.log("Request Body: ", context.response.responseBody);
166
+ });
167
+
52
168
  When(
53
169
  "User sends {string} request to {string}",
54
170
  async function (method, url, reqParams) {