artes 1.0.60 → 1.0.61

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.60",
3
+ "version": "1.0.61",
4
4
  "description": "The simplest way to automate UI and API tests using Cucumber-style steps.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -2,17 +2,19 @@ const { addElements } = require("./elementController");
2
2
  const cucumberConfig = require("../../../cucumber.config");
3
3
  const fs = require("fs");
4
4
  function pomCollector() {
5
- fs.readdir(`${cucumberConfig.default.pomPath}`, (err, files) => {
6
- files.forEach((file) => {
7
- fs.readFile(
8
- `${cucumberConfig.default.pomPath}/${file}`,
9
- "utf-8",
10
- (err, content) => {
11
- addElements(JSON.parse(content));
12
- },
13
- );
5
+ if (fs.existsSync(cucumberConfig.default.pomPath)) {
6
+ fs.readdir(`${cucumberConfig.default.pomPath}`, (err, files) => {
7
+ files.forEach((file) => {
8
+ fs.readFile(
9
+ `${cucumberConfig.default.pomPath}/${file}`,
10
+ "utf-8",
11
+ (err, content) => {
12
+ addElements(JSON.parse(content));
13
+ },
14
+ );
15
+ });
14
16
  });
15
- });
17
+ }
16
18
  }
17
19
 
18
20
  module.exports = { pomCollector };
@@ -51,7 +51,6 @@ function processForm(key, value) {
51
51
  value.endsWith(".docx") ||
52
52
  value.includes("/"))
53
53
  ) {
54
- // If it looks like a file path, treat it as a file
55
54
  try {
56
55
  if (fs.existsSync(value)) {
57
56
  formData[key] = {
@@ -61,43 +60,72 @@ function processForm(key, value) {
61
60
  };
62
61
  return;
63
62
  }
64
- } catch (error) {
65
- // If file doesn't exist, treat as regular string
66
- }
63
+ } catch (error) {}
67
64
  }
68
65
 
69
66
  return formData;
70
67
  }
71
68
 
69
+ async function requestMaker(headers, data, requestDataType) {
70
+ let request = {};
71
+
72
+ Object.assign(request, { headers: headers });
73
+
74
+ switch (requestDataType) {
75
+ case "multipart":
76
+ Object.assign(request, { multipart: data });
77
+ break;
78
+ default:
79
+ Object.assign(request, { data: data });
80
+ }
81
+
82
+ return request;
83
+ }
84
+
85
+ async function responseMaker(request, response) {
86
+ const responseObject = {};
87
+
88
+ response && Object.assign(responseObject, { URL: response.url() });
89
+
90
+ request.headers &&
91
+ Object.assign(responseObject, { "Request Headers": await request.headers });
92
+
93
+ request.body &&
94
+ Object.assign(responseObject, { "Request Body": await request.body });
95
+
96
+ response && Object.assign(responseObject, { Response: await response });
97
+
98
+ response &&
99
+ Object.assign(responseObject, {
100
+ "Response Headers": await response.headers(),
101
+ });
102
+
103
+ if (response) {
104
+ try {
105
+ Object.assign(responseObject, { "Response Body": await response.json() });
106
+ } catch (e) {
107
+ Object.assign(responseObject, { "Response Body": await response.text() });
108
+ }
109
+ }
110
+
111
+ return responseObject;
112
+ }
113
+
72
114
  const api = {
73
115
  get: async (url, payload) => {
74
116
  const URL = await selector(url);
75
117
  const resolvedURL = await resolveVariable(URL);
76
118
 
77
- const resolvedPayload = resolveVariable(payload);
119
+ const resolvedPayload = (await payload) && resolveVariable(payload);
78
120
  const payloadJSON = (await resolvedPayload) && JSON.parse(resolvedPayload);
79
121
 
80
- const res = await context.request.get(resolvedURL, {
81
- headers: payloadJSON ? payloadJSON.headers : {},
82
- });
122
+ const req = await requestMaker(payloadJSON?.headers || {});
83
123
 
84
- const header = await res.headers();
85
- let body;
86
- try {
87
- body = await res.json();
88
- } catch (e) {
89
- body = await res.text();
90
- }
124
+ const res = await context.request.get(resolvedURL, req);
91
125
 
92
- const response = {
93
- url: res.url(),
94
- requestHeaders: payloadJSON.headers,
95
- response: res,
96
- responseHeaders: header,
97
- responseBody: body,
98
- };
126
+ const response = responseMaker(payloadJSON, res);
99
127
 
100
- context.response = response;
128
+ context.response = await response;
101
129
  },
102
130
  head: async (url) => {
103
131
  const URL = await selector(url);
@@ -105,195 +133,135 @@ const api = {
105
133
 
106
134
  const res = await context.request.head(resolvedURL);
107
135
 
108
- const header = await res.headers();
109
- let body;
110
- try {
111
- body = await res.json();
112
- } catch (e) {
113
- body = await res.text();
114
- }
115
-
116
- const response = {
117
- url: res.url(),
118
- response: res,
119
- responseHeaders: header,
120
- responseBody: body,
121
- };
136
+ const response = responseMaker(payloadJSON, res);
122
137
 
123
- context.response = response;
138
+ context.response = await response;
124
139
  },
125
- post: async (url, payload, bodyType) => {
140
+ post: async (url, payload, requestDataType) => {
126
141
  const URL = await selector(url);
127
142
  const resolvedURL = await resolveVariable(URL);
128
143
 
129
- const resolvedPayload = await resolveVariable(payload);
144
+ const resolvedPayload = (await payload) && resolveVariable(payload);
130
145
  const payloadJSON = (await resolvedPayload) && JSON.parse(resolvedPayload);
131
146
 
132
- let requestBody = {};
147
+ let req;
133
148
 
134
- switch (bodyType) {
149
+ switch (requestDataType) {
135
150
  case "multipart":
136
151
  let combinedFormData = {};
152
+
137
153
  for (const [key, value] of Object.entries(payloadJSON.body)) {
138
154
  const formData = processForm(key, value);
139
155
  Object.assign(combinedFormData, formData);
140
156
  }
141
- requestBody = {
142
- headers: payloadJSON.headers,
143
- multipart: combinedFormData,
144
- };
157
+
158
+ req = await requestMaker(
159
+ payloadJSON.headers || {},
160
+ combinedFormData || {},
161
+ requestDataType,
162
+ );
145
163
  break;
146
164
  default:
147
- requestBody = {
148
- headers: payloadJSON ? payloadJSON.headers : {},
149
- data: payloadJSON ? payloadJSON.body : {},
150
- };
165
+ req = await requestMaker(
166
+ payloadJSON.headers || {},
167
+ payloadJSON.body || {},
168
+ );
151
169
  }
152
170
 
153
- const res = await context.request.post(resolvedURL, requestBody);
171
+ const res = await context.request.post(resolvedURL, req);
154
172
 
155
- const header = await res.headers();
156
- let body;
157
- try {
158
- body = await res.json();
159
- } catch (e) {
160
- body = await res.text();
161
- }
173
+ const response = await responseMaker(payloadJSON, res);
162
174
 
163
- const response = {
164
- url: res.url(),
165
- requestHeaders: payloadJSON.headers,
166
- requestBody: payloadJSON.body,
167
- response: res,
168
- responseHeaders: header,
169
- responseBody: body,
170
- };
171
- context.response = response;
175
+ context.response = await response;
172
176
  },
173
- put: async (url, payload, bodyType) => {
177
+ put: async (url, payload, requestDataType) => {
174
178
  const URL = await selector(url);
175
179
  const resolvedURL = await resolveVariable(URL);
176
180
 
177
- const resolvedPayload = await resolveVariable(payload);
181
+ const resolvedPayload = (await payload) && resolveVariable(payload);
178
182
  const payloadJSON = (await resolvedPayload) && JSON.parse(resolvedPayload);
179
183
 
180
- let requestBody = {};
184
+ let req;
181
185
 
182
- switch (bodyType) {
186
+ switch (requestDataType) {
183
187
  case "multipart":
184
188
  let combinedFormData = {};
185
189
  for (const [key, value] of Object.entries(payloadJSON.body)) {
186
190
  const formData = processForm(key, value);
187
191
  Object.assign(combinedFormData, formData);
188
192
  }
189
- requestBody = {
190
- headers: payloadJSON.headers,
191
- multipart: combinedFormData,
192
- };
193
+
194
+ req = await requestMaker(
195
+ payloadJSON.headers || {},
196
+ combinedFormData || {},
197
+ requestDataType,
198
+ );
199
+
193
200
  break;
194
201
  default:
195
- requestBody = {
196
- headers: payloadJSON ? payloadJSON.headers : {},
197
- data: payloadJSON ? payloadJSON.body : {},
198
- };
202
+ req = await requestMaker(
203
+ payloadJSON.headers || {},
204
+ payloadJSON.body || {},
205
+ );
199
206
  }
200
207
 
201
- const res = await context.request.put(resolvedURL, requestBody);
208
+ const res = await context.request.put(resolvedURL, req);
202
209
 
203
- const header = await res.headers();
204
- let body;
205
- try {
206
- body = await res.json();
207
- } catch (e) {
208
- body = await res.text();
209
- }
210
+ const response = await responseMaker(payloadJSON, res);
210
211
 
211
- const response = {
212
- url: res.url(),
213
- requestHeaders: payloadJSON.headers,
214
- requestBody: payloadJSON.body,
215
- response: res,
216
- responseHeaders: header,
217
- responseBody: body,
218
- };
219
- context.response = response;
212
+ context.response = await response;
220
213
  },
221
- patch: async (url, payload, bodyType) => {
214
+ patch: async (url, payload, requestDataType) => {
222
215
  const URL = await selector(url);
223
216
  const resolvedURL = await resolveVariable(URL);
224
217
 
225
- const resolvedPayload = await resolveVariable(payload);
218
+ const resolvedPayload = (await payload) && resolveVariable(payload);
226
219
  const payloadJSON = (await resolvedPayload) && JSON.parse(resolvedPayload);
227
220
 
228
- let requestBody = {};
221
+ let req;
229
222
 
230
- switch (bodyType) {
223
+ switch (requestDataType) {
231
224
  case "multipart":
232
225
  let combinedFormData = {};
233
226
  for (const [key, value] of Object.entries(payloadJSON.body)) {
234
227
  const formData = processForm(key, value);
235
228
  Object.assign(combinedFormData, formData);
236
229
  }
237
- requestBody = {
238
- headers: payloadJSON.headers,
239
- multipart: combinedFormData,
240
- };
230
+
231
+ req = await requestMaker(
232
+ payloadJSON.headers || {},
233
+ combinedFormData || {},
234
+ requestDataType,
235
+ );
236
+
241
237
  break;
242
238
  default:
243
- requestBody = {
244
- headers: payloadJSON ? payloadJSON.headers : {},
245
- data: payloadJSON ? payloadJSON.body : {},
246
- };
239
+ req = await requestMaker(
240
+ payloadJSON.headers || {},
241
+ payloadJSON.body || {},
242
+ );
247
243
  }
248
244
 
249
- const res = await context.request.patch(resolvedURL, requestBody);
245
+ const res = await context.request.patch(resolvedURL, req);
250
246
 
251
- const header = await res.headers();
252
- let body;
253
- try {
254
- body = await res.json();
255
- } catch (e) {
256
- body = await res.text();
257
- }
247
+ const response = responseMaker(payloadJSON, res);
258
248
 
259
- const response = {
260
- url: res.url(),
261
- requestHeaders: payloadJSON.headers,
262
- requestBody: payloadJSON.body,
263
- response: res,
264
- responseHeaders: header,
265
- responseBody: body,
266
- };
267
- context.response = response;
249
+ context.response = await response;
268
250
  },
269
251
  delete: async (url, payload) => {
270
252
  const URL = await selector(url);
271
253
  const resolvedURL = await resolveVariable(URL);
272
254
 
273
- const resolvedPayload = await resolveVariable(payload);
255
+ const resolvedPayload = (await payload) && resolveVariable(payload);
274
256
  const payloadJSON = (await resolvedPayload) && JSON.parse(resolvedPayload);
275
257
 
276
- const res = await context.request.delete(resolvedURL, {
277
- headers: payloadJSON.headers,
278
- });
258
+ const req = await requestMaker(payloadJSON.headers || {});
279
259
 
280
- const header = await res.headers();
281
- let body;
282
- try {
283
- body = await res.json();
284
- } catch (e) {
285
- body = await res.text();
286
- }
260
+ const res = await context.request.delete(resolvedURL, req);
287
261
 
288
- const response = {
289
- url: res.url(),
290
- requestHeaders: payloadJSON.headers,
291
- response: res,
292
- responseHeaders: header,
293
- responseBody: body,
294
- };
262
+ const response = responseMaker(payloadJSON, res);
295
263
 
296
- context.response = response;
264
+ context.response = await response;
297
265
  },
298
266
  vars: () => {
299
267
  return context.vars;
@@ -56,10 +56,12 @@ After(async function ({ pickle, result }) {
56
56
  });
57
57
 
58
58
  if (context.response) {
59
- await this.attach(
60
- `Request Payload:\n${JSON.stringify(context.response, null, 2)}`,
61
- "text/plain",
62
- );
59
+ Object.entries(context.response).forEach(async ([key, value]) => {
60
+ await this.attach(
61
+ `${key}:\n${JSON.stringify(value, null, 2)}`,
62
+ "text/plain",
63
+ );
64
+ });
63
65
  }
64
66
 
65
67
  await context.page.close();