artes 1.0.42 → 1.0.43
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.
|
|
3
|
+
"version": "1.0.43",
|
|
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": {
|
|
@@ -3,6 +3,8 @@ 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");
|
|
7
9
|
const { context } = require("../../hooks/context");
|
|
8
10
|
|
|
@@ -35,6 +37,8 @@ module.exports = {
|
|
|
35
37
|
Then,
|
|
36
38
|
element,
|
|
37
39
|
selector,
|
|
40
|
+
saveVar,
|
|
41
|
+
resolveVariable,
|
|
38
42
|
page,
|
|
39
43
|
request,
|
|
40
44
|
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
|
|
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
|
|
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,
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
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:
|
|
42
|
-
requestBody:
|
|
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,
|
|
51
|
-
const
|
|
52
|
-
|
|
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:
|
|
60
|
-
requestBody:
|
|
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,
|
|
69
|
-
const
|
|
70
|
-
|
|
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:
|
|
78
|
-
requestBody:
|
|
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
|
|
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
|
|
19
|
-
|
|
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,
|
|
30
|
-
|
|
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(
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
|
|
44
|
-
|
|
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) {
|