@checkdigit/eslint-plugin 7.6.0-PR.75-04b9 → 7.6.0-PR.75-c175
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/dist-mjs/agent/fetch.mjs +5 -1
- package/dist-mjs/agent/no-fixture.mjs +21 -3
- package/dist-mjs/agent/no-supertest.mjs +21 -13
- package/dist-mjs/agent/response-reference.mjs +9 -1
- package/dist-mjs/agent/supertest-then.mjs +170 -0
- package/dist-mjs/index.mjs +7 -2
- package/dist-types/agent/fetch.d.ts +1 -0
- package/dist-types/agent/response-reference.d.ts +1 -0
- package/dist-types/agent/supertest-then.d.ts +4 -0
- package/package.json +1 -1
- package/src/agent/fetch.ts +4 -0
- package/src/agent/no-fixture.ts +31 -1
- package/src/agent/no-supertest.ts +37 -17
- package/src/agent/response-reference.ts +17 -0
- package/src/agent/supertest-then.ts +230 -0
- package/src/index.ts +5 -0
package/dist-mjs/agent/fetch.mjs
CHANGED
|
@@ -4,6 +4,9 @@ import { getParent, isBlockStatement } from "../library/ts-tree.mjs";
|
|
|
4
4
|
function getResponseBodyRetrievalText(responseVariableName) {
|
|
5
5
|
return `await ${responseVariableName}.json()`;
|
|
6
6
|
}
|
|
7
|
+
function getResponseStatusRetrievalText(responseVariableName) {
|
|
8
|
+
return `${responseVariableName}.status`;
|
|
9
|
+
}
|
|
7
10
|
function getResponseHeadersRetrievalText(responseVariableName) {
|
|
8
11
|
return `${responseVariableName}.headers`;
|
|
9
12
|
}
|
|
@@ -33,7 +36,8 @@ function hasAssertions(fixtureCall) {
|
|
|
33
36
|
export {
|
|
34
37
|
getResponseBodyRetrievalText,
|
|
35
38
|
getResponseHeadersRetrievalText,
|
|
39
|
+
getResponseStatusRetrievalText,
|
|
36
40
|
hasAssertions,
|
|
37
41
|
isInvalidResponseHeadersAccess
|
|
38
42
|
};
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L2ZldGNoLnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQUVBLFNBQVMsc0JBQWdDO0FBRXpDLFNBQVMsV0FBVyx3QkFBd0I7QUFFckMsU0FBUyw2QkFBNkIsc0JBQThCO0FBQ3pFLFNBQU8sU0FBUyxvQkFBb0I7QUFDdEM7QUFFTyxTQUFTLCtCQUErQixzQkFBOEI7QUFDM0UsU0FBTyxHQUFHLG9CQUFvQjtBQUNoQztBQUVPLFNBQVMsZ0NBQWdDLHNCQUE4QjtBQUM1RSxTQUFPLEdBQUcsb0JBQW9CO0FBQ2hDO0FBRU8sU0FBUywrQkFBK0IsdUJBQStDO0FBQzVGLFFBQU0sNkJBQTZCLFVBQVUscUJBQXFCO0FBQ2xFLE1BQUksNEJBQTRCLFNBQVMsZUFBZSxvQkFBb0I7QUFDMUUsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUNFLDRCQUE0QixTQUFTLGVBQWUsa0JBQ3BELDJCQUEyQixPQUFPLFNBQVMsZUFBZSxvQkFDMUQsMkJBQTJCLE9BQU8sU0FBUyxTQUFTLGVBQWUsY0FDbkUsMkJBQTJCLE9BQU8sU0FBUyxTQUFTLE9BQ3BEO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPLEVBQ0wsNEJBQTRCLFNBQVMsZUFBZSxvQkFDcEQsMkJBQTJCLFNBQVMsU0FBUyxlQUFlLGNBQzVELDJCQUEyQixTQUFTLFNBQVM7QUFFakQ7QUFFTyxTQUFTLGNBQWMsYUFBcUM7QUFDakUsTUFBSSxpQkFBaUIsV0FBVyxHQUFHO0FBQ2pDLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxTQUFTLFVBQVUsV0FBVztBQUNwQyxNQUFJLENBQUMsUUFBUTtBQUNYLFdBQU87QUFBQSxFQUNUO0FBRUEsTUFDRSxPQUFPLFNBQVMsZUFBZSxvQkFDL0IsT0FBTyxTQUFTLFNBQVMsZUFBZSxjQUN4QyxPQUFPLFNBQVMsU0FBUyxZQUN6QixVQUFVLE1BQU0sR0FBRyxTQUFTLGVBQWUsZ0JBQzNDO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPLGNBQWMsTUFBTTtBQUM3QjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -12,7 +12,12 @@ import getDocumentationUrl from "../get-documentation-url.mjs";
|
|
|
12
12
|
import { getIndentation } from "../library/format.mjs";
|
|
13
13
|
import { isValidPropertyName } from "../library/variable.mjs";
|
|
14
14
|
import { analyzeResponseReferences } from "./response-reference.mjs";
|
|
15
|
-
import {
|
|
15
|
+
import {
|
|
16
|
+
getResponseBodyRetrievalText,
|
|
17
|
+
getResponseHeadersRetrievalText,
|
|
18
|
+
getResponseStatusRetrievalText,
|
|
19
|
+
hasAssertions
|
|
20
|
+
} from "./fetch.mjs";
|
|
16
21
|
import { replaceEndpointUrlPrefixWithBasePath } from "./url.mjs";
|
|
17
22
|
var ruleId = "no-fixture";
|
|
18
23
|
function analyzeFixtureCall(call, results, sourceCode) {
|
|
@@ -36,6 +41,9 @@ function analyzeFixtureCall(call, results, sourceCode) {
|
|
|
36
41
|
if (awaitParent.property.type === AST_NODE_TYPES.Identifier && awaitParent.property.name === "body") {
|
|
37
42
|
results.inlineBodyReference = awaitParent;
|
|
38
43
|
}
|
|
44
|
+
if (awaitParent.property.type === AST_NODE_TYPES.Identifier && (awaitParent.property.name === "status" || awaitParent.property.name === "statusCode")) {
|
|
45
|
+
results.inlineStatusReference = awaitParent;
|
|
46
|
+
}
|
|
39
47
|
if (awaitParent.property.type === AST_NODE_TYPES.Identifier && (awaitParent.property.name === "header" || awaitParent.property.name === "headers")) {
|
|
40
48
|
results.inlineHeadersReference = awaitParent;
|
|
41
49
|
}
|
|
@@ -211,6 +219,7 @@ var rule = createRule({
|
|
|
211
219
|
headersReferences: responseHeadersReferences,
|
|
212
220
|
statusReferences: responseStatusReferences,
|
|
213
221
|
destructuringBodyVariable: destructuringResponseBodyVariable,
|
|
222
|
+
destructuringStatusVariable: destructuringResponseStatusVariable,
|
|
214
223
|
destructuringHeadersVariable: destructuringResponseHeadersVariable
|
|
215
224
|
} = analyzeResponseReferences(fixtureCallInformation.variableDeclaration, scopeManager);
|
|
216
225
|
const originalUrlArgumentText = sourceCode.getText(urlArgumentNode);
|
|
@@ -243,10 +252,12 @@ ${indentation}`);
|
|
|
243
252
|
);
|
|
244
253
|
const isResponseBodyVariableRedefinitionNeeded = destructuringResponseBodyVariable !== void 0 || fixtureCallInformation.inlineBodyReference !== void 0 || responseBodyReferences.length > 0 && !responseBodyReferences.some(isResponseBodyRedefinition);
|
|
245
254
|
const redefineResponseBodyVariableName = `${responseVariableNameToUse}Body`;
|
|
255
|
+
const isResponseStatusVariableRedefinitionNeeded = destructuringResponseStatusVariable !== void 0 || fixtureCallInformation.inlineStatusReference !== void 0;
|
|
256
|
+
const redefineResponseStatusVariableName = `${responseVariableNameToUse}Status`;
|
|
246
257
|
const isResponseHeadersVariableRedefinitionNeeded = destructuringResponseHeadersVariable !== void 0 && // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
247
258
|
destructuringResponseHeadersVariable.type === AST_NODE_TYPES.ObjectPattern || fixtureCallInformation.inlineHeadersReference !== void 0;
|
|
248
259
|
const redefineResponseHeadersVariableName = `${responseVariableNameToUse}Headers`;
|
|
249
|
-
const isResponseVariableRedefinitionNeeded = fixtureCallInformation.variableAssignment === void 0 && responseVariable === void 0 && fixtureCallInformation.assertions !== void 0 || isResponseBodyVariableRedefinitionNeeded || isResponseHeadersVariableRedefinitionNeeded;
|
|
260
|
+
const isResponseVariableRedefinitionNeeded = fixtureCallInformation.variableAssignment === void 0 && responseVariable === void 0 && fixtureCallInformation.assertions !== void 0 || isResponseBodyVariableRedefinitionNeeded || isResponseStatusVariableRedefinitionNeeded || isResponseHeadersVariableRedefinitionNeeded;
|
|
250
261
|
const responseBodyHeadersVariableRedefineLines = isResponseVariableRedefinitionNeeded ? [
|
|
251
262
|
// eslint-disable-next-line no-nested-ternary
|
|
252
263
|
...destructuringResponseBodyVariable ? [
|
|
@@ -256,6 +267,13 @@ ${indentation}`);
|
|
|
256
267
|
`const ${redefineResponseBodyVariableName} = ${getResponseBodyRetrievalText(responseVariableNameToUse)}`
|
|
257
268
|
] : [],
|
|
258
269
|
// eslint-disable-next-line no-nested-ternary
|
|
270
|
+
...destructuringResponseStatusVariable ? [
|
|
271
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
272
|
+
`${fixtureCallInformation.variableDeclaration?.kind ?? "const"} ${destructuringResponseStatusVariable.type === AST_NODE_TYPES.ObjectPattern ? sourceCode.getText(destructuringResponseStatusVariable) : destructuringResponseStatusVariable.name} = ${getResponseStatusRetrievalText(responseVariableNameToUse)}`
|
|
273
|
+
] : isResponseStatusVariableRedefinitionNeeded ? [
|
|
274
|
+
`const ${redefineResponseStatusVariableName} = ${getResponseStatusRetrievalText(responseVariableNameToUse)}`
|
|
275
|
+
] : [],
|
|
276
|
+
// eslint-disable-next-line no-nested-ternary
|
|
259
277
|
...destructuringResponseHeadersVariable ? (
|
|
260
278
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
261
279
|
destructuringResponseHeadersVariable.type === AST_NODE_TYPES.ObjectPattern ? destructuringResponseHeadersVariable.properties.map((property) => {
|
|
@@ -361,4 +379,4 @@ export {
|
|
|
361
379
|
no_fixture_default as default,
|
|
362
380
|
ruleId
|
|
363
381
|
};
|
|
364
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L25vLWZpeHR1cmUudHMiXSwKICAibWFwcGluZ3MiOiAiO0FBUUEsU0FBUyxVQUFVLGNBQWM7QUFFakMsU0FBUyxnQkFBZ0IsbUJBQTZCO0FBSXREO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsT0FBTyx5QkFBeUI7QUFDaEMsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUywyQkFBMkI7QUFDcEMsU0FBUyxpQ0FBaUM7QUFDMUMsU0FBUyw4QkFBOEIsaUNBQWlDLHFCQUFxQjtBQUM3RixTQUFTLDRDQUE0QztBQUU5QyxJQUFNLFNBQVM7QUF1QnRCLFNBQVMsbUJBQW1CLE1BQStCLFNBQWlDLFlBQXdCO0FBQ2xILFFBQU0sU0FBUyxVQUFVLElBQUk7QUFDN0IsU0FBTyxHQUFHLFFBQVEscURBQXFEO0FBRXZFLE1BQUk7QUFDSixNQUFJLE9BQU8sU0FBUyxlQUFlLGlCQUFpQjtBQUVsRCxZQUFRLGNBQWM7QUFDdEIsWUFBUSxXQUFXO0FBQUEsRUFDckIsV0FDRSxPQUFPLFNBQVMsZUFBZSxtQkFDL0IsT0FBTyxTQUFTLGVBQWUsa0JBQy9CLE9BQU8sU0FBUyxlQUFlLHlCQUMvQjtBQUVBLFlBQVEsY0FBYztBQUN0QixZQUFRLFdBQVc7QUFBQSxFQUNyQixXQUFXLE9BQU8sU0FBUyxlQUFlLGlCQUFpQjtBQUN6RCxZQUFRLGNBQWM7QUFDdEIsVUFBTSxxQkFBcUIsc0JBQXNCLE1BQU07QUFDdkQsV0FBTyxHQUFHLGtCQUFrQjtBQUM1QixVQUFNLGNBQWMsVUFBVSxNQUFNO0FBQ3BDLFFBQUksYUFBYSxTQUFTLGVBQWUsa0JBQWtCO0FBQ3pELGNBQVEsV0FBVztBQUNuQixjQUFRLHNCQUFzQjtBQUM5QixVQUFJLFlBQVksU0FBUyxTQUFTLGVBQWUsY0FBYyxZQUFZLFNBQVMsU0FBUyxRQUFRO0FBQ25HLGdCQUFRLHNCQUFzQjtBQUFBLE1BQ2hDO0FBQ0Es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
|
|
382
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L25vLWZpeHR1cmUudHMiXSwKICAibWFwcGluZ3MiOiAiO0FBUUEsU0FBUyxVQUFVLGNBQWM7QUFFakMsU0FBUyxnQkFBZ0IsbUJBQTZCO0FBSXREO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsT0FBTyx5QkFBeUI7QUFDaEMsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUywyQkFBMkI7QUFDcEMsU0FBUyxpQ0FBaUM7QUFDMUM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsNENBQTRDO0FBRTlDLElBQU0sU0FBUztBQXdCdEIsU0FBUyxtQkFBbUIsTUFBK0IsU0FBaUMsWUFBd0I7QUFDbEgsUUFBTSxTQUFTLFVBQVUsSUFBSTtBQUM3QixTQUFPLEdBQUcsUUFBUSxxREFBcUQ7QUFFdkUsTUFBSTtBQUNKLE1BQUksT0FBTyxTQUFTLGVBQWUsaUJBQWlCO0FBRWxELFlBQVEsY0FBYztBQUN0QixZQUFRLFdBQVc7QUFBQSxFQUNyQixXQUNFLE9BQU8sU0FBUyxlQUFlLG1CQUMvQixPQUFPLFNBQVMsZUFBZSxrQkFDL0IsT0FBTyxTQUFTLGVBQWUseUJBQy9CO0FBRUEsWUFBUSxjQUFjO0FBQ3RCLFlBQVEsV0FBVztBQUFBLEVBQ3JCLFdBQVcsT0FBTyxTQUFTLGVBQWUsaUJBQWlCO0FBQ3pELFlBQVEsY0FBYztBQUN0QixVQUFNLHFCQUFxQixzQkFBc0IsTUFBTTtBQUN2RCxXQUFPLEdBQUcsa0JBQWtCO0FBQzVCLFVBQU0sY0FBYyxVQUFVLE1BQU07QUFDcEMsUUFBSSxhQUFhLFNBQVMsZUFBZSxrQkFBa0I7QUFDekQsY0FBUSxXQUFXO0FBQ25CLGNBQVEsc0JBQXNCO0FBQzlCLFVBQUksWUFBWSxTQUFTLFNBQVMsZUFBZSxjQUFjLFlBQVksU0FBUyxTQUFTLFFBQVE7QUFDbkcsZ0JBQVEs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
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
import getDocumentationUrl from "../get-documentation-url.mjs";
|
|
12
12
|
import { getIndentation } from "../library/format.mjs";
|
|
13
13
|
import { analyzeResponseReferences } from "./response-reference.mjs";
|
|
14
|
-
import { getResponseBodyRetrievalText, getResponseHeadersRetrievalText } from "./fetch.mjs";
|
|
14
|
+
import { getResponseBodyRetrievalText, getResponseHeadersRetrievalText, getResponseStatusRetrievalText } from "./fetch.mjs";
|
|
15
15
|
var ruleId = "no-supertest";
|
|
16
16
|
function analyzeFixtureCall(call, results, sourceCode) {
|
|
17
17
|
const parent = getParent(call);
|
|
@@ -34,6 +34,9 @@ function analyzeFixtureCall(call, results, sourceCode) {
|
|
|
34
34
|
if (awaitParent.property.type === AST_NODE_TYPES.Identifier && awaitParent.property.name === "body") {
|
|
35
35
|
results.inlineBodyReference = awaitParent;
|
|
36
36
|
}
|
|
37
|
+
if (awaitParent.property.type === AST_NODE_TYPES.Identifier && (awaitParent.property.name === "status" || awaitParent.property.name === "statusCode")) {
|
|
38
|
+
results.inlineStatusReference = awaitParent;
|
|
39
|
+
}
|
|
37
40
|
if (awaitParent.property.type === AST_NODE_TYPES.Identifier && (awaitParent.property.name === "header" || awaitParent.property.name === "headers")) {
|
|
38
41
|
results.inlineHeadersReference = awaitParent;
|
|
39
42
|
}
|
|
@@ -192,23 +195,18 @@ var rule = createRule({
|
|
|
192
195
|
return {
|
|
193
196
|
// eslint-disable-next-line max-lines-per-function
|
|
194
197
|
'CallExpression[callee.property.name="expect"]': (supertestCall) => {
|
|
195
|
-
assert.ok(supertestCall.callee.type === AST_NODE_TYPES.MemberExpression);
|
|
196
|
-
if (supertestCall.callee.object.type === AST_NODE_TYPES.CallExpression && supertestCall.callee.object.callee.type === AST_NODE_TYPES.MemberExpression && supertestCall.callee.object.callee.property.type === AST_NODE_TYPES.Identifier && supertestCall.callee.object.callee.property.name === "expect") {
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
198
|
try {
|
|
200
|
-
|
|
199
|
+
assert.ok(supertestCall.callee.type === AST_NODE_TYPES.MemberExpression);
|
|
200
|
+
if (supertestCall.callee.object.type !== AST_NODE_TYPES.CallExpression || supertestCall.callee.object.callee.type === AST_NODE_TYPES.MemberExpression && supertestCall.callee.object.callee.property.type === AST_NODE_TYPES.Identifier && supertestCall.callee.object.callee.property.name === "expect") {
|
|
201
201
|
return;
|
|
202
202
|
}
|
|
203
|
-
|
|
204
|
-
if (fixtureFunction.type !== AST_NODE_TYPES.CallExpression) {
|
|
203
|
+
if (isUsedInArrayOrAsArgument(supertestCall) || getEnclosingFunction(supertestCall)?.async === false) {
|
|
205
204
|
return;
|
|
206
205
|
}
|
|
207
206
|
const indentation = getIndentation(supertestCall, sourceCode);
|
|
208
207
|
const fixtureCallInformation = {};
|
|
208
|
+
const fixtureFunction = supertestCall.callee.object;
|
|
209
209
|
analyzeFixtureCall(fixtureFunction, fixtureCallInformation, sourceCode);
|
|
210
|
-
sourceCode.getText(fixtureCallInformation.fixtureNode);
|
|
211
|
-
sourceCode.getText(fixtureCallInformation.rootNode);
|
|
212
210
|
fixtureCallInformation.assertions?.flat().map((ass) => sourceCode.getText(ass));
|
|
213
211
|
const {
|
|
214
212
|
variable: responseVariable,
|
|
@@ -216,7 +214,8 @@ var rule = createRule({
|
|
|
216
214
|
headersReferences: responseHeadersReferences,
|
|
217
215
|
statusReferences: responseStatusReferences,
|
|
218
216
|
destructuringBodyVariable: destructuringResponseBodyVariable,
|
|
219
|
-
destructuringHeadersVariable: destructuringResponseHeadersVariable
|
|
217
|
+
destructuringHeadersVariable: destructuringResponseHeadersVariable,
|
|
218
|
+
destructuringStatusVariable: destructuringResponseStatusVariable
|
|
220
219
|
} = analyzeResponseReferences(fixtureCallInformation.variableDeclaration, scopeManager);
|
|
221
220
|
const responseVariableNameToUse = getResponseVariableNameToUse(
|
|
222
221
|
scopeManager,
|
|
@@ -225,10 +224,12 @@ var rule = createRule({
|
|
|
225
224
|
);
|
|
226
225
|
const isResponseBodyVariableRedefinitionNeeded = destructuringResponseBodyVariable !== void 0 || fixtureCallInformation.inlineBodyReference !== void 0 || responseBodyReferences.length > 0 && !responseBodyReferences.some(isResponseBodyRedefinition);
|
|
227
226
|
const redefineResponseBodyVariableName = `${responseVariableNameToUse}Body`;
|
|
227
|
+
const isResponseStatusVariableRedefinitionNeeded = destructuringResponseStatusVariable !== void 0 || fixtureCallInformation.inlineStatusReference !== void 0;
|
|
228
|
+
const redefineResponseStatusVariableName = `${responseVariableNameToUse}Status`;
|
|
228
229
|
const isResponseHeadersVariableRedefinitionNeeded = destructuringResponseHeadersVariable !== void 0 && // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
229
230
|
destructuringResponseHeadersVariable.type === AST_NODE_TYPES.ObjectPattern || fixtureCallInformation.inlineHeadersReference !== void 0;
|
|
230
231
|
const redefineResponseHeadersVariableName = `${responseVariableNameToUse}Headers`;
|
|
231
|
-
const isResponseVariableRedefinitionNeeded = fixtureCallInformation.variableAssignment === void 0 && responseVariable === void 0 && fixtureCallInformation.assertions !== void 0 || isResponseBodyVariableRedefinitionNeeded || isResponseHeadersVariableRedefinitionNeeded;
|
|
232
|
+
const isResponseVariableRedefinitionNeeded = fixtureCallInformation.variableAssignment === void 0 && responseVariable === void 0 && fixtureCallInformation.assertions !== void 0 || isResponseBodyVariableRedefinitionNeeded || isResponseStatusVariableRedefinitionNeeded || isResponseHeadersVariableRedefinitionNeeded;
|
|
232
233
|
const responseBodyHeadersVariableRedefineLines = isResponseVariableRedefinitionNeeded ? [
|
|
233
234
|
// eslint-disable-next-line no-nested-ternary
|
|
234
235
|
...destructuringResponseBodyVariable ? [
|
|
@@ -238,6 +239,13 @@ var rule = createRule({
|
|
|
238
239
|
`const ${redefineResponseBodyVariableName} = ${getResponseBodyRetrievalText(responseVariableNameToUse)}`
|
|
239
240
|
] : [],
|
|
240
241
|
// eslint-disable-next-line no-nested-ternary
|
|
242
|
+
...destructuringResponseStatusVariable ? [
|
|
243
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
244
|
+
`${fixtureCallInformation.variableDeclaration?.kind ?? "const"} ${destructuringResponseStatusVariable.type === AST_NODE_TYPES.ObjectPattern ? sourceCode.getText(destructuringResponseStatusVariable) : destructuringResponseStatusVariable.name} = ${getResponseStatusRetrievalText(responseVariableNameToUse)}`
|
|
245
|
+
] : isResponseStatusVariableRedefinitionNeeded ? [
|
|
246
|
+
`const ${redefineResponseStatusVariableName} = ${getResponseStatusRetrievalText(responseVariableNameToUse)}`
|
|
247
|
+
] : [],
|
|
248
|
+
// eslint-disable-next-line no-nested-ternary
|
|
241
249
|
...destructuringResponseHeadersVariable ? (
|
|
242
250
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
243
251
|
destructuringResponseHeadersVariable.type === AST_NODE_TYPES.ObjectPattern ? destructuringResponseHeadersVariable.properties.map((property) => {
|
|
@@ -343,4 +351,4 @@ export {
|
|
|
343
351
|
no_supertest_default as default,
|
|
344
352
|
ruleId
|
|
345
353
|
};
|
|
346
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L25vLXN1cGVydGVzdC50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFRQSxTQUFTLFVBQVUsY0FBYztBQUVqQyxTQUFTLGdCQUFnQixtQkFBNkI7QUFJdEQ7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxPQUFPLHlCQUF5QjtBQUNoQyxTQUFTLHNCQUFzQjtBQUMvQixTQUFTLGlDQUFpQztBQUMxQyxTQUFTLDhCQUE4Qix1Q0FBdUM7QUFFdkUsSUFBTSxTQUFTO0FBdUJ0QixTQUFTLG1CQUFtQixNQUErQixTQUFpQyxZQUF3QjtBQUNsSCxRQUFNLFNBQVMsVUFBVSxJQUFJO0FBQzdCLFNBQU8sR0FBRyxRQUFRLHFEQUFxRDtBQUV2RSxNQUFJO0FBQ0osTUFBSSxPQUFPLFNBQVMsZUFBZSxpQkFBaUI7QUFFbEQsWUFBUSxjQUFjO0FBQ3RCLFlBQVEsV0FBVztBQUFBLEVBQ3JCLFdBQ0UsT0FBTyxTQUFTLGVBQWUsbUJBQy9CLE9BQU8sU0FBUyxlQUFlLGtCQUMvQixPQUFPLFNBQVMsZUFBZSx5QkFDL0I7QUFFQSxZQUFRLGNBQWM7QUFDdEIsWUFBUSxXQUFXO0FBQUEsRUFDckIsV0FBVyxPQUFPLFNBQVMsZUFBZSxpQkFBaUI7QUFDekQsWUFBUSxjQUFjO0FBQ3RCLFVBQU0scUJBQXFCLHNCQUFzQixNQUFNO0FBQ3ZELFdBQU8sR0FBRyxrQkFBa0I7QUFDNUIsVUFBTSxjQUFjLFVBQVUsTUFBTTtBQUNwQyxRQUFJLGFBQWEsU0FBUyxlQUFlLGtCQUFrQjtBQUN6RCxjQUFRLFdBQVc7QUFDbkIsY0FBUSxzQkFBc0I7QUFDOUIsVUFBSSxZQUFZLFNBQVMsU0FBUyxlQUFlLGNBQWMsWUFBWSxTQUFTLFNBQVMsUUFBUTtBQUNuRyxnQkFBUSxzQkFBc0I7QUFBQSxNQUNoQztBQUNBLFVBQ0UsWUFBWSxTQUFTLFNBQVMsZUFBZSxlQUM1QyxZQUFZLFNBQVMs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
|
|
354
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L25vLXN1cGVydGVzdC50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFRQSxTQUFTLFVBQVUsY0FBYztBQUVqQyxTQUFTLGdCQUFnQixtQkFBNkI7QUFJdEQ7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxPQUFPLHlCQUF5QjtBQUNoQyxTQUFTLHNCQUFzQjtBQUMvQixTQUFTLGlDQUFpQztBQUMxQyxTQUFTLDhCQUE4QixpQ0FBaUMsc0NBQXNDO0FBRXZHLElBQU0sU0FBUztBQXdCdEIsU0FBUyxtQkFBbUIsTUFBK0IsU0FBaUMsWUFBd0I7QUFDbEgsUUFBTSxTQUFTLFVBQVUsSUFBSTtBQUM3QixTQUFPLEdBQUcsUUFBUSxxREFBcUQ7QUFFdkUsTUFBSTtBQUNKLE1BQUksT0FBTyxTQUFTLGVBQWUsaUJBQWlCO0FBRWxELFlBQVEsY0FBYztBQUN0QixZQUFRLFdBQVc7QUFBQSxFQUNyQixXQUNFLE9BQU8sU0FBUyxlQUFlLG1CQUMvQixPQUFPLFNBQVMsZUFBZSxrQkFDL0IsT0FBTyxTQUFTLGVBQWUseUJBQy9CO0FBRUEsWUFBUSxjQUFjO0FBQ3RCLFlBQVEsV0FBVztBQUFBLEVBQ3JCLFdBQVcsT0FBTyxTQUFTLGVBQWUsaUJBQWlCO0FBQ3pELFlBQVEsY0FBYztBQUN0QixVQUFNLHFCQUFxQixzQkFBc0IsTUFBTTtBQUN2RCxXQUFPLEdBQUcsa0JBQWtCO0FBQzVCLFVBQU0sY0FBYyxVQUFVLE1BQU07QUFDcEMsUUFBSSxhQUFhLFNBQVMsZUFBZSxrQkFBa0I7QUFDekQsY0FBUSxXQUFXO0FBQ25CLGNBQVEsc0JBQXNCO0FBQzlCLFVBQUksWUFBWSxTQUFTLFNBQVMsZUFBZSxjQUFjLFlBQVksU0FBUyxTQUFTLFFBQVE7QUFDbkcsZ0JBQVEsc0JBQXNCO0FBQUEsTUFDaEM7QUFDQSxVQUNFLFlBQVksU0FBUyxTQUFTLGVBQWUsZUFDNUMsWUFBWSxTQUFTLFNBQVMsWUFBWSxZQUFZLFNBQVMsU0FBUyxlQUN6RTtBQUNBLGdCQUFRLHdCQUF3QjtBQUFBLE1BQ2xDO0FBQ0EsVUFDRSxZQUFZLFNBQVMsU0FBUyxlQUFlLGVBQzVDLFlBQVksU0FBUyxTQUFTLFlBQVksWUFBWSxTQUFTLFNBQVMsWUFDekU7QUFDQSxnQkFBUSx5QkFBeUI7QUFBQSxNQUNuQztBQUFBLElBQ0YsV0FBVyxtQkFBbUIsU0FBUyxlQUFlLHFCQUFxQjtBQUN6RSxjQUFRLHNCQUFzQjtBQUM5QixjQUFRLFdBQVc7QUFBQSxJQUNyQixXQUNFLG1CQUFtQixTQUFTLGVBQWUsdUJBQzNDLG1CQUFtQixXQUFXLFNBQVMsZUFBZSxzQkFDdEQ7QUFDQSxjQUFRLHFCQUFxQjtBQUM3QixjQUFRLFdBQVc7QUFBQSxJQUNyQixPQUFPO0FBQ0wsY0FBUSxXQUFXO0FBQUEsSUFDckI7QUFBQSxFQUNGLFdBQVcsT0FBTyxTQUFTLGVBQWUsb0JBQW9CLE9BQU8sU0FBUyxTQUFTLGVBQWUsWUFBWTtBQUNoSCxRQUFJLE9BQU8sU0FBUyxTQUFTLFVBQVU7QUFFckMsWUFBTSxnQkFBZ0IsVUFBVSxNQUFNO0FBQ3RDLGFBQU8sR0FBRyxpQkFBaUIsY0FBYyxTQUFTLGVBQWUsY0FBYztBQUMvRSxjQUFRLGFBQWEsQ0FBQyxHQUFJLFFBQVEsY0FBYyxDQUFDLEdBQUksY0FBYyxTQUFrQztBQUNyRyxpQkFBVztBQUFBLElBQ2IsV0FBVyxPQUFPLFNBQVMsU0FBUyxRQUFRO0FBRTFDLFlBQU0sc0JBQXNCLFVBQVUsTUFBTTtBQUM1QyxhQUFPLEdBQUcsdUJBQXVCLG9CQUFvQixTQUFTLGVBQWUsY0FBYztBQUMzRixjQUFRLGNBQWMsb0JBQW9CLFVBQVUsQ0FBQztBQUNyRCxpQkFBVztBQUFBLElBQ2IsV0FBVyxPQUFPLFNBQVMsU0FBUyxPQUFPO0FBRXpDLFlBQU0sdUJBQXVCLFVBQVUsTUFBTTtBQUM3QyxhQUFPLEdBQUcsd0JBQXdCLHFCQUFxQixTQUFTLGVBQWUsY0FBYztBQUM3RixZQUFNLENBQUMsTUFBTSxJQUFJLElBQUkscUJBQXFCO0FBQzFDLFVBQUksS0FBSyxTQUFTLGVBQWUsa0JBQWtCO0FBQ2pELGdCQUFRLDhCQUE4QjtBQUFBLE1BQ3hDLE9BQU87QUFDTCxnQkFBUSxpQkFBaUIsQ0FBQyxHQUFJLFFBQVEsa0JBQWtCLENBQUMsR0FBSSxFQUFFLE1BQU0sTUFBTSxPQUFPLEtBQUssQ0FBQztBQUFBLE1BQzFGO0FBQ0EsaUJBQVc7QUFBQSxJQUNiO0FBQUEsRUFDRixPQUFPO0FBQ0wsVUFBTSxJQUFJLE1BQU0sbURBQW1ELFdBQVcsUUFBUSxNQUFNLENBQUMsR0FBRztBQUFBLEVBQ2xHO0FBQ0EsTUFBSSxVQUFVO0FBQ1osdUJBQW1CLFVBQVUsU0FBUyxVQUFVO0FBQUEsRUFDbEQ7QUFDRjtBQUdBLFNBQVMseUJBQ1Asd0JBQ0EsWUFDQSxzQkFDQSxzQ0FDQTtBQUNBLE1BQUk7QUFDSixRQUFNLHNCQUFnQyxDQUFDO0FBQ3ZDLGFBQVcsbUJBQW1CLHVCQUF1QixjQUFjLENBQUMsR0FBRztBQUNyRSxRQUFJLGdCQUFnQixXQUFXLEdBQUc7QUFDaEMsWUFBTSxDQUFDLGlCQUFpQixJQUFJO0FBQzVCLGFBQU8sR0FBRyxpQkFBaUI7QUFDM0IsVUFDRyxrQkFBa0IsU0FBUyxlQUFlLG9CQUN6QyxrQkFBa0IsT0FBTyxTQUFTLGVBQWUsY0FDakQsa0JBQWtCLE9BQU8sU0FBUyxpQkFDcEMsa0JBQWtCLFNBQVMsZUFBZSxXQUMxQyxXQUFXLFFBQVEsaUJBQWlCLEVBQUUsU0FBUyxjQUFjLEdBQzdEO0FBRUEsMEJBQWtCLGdCQUFnQixvQkFBb0IsWUFBWSxXQUFXLFFBQVEsaUJBQWlCLENBQUM7QUFBQSxNQUN6RyxXQUFXLGtCQUFrQixTQUFTLGVBQWUseUJBQXlCO0FBRTVFLFlBQUksZUFBZSxXQUFXLFFBQVEsa0JBQWtCLElBQUk7QUFFNUQsY0FBTSxDQUFDLHdCQUF3QixJQUFJLGtCQUFrQjtBQUNyRCxlQUFPLEdBQUcsMEJBQTBCLFNBQVMsZUFBZSxVQUFVO0FBQ3RFLGNBQU0sK0JBQStCLHlCQUF5QjtBQUM5RCxZQUFJLGlDQUFpQyxzQkFBc0I7QUFDekQseUJBQWUsYUFBYTtBQUFBLFlBQzFCLElBQUksT0FBTyxNQUFNLDRCQUE0QixPQUFPLElBQUk7QUFBQSxZQUN4RDtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQ0EsNEJBQW9CLEtBQUssMkJBQTJCLFlBQVksR0FBRztBQUFBLE1BQ3JFLFdBQVcsa0JBQWtCLFNBQVMsZUFBZSxZQUFZO0FBRS9ELDRCQUFvQjtBQUFBLFVBQ2xCLDJCQUEyQixXQUFXLFFBQVEsaUJBQWlCLENBQUMsSUFBSSxvQkFBb0I7QUFBQSxRQUMxRjtBQUFBLE1BQ0YsV0FDRSxrQkFBa0IsU0FBUyxlQUFlLG9CQUMxQyxrQkFBa0IsU0FBUyxlQUFlLGdCQUMxQztBQUVBLDRCQUFvQjtBQUFBLFVBQ2xCLDBCQUEwQixvQkFBb0IsWUFBWSxXQUFXLFFBQVEsaUJBQWlCLENBQUM7QUFBQSxRQUNqRztBQUFBLE1BQ0YsT0FBTztBQUNMLGNBQU0sSUFBSSxNQUFNLHFEQUFxRCxXQUFXLFFBQVEsaUJBQWlCLENBQUMsR0FBRztBQUFBLE1BQy9HO0FBQUEsSUFDRixXQUFXLGdCQUFnQixXQUFXLEdBQUc7QUFFdkMsWUFBTSxDQUFDLFlBQVksV0FBVyxJQUFJO0FBQ2xDLGFBQU8sR0FBRyxjQUFjLFdBQVc7QUFDbkMsWUFBTSxtQkFDSix5Q0FBeUMsU0FDckMscUNBQXFDLE9BQ3JDLEdBQUcsb0JBQW9CO0FBQzdCLFVBQUksWUFBWSxTQUFTLGVBQWUsV0FBVyxZQUFZLGlCQUFpQixRQUFRO0FBQ3RGLDRCQUFvQjtBQUFBLFVBQ2xCLGFBQWEsZ0JBQWdCLFFBQVEsV0FBVyxRQUFRLFVBQVUsQ0FBQyxXQUFXLFdBQVcsUUFBUSxXQUFXLENBQUM7QUFBQSxRQUMvRztBQUFBLE1BQ0YsT0FBTztBQUNMLDRCQUFvQjtBQUFBLFVBQ2xCLGdCQUFnQixnQkFBZ0IsUUFBUSxXQUFXLFFBQVEsVUFBVSxDQUFDLE1BQU0sV0FBVyxRQUFRLFdBQVcsQ0FBQztBQUFBLFFBQzdHO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0EsU0FBTztBQUFBLElBQ0w7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUNGO0FBRUEsU0FBUyw2QkFDUCxjQUNBLHdCQUNBLG1CQUNBO0FBQ0EsTUFBSSx1QkFBdUIsb0JBQW9CO0FBQzdDLFdBQU87QUFBQSxNQUNMLHVCQUF1QixtQkFBbUIsV0FBVyxTQUFTLGVBQWUsd0JBQzNFLHVCQUF1QixtQkFBbUIsV0FBVyxLQUFLLFNBQVMsZUFBZTtBQUFBLElBQ3RGO0FBQ0EsV0FBTyx1QkFBdUIsbUJBQW1CLFdBQVcsS0FBSztBQUFBLEVBQ25FO0FBRUEsTUFBSSx1QkFBdUIscUJBQXFCO0FBQzlDLFVBQU0sbUJBQW1CLHVCQUF1QixvQkFBb0IsYUFBYSxDQUFDO0FBRWxGLFFBQUkscUJBQXFCLFVBQWEsaUJBQWlCLEdBQUcsU0FBUyxlQUFlLFlBQVk7QUFDNUYsYUFBTyxpQkFBaUIsR0FBRztBQUFBLElBQzdCO0FBQUEsRUFDRjtBQUVBLFFBQU0scUJBQXFCLHNCQUFzQix1QkFBdUIsUUFBUTtBQUNoRixlQUFhLHFCQUFxQix1QkFBdUIsUUFBUTtBQUNqRSxTQUFPLEdBQUcsa0JBQWtCO0FBQzVCLFFBQU0sUUFBUSxhQUFhLFFBQVEsa0JBQWtCO0FBQ3JELFNBQU8sR0FBRyxVQUFVLElBQUk7QUFDeEIsTUFBSSxpQkFBaUIsa0JBQWtCLElBQUksS0FBSztBQUNoRCxNQUFJLENBQUMsZ0JBQWdCO0FBQ25CLHFCQUFpQixDQUFDLEdBQUcsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNyQyxzQkFBa0IsSUFBSSxPQUFPLGNBQWM7QUFBQSxFQUM3QztBQUVBLE1BQUksMEJBQTBCO0FBQzlCLE1BQUk7QUFDSixTQUFPLDhCQUE4QixRQUFXO0FBQzlDO0FBQ0EsZ0NBQTRCLFdBQVcsNEJBQTRCLElBQUksS0FBSyx3QkFBd0IsU0FBUyxDQUFDO0FBQzlHLFFBQUksZUFBZSxTQUFTLHlCQUF5QixHQUFHO0FBQ3RELGtDQUE0QjtBQUFBLElBQzlCO0FBQUEsRUFDRjtBQUNBLGlCQUFlLEtBQUsseUJBQXlCO0FBQzdDLFNBQU87QUFDVDtBQUVBLFNBQVMsMkJBQTJCLHVCQUEyRDtBQUM3RixRQUFNLFNBQVMsVUFBVSxxQkFBcUI7QUFDOUMsU0FBTyxRQUFRLFNBQVMsZUFBZSxzQkFBc0IsT0FBTyxHQUFHLFNBQVMsZUFBZTtBQUNqRztBQUVBLElBQU0sYUFBYSxZQUFZLFlBQVksQ0FBQyxTQUFTLG9CQUFvQixJQUFJLENBQUM7QUFFOUUsSUFBTSxPQUFxRSxXQUFXO0FBQUEsRUFDcEYsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLE1BQ0osYUFBYTtBQUFBLE1BQ2IsS0FBSyxvQkFBb0IsTUFBTTtBQUFBLElBQ2pDO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDUixtQkFBbUI7QUFBQSxNQUNuQixjQUFjO0FBQUEsSUFDaEI7QUFBQSxJQUNBLFNBQVM7QUFBQSxJQUNULFFBQVEsQ0FBQztBQUFBLEVBQ1g7QUFBQSxFQUNBLGdCQUFnQixDQUFDO0FBQUE7QUFBQSxFQUVqQixPQUFPLFNBQVM7QUFDZCxVQUFNLGFBQWEsUUFBUTtBQUMzQixVQUFNLGVBQWUsV0FBVztBQUNoQyxXQUFPLEdBQUcsaUJBQWlCLElBQUk7QUFDL0IsVUFBTSxvQkFBb0Isb0JBQUksSUFBcUI7QUFFbkQsV0FBTztBQUFBO0FBQUEsTUFFTCxpREFBaUQsQ0FDL0Msa0JBRUc7QUFDSCxZQUFJO0FBQ0YsaUJBQU8sR0FBRyxjQUFjLE9BQU8sU0FBUyxlQUFlLGdCQUFnQjtBQUN2RSxjQUNFLGNBQWMsT0FBTyxPQUFPLFNBQVMsZUFBZSxrQkFDbkQsY0FBYyxPQUFPLE9BQU8sT0FBTyxTQUFTLGVBQWUsb0JBQzFELGNBQWMsT0FBTyxPQUFPLE9BQU8sU0FBUyxTQUFTLGVBQWUsY0FDcEUsY0FBYyxPQUFPLE9BQU8sT0FBTyxTQUFTLFNBQVMsVUFDdkQ7QUFFQTtBQUFBLFVBQ0Y7QUFFQSxjQUFJLDBCQUEwQixhQUFhLEtBQUsscUJBQXFCLGFBQWEsR0FBRyxVQUFVLE9BQU87QUFFcEc7QUFBQSxVQUNGO0FBRUEsZ0JBQU0sY0FBYyxlQUFlLGVBQWUsVUFBVTtBQUU1RCxnQkFBTSx5QkFBeUIsQ0FBQztBQUNoQyxnQkFBTSxrQkFBa0IsY0FBYyxPQUFPO0FBQzdDLDZCQUFtQixpQkFBaUIsd0JBQXdCLFVBQVU7QUFDdEUsaUNBQXVCLFlBQVksS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLFdBQVcsUUFBUSxHQUFHLENBQUM7QUFFOUUsZ0JBQU07QUFBQSxZQUNKLFVBQVU7QUFBQSxZQUNWLGdCQUFnQjtBQUFBLFlBQ2hCLG1CQUFtQjtBQUFBLFlBQ25CLGtCQUFrQjtBQUFBLFlBQ2xCLDJCQUEyQjtBQUFBLFlBQzNCLDhCQUE4QjtBQUFBLFlBQzlCLDZCQUE2QjtBQUFBLFVBQy9CLElBQUksMEJBQTBCLHVCQUF1QixxQkFBcUIsWUFBWTtBQUV0RixnQkFBTSw0QkFBNEI7QUFBQSxZQUNoQztBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsVUFDRjtBQUVBLGdCQUFNLDJDQUNKLHNDQUFzQyxVQUN0Qyx1QkFBdUIsd0JBQXdCLFVBQzlDLHVCQUF1QixTQUFTLEtBQUssQ0FBQyx1QkFBdUIsS0FBSywwQkFBMEI7QUFDL0YsZ0JBQU0sbUNBQW1DLEdBQUcseUJBQXlCO0FBRXJFLGdCQUFNLDZDQUNKLHdDQUF3QyxVQUN4Qyx1QkFBdUIsMEJBQTBCO0FBQ25ELGdCQUFNLHFDQUFxQyxHQUFHLHlCQUF5QjtBQUV2RSxnQkFBTSw4Q0FDSCx5Q0FBeUM7QUFBQSxVQUV2QyxxQ0FBZ0UsU0FBUyxlQUFlLGlCQUMzRix1QkFBdUIsMkJBQTJCO0FBQ3BELGdCQUFNLHNDQUFzQyxHQUFHLHlCQUF5QjtBQUV4RSxnQkFBTSx1Q0FDSCx1QkFBdUIsdUJBQXVCLFVBQzdDLHFCQUFxQixVQUNyQix1QkFBdUIsZUFBZSxVQUN4Qyw0Q0FDQSw4Q0FDQTtBQUVGLGdCQUFNLDJDQUEyQyx1Q0FDN0M7QUFBQTtBQUFBLFlBRUUsR0FBSSxvQ0FDQTtBQUFBO0FBQUEsY0FFRSxHQUFHLHVCQUF1QixxQkFBcUIsUUFBUSxPQUFPLElBQUssa0NBQTZELFNBQVMsZUFBZSxnQkFBZ0IsV0FBVyxRQUFRLGlDQUEyRCxJQUFLLGtDQUErQyxJQUFJLE1BQU0sNkJBQTZCLHlCQUF5QixDQUFDO0FBQUEsWUFDN1csSUFDQSwyQ0FDRTtBQUFBLGNBQ0UsU0FBUyxnQ0FBZ0MsTUFBTSw2QkFBNkIseUJBQXlCLENBQUM7QUFBQSxZQUN4RyxJQUNBLENBQUM7QUFBQTtBQUFBLFlBRVAsR0FBSSxzQ0FDQTtBQUFBO0FBQUEsY0FFRSxHQUFHLHVCQUF1QixxQkFBcUIsUUFBUSxPQUFPLElBQUssb0NBQStELFNBQVMsZUFBZSxnQkFBZ0IsV0FBVyxRQUFRLG1DQUE2RCxJQUFLLG9DQUFpRCxJQUFJLE1BQU0sK0JBQStCLHlCQUF5QixDQUFDO0FBQUEsWUFDclgsSUFDQSw2Q0FDRTtBQUFBLGNBQ0UsU0FBUyxrQ0FBa0MsTUFBTSwrQkFBK0IseUJBQXlCLENBQUM7QUFBQSxZQUM1RyxJQUNBLENBQUM7QUFBQTtBQUFBLFlBRVAsR0FBSTtBQUFBO0FBQUEsY0FFQyxxQ0FBZ0UsU0FDakUsZUFBZSxnQkFDWixxQ0FBZ0UsV0FBVyxJQUFJLENBQUMsYUFBYTtBQUM1Rix1QkFBTyxHQUFHLFNBQVMsU0FBUyxlQUFlLFFBQVE7QUFDbkQsdUJBQU8sR0FBRyxTQUFTLE1BQU0sU0FBUyxlQUFlLFVBQVU7QUFFM0QsdUJBQU8sR0FBRyx1QkFBdUIscUJBQXFCLFFBQVEsT0FBTyxJQUFJLFNBQVMsTUFBTSxJQUFJLE1BQU0sZ0NBQWdDLHlCQUF5QixDQUFDLFFBQVEsU0FBUyxJQUFJLFNBQVMsZUFBZSxVQUFVLFdBQVcsUUFBUSxTQUFTLEdBQUcsSUFBSSxJQUFJLFdBQVcsUUFBUSxTQUFTLEdBQUcsQ0FBQyxHQUFHO0FBQUEsY0FDL1IsQ0FBQyxJQUNEO0FBQUEsZ0JBQ0UsR0FBRyx1QkFBdUIscUJBQXFCLFFBQVEsT0FBTyxJQUFLLHFDQUFrRCxJQUFJLE1BQU0sZ0NBQWdDLHlCQUF5QixDQUFDO0FBQUEsY0FDM0w7QUFBQSxnQkFDRiw4Q0FDRTtBQUFBLGNBQ0UsU0FBUyxtQ0FBbUMsTUFBTSxnQ0FBZ0MseUJBQXlCLENBQUM7QUFBQSxZQUM5RyxJQUNBLENBQUM7QUFBQSxVQUNULElBQ0EsQ0FBQztBQUVMLGdCQUFNLEVBQUUsaUJBQWlCLG9CQUFvQixJQUFJO0FBQUEsWUFDL0M7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxVQUNGO0FBR0EsZ0JBQU0sZ0JBQWdCLFdBQVcsUUFBUSxlQUFlO0FBQ3hELGdCQUFNLHFCQUFxQixDQUFDLHVDQUN4QixnQkFDQSxHQUFHLHVCQUF1QixxQkFBcUIsUUFBUSxPQUFPLElBQUkseUJBQXlCLFlBQVksYUFBYTtBQUV4SCxnQkFBTSxnQkFBZ0IsdUNBQ2xCLHVCQUF1QixXQUN2Qix1QkFBdUI7QUFDM0IsZ0JBQU0sc0NBQXNDO0FBQUEsWUFDMUM7QUFBQSxZQUNBLEdBQUksb0JBQW9CLFNBQVksQ0FBQyxlQUFlLElBQUksQ0FBQztBQUFBLFlBQ3pELEdBQUc7QUFBQSxZQUNILEdBQUc7QUFBQSxVQUNMLEVBQUUsS0FBSztBQUFBLEVBQU0sV0FBVyxFQUFFO0FBRTFCLGtCQUFRLE9BQU87QUFBQSxZQUNiLE1BQU07QUFBQSxZQUNOLFdBQVc7QUFBQSxZQUVYLENBQUMsSUFBSSxPQUFPO0FBQ1Ysa0JBQUksdUJBQXVCLHFCQUFxQjtBQUM5QyxzQkFBTSx1QkFBdUI7QUFBQSxrQkFDM0I7QUFBQSxrQkFDQSxHQUFHLG1DQUFtQztBQUFBLEVBQU0sV0FBVztBQUFBLGdCQUN6RCxFQUFFLEtBQUssRUFBRTtBQUNULHNCQUFNLE1BQU0saUJBQWlCLHVCQUF1QixxQkFBcUIsb0JBQW9CO0FBQUEsY0FDL0YsT0FBTztBQUNMLHNCQUFNLE1BQU0sWUFBWSxlQUFlLGtCQUFrQjtBQUV6RCxzQkFBTSxzQkFBc0IsV0FBVyxRQUFRLGFBQWEsRUFBRSxTQUFTLEdBQUc7QUFDMUUsc0JBQU0sTUFBTTtBQUFBLGtCQUNWO0FBQUEsa0JBQ0Esc0JBQXNCLEdBQUcsbUNBQW1DLE1BQU07QUFBQSxnQkFDcEU7QUFBQSxjQUNGO0FBR0EseUJBQVcseUJBQXlCLHdCQUF3QjtBQUMxRCxzQkFBTSxNQUFNO0FBQUEsa0JBQ1Y7QUFBQSxrQkFDQSw0Q0FBNEMsQ0FBQywyQkFBMkIscUJBQXFCLElBQ3pGLG1DQUNBLDZCQUE2Qix5QkFBeUI7QUFBQSxnQkFDNUQ7QUFBQSxjQUNGO0FBQ0Esa0JBQUksdUJBQXVCLHFCQUFxQjtBQUM5QyxzQkFBTSxNQUFNLFlBQVksdUJBQXVCLHFCQUFxQixnQ0FBZ0M7QUFBQSxjQUN0RztBQUdBLHlCQUFXLDRCQUE0QiwyQkFBMkI7QUFDaEUsc0JBQU0sU0FBUyxVQUFVLHdCQUF3QjtBQUNqRCx1QkFBTyxHQUFHLE1BQU07QUFDaEIsb0JBQUk7QUFDSixvQkFBSSxPQUFPLFNBQVMsZUFBZSxrQkFBa0I7QUFDbkQsd0JBQU0saUJBQWlCLE9BQU87QUFDOUIsK0JBQWEsT0FBTyxXQUNoQixXQUFXLFFBQVEsY0FBYyxJQUNqQyxJQUFJLFdBQVcsUUFBUSxjQUFjLENBQUM7QUFBQSxnQkFDNUMsV0FBVyxPQUFPLFNBQVMsZUFBZSxnQkFBZ0I7QUFDeEQsd0JBQU0saUJBQWlCLE9BQU8sVUFBVSxDQUFDO0FBQ3pDLCtCQUFhLFdBQVcsUUFBUSxjQUFjO0FBQUEsZ0JBQ2hEO0FBQ0EsdUJBQU8sR0FBRyxlQUFlLE1BQVM7QUFDbEMsc0JBQU0sTUFBTSxZQUFZLFFBQVEsR0FBRyx5QkFBeUIsZ0JBQWdCLFVBQVUsR0FBRztBQUFBLGNBQzNGO0FBR0EseUJBQVcsMkJBQTJCLDBCQUEwQjtBQUM5RCxvQkFDRSx3QkFBd0IsU0FBUyxTQUFTLGVBQWUsY0FDekQsd0JBQXdCLFNBQVMsU0FBUyxjQUMxQztBQUNBLHdCQUFNLE1BQU0sWUFBWSx3QkFBd0IsVUFBVSxRQUFRO0FBQUEsZ0JBQ3BFO0FBQUEsY0FDRjtBQUdBLGtCQUNFLHVCQUF1QixTQUFTLFNBQVMsZUFBZSxtQkFDeEQsdUJBQXVCLGVBQWUsUUFDdEM7QUFDQSxzQkFBTSxNQUFNO0FBQUEsa0JBQ1YsdUJBQXVCO0FBQUEsa0JBQ3ZCO0FBQUEsRUFBSyxXQUFXLFVBQVUseUJBQXlCO0FBQUEsZ0JBQ3JEO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNILFNBQVMsT0FBTztBQUVkLGtCQUFRLE1BQU0sbUJBQW1CLE1BQU0sbUJBQW1CLFFBQVEsUUFBUSxNQUFNLEtBQUs7QUFDckYsa0JBQVEsT0FBTztBQUFBLFlBQ2IsTUFBTTtBQUFBLFlBQ04sV0FBVztBQUFBLFlBQ1gsTUFBTTtBQUFBLGNBQ0osVUFBVSxRQUFRO0FBQUEsY0FDbEIsT0FBTyxpQkFBaUIsUUFBUSxNQUFNLFNBQVMsSUFBSSxLQUFLLFVBQVUsS0FBSztBQUFBLFlBQ3pFO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGLENBQUM7QUFFRCxJQUFPLHVCQUFROyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -38,6 +38,11 @@ function analyzeResponseReferences(variableDeclaration, scopeManager) {
|
|
|
38
38
|
identifierParent.type === AST_NODE_TYPES.Property && identifierParent.key.type === AST_NODE_TYPES.Identifier && identifierParent.key.name === "body"
|
|
39
39
|
) {
|
|
40
40
|
results.destructuringBodyVariable = responseVariable;
|
|
41
|
+
} else if (
|
|
42
|
+
// body reference through destruction/renaming, e.g. "const { body } = ..."
|
|
43
|
+
identifierParent.type === AST_NODE_TYPES.Property && identifierParent.key.type === AST_NODE_TYPES.Identifier && (identifierParent.key.name === "status" || identifierParent.key.name === "statusCode")
|
|
44
|
+
) {
|
|
45
|
+
results.destructuringStatusVariable = responseVariable;
|
|
41
46
|
} else if (
|
|
42
47
|
// header reference through destruction/renaming, e.g. "const { headers } = ..."
|
|
43
48
|
identifierParent.type === AST_NODE_TYPES.Property && identifierParent.key.type === AST_NODE_TYPES.Identifier && identifierParent.key.name === "headers"
|
|
@@ -53,6 +58,9 @@ function analyzeResponseReferences(variableDeclaration, scopeManager) {
|
|
|
53
58
|
if (parent2?.type === AST_NODE_TYPES.Property && parent2.key.type === AST_NODE_TYPES.Identifier && parent2.key.name === "body") {
|
|
54
59
|
results.destructuringBodyVariable = parent;
|
|
55
60
|
}
|
|
61
|
+
if (parent2?.type === AST_NODE_TYPES.Property && parent2.key.type === AST_NODE_TYPES.Identifier && (parent2.key.name === "status" || parent2.key.name === "statusCode")) {
|
|
62
|
+
results.destructuringStatusVariable = parent;
|
|
63
|
+
}
|
|
56
64
|
if (parent2?.type === AST_NODE_TYPES.Property && parent2.key.type === AST_NODE_TYPES.Identifier && (parent2.key.name === "header" || parent2.key.name === "headers")) {
|
|
57
65
|
results.destructuringHeadersVariable = parent;
|
|
58
66
|
}
|
|
@@ -67,4 +75,4 @@ function analyzeResponseReferences(variableDeclaration, scopeManager) {
|
|
|
67
75
|
export {
|
|
68
76
|
analyzeResponseReferences
|
|
69
77
|
};
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L3Jlc3BvbnNlLXJlZmVyZW5jZS50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFRQSxTQUFTLFVBQVUsY0FBYztBQUVqQyxPQUFPLFdBQVc7QUFFbEIsU0FBUyxzQkFBZ0M7QUFFekMsU0FBUyxpQkFBaUI7QUFFMUIsSUFBTSxNQUFNLE1BQU0sa0NBQWtDO0FBUTdDLFNBQVMsMEJBQ2QscUJBQ0EsY0FVQTtBQUNBLFFBQU0sVUFTRjtBQUFBLElBQ0YsZ0JBQWdCLENBQUM7QUFBQSxJQUNqQixtQkFBbUIsQ0FBQztBQUFBLElBQ3BCLGtCQUFrQixDQUFDO0FBQUEsRUFDckI7QUFDQSxNQUFJLENBQUMscUJBQXFCO0FBQ3hCLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxvQkFBb0IsYUFBYSxxQkFBcUIsbUJBQW1CO0FBQy9FLGFBQVcsb0JBQW9CLG1CQUFtQjtBQUNoRCxVQUFNLGFBQWEsaUJBQWlCLFlBQVksQ0FBQztBQUNqRCxXQUFPLEdBQUcsVUFBVTtBQUNwQixVQUFNLG1CQUFtQixVQUFVLFVBQVU7QUFDN0MsV0FBTyxHQUFHLGdCQUFnQjtBQUMxQixRQUFJLGlCQUFpQixTQUFTLGVBQWUsb0JBQW9CO0FBRS9ELGNBQVEsV0FBVztBQUNuQixZQUFNLHFCQUFxQixpQkFBaUIsV0FBVztBQUFBLFFBQUksQ0FBQyxzQkFDMUQsVUFBVSxrQkFBa0IsVUFBVTtBQUFBLE1BQ3hDO0FBRUEsY0FBUSxpQkFBaUIsbUJBQW1CO0FBQUEsUUFDMUMsQ0FBQyxTQUNDLE1BQU0sU0FBUyxlQUFlLG9CQUM5QixLQUFLLFNBQVMsU0FBUyxlQUFlLGNBQ3RDLEtBQUssU0FBUyxTQUFTO0FBQUEsTUFDM0I7QUFFQSxjQUFRLG9CQUFvQixtQkFBbUI7QUFBQSxRQUM3QyxDQUFDLFNBQ0MsTUFBTSxTQUFTLGVBQWUsb0JBQzlCLEtBQUssU0FBUyxTQUFTLGVBQWUsZUFDckMsS0FBSyxTQUFTLFNBQVMsWUFBWSxLQUFLLFNBQVMsU0FBUyxhQUFhLEtBQUssU0FBUyxTQUFTO0FBQUEsTUFDbkc7QUFFQSxjQUFRLG1CQUFtQixtQkFBbUI7QUFBQSxRQUM1QyxDQUFDLFNBQ0MsTUFBTSxTQUFTLGVBQWUsb0JBQzlCLEtBQUssU0FBUyxTQUFTLGVBQWUsZUFDckMsS0FBSyxTQUFTLFNBQVMsWUFBWSxLQUFLLFNBQVMsU0FBUztBQUFBLE1BQy9EO0FBQUEsSUFDRjtBQUFBO0FBQUEsTUFFRSxpQkFBaUIsU0FBUyxlQUFlLFlBQ3pDLGlCQUFpQixJQUFJLFNBQVMsZUFBZSxjQUM3QyxpQkFBaUIsSUFBSSxTQUFTO0FBQUEsTUFDOUI7QUFDQSxjQUFRLDRCQUE0QjtBQUFBLElBQ3RDO0FBQUE7QUFBQSxNQUVFLGlCQUFpQixTQUFTLGVBQWUsWUFDekMsaUJBQWlCLElBQUksU0FBUyxlQUFlLGVBQzVDLGlCQUFpQixJQUFJLFNBQVMsWUFBWSxpQkFBaUIsSUFBSSxTQUFTO0FBQUEsTUFDekU7QUFDQSxjQUFRLDhCQUE4QjtBQUFBLElBQ3hDO0FBQUE7QUFBQSxNQUVFLGlCQUFpQixTQUFTLGVBQWUsWUFDekMsaUJBQWlCLElBQUksU0FBUyxlQUFlLGNBQzdDLGlCQUFpQixJQUFJLFNBQVM7QUFBQSxNQUM5QjtBQUNBLGNBQVEsK0JBQStCO0FBQ3ZDLGNBQVEsaUNBQWlDLGlCQUFpQixXQUN2RCxJQUFJLENBQUMsY0FBYyxVQUFVLFVBQVUsRUFDdkMsSUFBSSxTQUFTLEVBQ2I7QUFBQSxRQUNDLENBQUMsV0FDQyxRQUFRLFNBQVMsZUFBZSxvQkFDaEMsT0FBTyxTQUFTLFNBQVMsZUFBZSxjQUN4QyxPQUFPLFNBQVMsU0FBUyxTQUN6QixVQUFVLE1BQU0sR0FBRyxTQUFTLGVBQWU7QUFBQSxNQUMvQztBQUFBLElBQ0osV0FBVyxpQkFBaUIsU0FBUyxlQUFlLFVBQVU7QUFDNUQsWUFBTSxTQUFTLFVBQVUsZ0JBQWdCO0FBQ3pDLFVBQUksUUFBUSxTQUFTLGVBQWUsZUFBZTtBQUVqRCxjQUFNLFVBQVUsVUFBVSxNQUFNO0FBQ2hDLFlBQ0UsU0FBUyxTQUFTLGVBQWUsWUFDakMsUUFBUSxJQUFJLFNBQVMsZUFBZSxjQUNwQyxRQUFRLElBQUksU0FBUyxRQUNyQjtBQUNBLGtCQUFRLDRCQUE0QjtBQUFBLFFBQ3RDO0FBQ0EsWUFDRSxTQUFTLFNBQVMsZUFBZSxZQUNqQyxRQUFRLElBQUksU0FBUyxlQUFlLGVBQ25DLFFBQVEsSUFBSSxTQUFTLFlBQVksUUFBUSxJQUFJLFNBQVMsZUFDdkQ7QUFDQSxrQkFBUSw4QkFBOEI7QUFBQSxRQUN4QztBQUNBLFlBQ0UsU0FBUyxTQUFTLGVBQWUsWUFDakMsUUFBUSxJQUFJLFNBQVMsZUFBZSxlQUNuQyxRQUFRLElBQUksU0FBUyxZQUFZLFFBQVEsSUFBSSxTQUFTLFlBQ3ZEO0FBQ0Esa0JBQVEsK0JBQStCO0FBQUEsUUFDekM7QUFBQSxNQUNGO0FBQUEsSUFDRixPQUFPO0FBQ0wsVUFBSSwyQ0FBMkMsZ0JBQWdCO0FBQy9ELFlBQU0sSUFBSSxNQUFNLHdDQUF3QyxpQkFBaUIsSUFBSSxFQUFFO0FBQUEsSUFDakY7QUFBQSxFQUNGO0FBQ0EsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
// src/agent/supertest-then.ts
|
|
2
|
+
import { strict as assert } from "node:assert";
|
|
3
|
+
import { AST_NODE_TYPES, ESLintUtils } from "@typescript-eslint/utils";
|
|
4
|
+
import { getEnclosingFunction, getParent, isUsedInArrayOrAsArgument } from "../library/ts-tree.mjs";
|
|
5
|
+
import getDocumentationUrl from "../get-documentation-url.mjs";
|
|
6
|
+
import { getIndentation } from "../library/format.mjs";
|
|
7
|
+
var ruleId = "supertest-then";
|
|
8
|
+
function analyzeFixtureCall(call, results, sourceCode) {
|
|
9
|
+
const parent = getParent(call);
|
|
10
|
+
if (!parent) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
let nextCall;
|
|
14
|
+
if (parent.type !== AST_NODE_TYPES.MemberExpression) {
|
|
15
|
+
results.fixtureNode = call;
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
if (parent.property.type === AST_NODE_TYPES.Identifier) {
|
|
19
|
+
if (parent.property.name === "expect") {
|
|
20
|
+
const assertionCall = getParent(parent);
|
|
21
|
+
assert.ok(assertionCall && assertionCall.type === AST_NODE_TYPES.CallExpression);
|
|
22
|
+
results.assertions = [...results.assertions ?? [], assertionCall.arguments];
|
|
23
|
+
nextCall = assertionCall;
|
|
24
|
+
}
|
|
25
|
+
} else {
|
|
26
|
+
throw new Error(`Unexpected TSESTree.Expression in fixture/supertest call ${sourceCode.getText(parent)}.`);
|
|
27
|
+
}
|
|
28
|
+
if (nextCall) {
|
|
29
|
+
analyzeFixtureCall(nextCall, results, sourceCode);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function createResponseAssertions(fixtureCallInformation, sourceCode, responseVariableName) {
|
|
33
|
+
let statusAssertion;
|
|
34
|
+
const nonStatusAssertions = [];
|
|
35
|
+
for (const expectArguments of fixtureCallInformation.assertions ?? []) {
|
|
36
|
+
if (expectArguments.length === 1) {
|
|
37
|
+
const [assertionArgument] = expectArguments;
|
|
38
|
+
assert.ok(assertionArgument);
|
|
39
|
+
if (assertionArgument.type === AST_NODE_TYPES.MemberExpression && assertionArgument.object.type === AST_NODE_TYPES.Identifier && assertionArgument.object.name === "StatusCodes" || assertionArgument.type === AST_NODE_TYPES.Literal || sourceCode.getText(assertionArgument).includes("StatusCodes.")) {
|
|
40
|
+
statusAssertion = `assert.equal(${responseVariableName}.status, ${sourceCode.getText(assertionArgument)})`;
|
|
41
|
+
} else if (assertionArgument.type === AST_NODE_TYPES.ArrowFunctionExpression) {
|
|
42
|
+
let functionBody = sourceCode.getText(assertionArgument.body);
|
|
43
|
+
const [originalResponseArgument] = assertionArgument.params;
|
|
44
|
+
assert.ok(originalResponseArgument?.type === AST_NODE_TYPES.Identifier);
|
|
45
|
+
const originalResponseArgumentName = originalResponseArgument.name;
|
|
46
|
+
if (originalResponseArgumentName !== responseVariableName) {
|
|
47
|
+
functionBody = functionBody.replace(
|
|
48
|
+
new RegExp(`\\b${originalResponseArgumentName}\\b`, "ug"),
|
|
49
|
+
responseVariableName
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
nonStatusAssertions.push(`assert.doesNotThrow(()=>${functionBody})`);
|
|
53
|
+
} else if (assertionArgument.type === AST_NODE_TYPES.Identifier) {
|
|
54
|
+
nonStatusAssertions.push(
|
|
55
|
+
`assert.doesNotThrow(()=>${sourceCode.getText(assertionArgument)}(${responseVariableName}))`
|
|
56
|
+
);
|
|
57
|
+
} else if (assertionArgument.type === AST_NODE_TYPES.ObjectExpression || assertionArgument.type === AST_NODE_TYPES.CallExpression) {
|
|
58
|
+
nonStatusAssertions.push(
|
|
59
|
+
`assert.deepEqual(await ${responseVariableName}.json(), ${sourceCode.getText(assertionArgument)})`
|
|
60
|
+
);
|
|
61
|
+
} else {
|
|
62
|
+
throw new Error(`Unexpected Supertest assertion argument: ".expect(${sourceCode.getText(assertionArgument)})`);
|
|
63
|
+
}
|
|
64
|
+
} else if (expectArguments.length === 2) {
|
|
65
|
+
const [headerName, headerValue] = expectArguments;
|
|
66
|
+
assert.ok(headerName && headerValue);
|
|
67
|
+
const headersReference = `${responseVariableName}.headers`;
|
|
68
|
+
if (headerValue.type === AST_NODE_TYPES.Literal && headerValue.value instanceof RegExp) {
|
|
69
|
+
nonStatusAssertions.push(
|
|
70
|
+
`assert.ok(${headersReference}.get(${sourceCode.getText(headerName)}).match(${sourceCode.getText(headerValue)}))`
|
|
71
|
+
);
|
|
72
|
+
} else {
|
|
73
|
+
nonStatusAssertions.push(
|
|
74
|
+
`assert.equal(${headersReference}.get(${sourceCode.getText(headerName)}), ${sourceCode.getText(headerValue)})`
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
statusAssertion,
|
|
81
|
+
nonStatusAssertions
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
var createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
|
|
85
|
+
var rule = createRule({
|
|
86
|
+
name: ruleId,
|
|
87
|
+
meta: {
|
|
88
|
+
type: "suggestion",
|
|
89
|
+
docs: {
|
|
90
|
+
description: "Prefer native fetch API over customized fixture API.",
|
|
91
|
+
url: getDocumentationUrl(ruleId)
|
|
92
|
+
},
|
|
93
|
+
messages: {
|
|
94
|
+
preferNativeFetch: "Prefer native fetch API over customized fixture API.",
|
|
95
|
+
// shouldUseHeaderGetter: 'Getter should be used to access response headers.',
|
|
96
|
+
unknownError: 'Unknown error occurred in file "{{fileName}}": {{ error }}.'
|
|
97
|
+
},
|
|
98
|
+
fixable: "code",
|
|
99
|
+
schema: []
|
|
100
|
+
},
|
|
101
|
+
defaultOptions: [],
|
|
102
|
+
create(context) {
|
|
103
|
+
const sourceCode = context.sourceCode;
|
|
104
|
+
const scopeManager = sourceCode.scopeManager;
|
|
105
|
+
assert.ok(scopeManager);
|
|
106
|
+
return {
|
|
107
|
+
'CallExpression[callee.property.name="expect"]': (supertestCall) => {
|
|
108
|
+
try {
|
|
109
|
+
assert.ok(supertestCall.callee.type === AST_NODE_TYPES.MemberExpression);
|
|
110
|
+
if (supertestCall.callee.object.type !== AST_NODE_TYPES.CallExpression || supertestCall.callee.object.callee.type === AST_NODE_TYPES.MemberExpression && supertestCall.callee.object.callee.property.type === AST_NODE_TYPES.Identifier && supertestCall.callee.object.callee.property.name === "expect") {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if (!(isUsedInArrayOrAsArgument(supertestCall) || getEnclosingFunction(supertestCall)?.async === false)) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const fixtureFunction = supertestCall.callee.object;
|
|
117
|
+
const indentation = getIndentation(supertestCall, sourceCode);
|
|
118
|
+
const [urlArgumentNode] = supertestCall.arguments;
|
|
119
|
+
assert.ok(urlArgumentNode !== void 0);
|
|
120
|
+
const fixtureCallInformation = {};
|
|
121
|
+
analyzeFixtureCall(fixtureFunction, fixtureCallInformation, sourceCode);
|
|
122
|
+
const responseVariableNameToUse = "res";
|
|
123
|
+
const { statusAssertion, nonStatusAssertions } = createResponseAssertions(
|
|
124
|
+
fixtureCallInformation,
|
|
125
|
+
sourceCode,
|
|
126
|
+
responseVariableNameToUse
|
|
127
|
+
);
|
|
128
|
+
const disableLintComment = "// eslint-disable-next-line @checkdigit/no-promise-instance-method";
|
|
129
|
+
const fetchCallText = sourceCode.getText(fixtureFunction);
|
|
130
|
+
const appendingAssignmentAndAssertionText = [
|
|
131
|
+
...statusAssertion !== void 0 ? [statusAssertion] : [],
|
|
132
|
+
...nonStatusAssertions
|
|
133
|
+
].join(`;
|
|
134
|
+
${indentation}`);
|
|
135
|
+
const replacementText = fixtureCallInformation.assertions ? [
|
|
136
|
+
disableLintComment,
|
|
137
|
+
`${fetchCallText}.then((${responseVariableNameToUse}) => {`,
|
|
138
|
+
appendingAssignmentAndAssertionText === "" ? "" : ` ${appendingAssignmentAndAssertionText};`,
|
|
139
|
+
` return ${responseVariableNameToUse};`,
|
|
140
|
+
`})`
|
|
141
|
+
].join(`
|
|
142
|
+
${indentation}`) : fetchCallText;
|
|
143
|
+
context.report({
|
|
144
|
+
node: supertestCall,
|
|
145
|
+
messageId: "preferNativeFetch",
|
|
146
|
+
fix(fixer) {
|
|
147
|
+
return fixer.replaceText(fixtureCallInformation.fixtureNode, replacementText);
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
} catch (error) {
|
|
151
|
+
console.error(`Failed to apply ${ruleId} rule for file "${context.filename}":`, error);
|
|
152
|
+
context.report({
|
|
153
|
+
node: supertestCall,
|
|
154
|
+
messageId: "unknownError",
|
|
155
|
+
data: {
|
|
156
|
+
fileName: context.filename,
|
|
157
|
+
error: error instanceof Error ? error.toString() : JSON.stringify(error)
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
var supertest_then_default = rule;
|
|
166
|
+
export {
|
|
167
|
+
supertest_then_default as default,
|
|
168
|
+
ruleId
|
|
169
|
+
};
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FnZW50L3N1cGVydGVzdC10aGVuLnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQVFBLFNBQVMsVUFBVSxjQUFjO0FBRWpDLFNBQVMsZ0JBQWdCLG1CQUE2QjtBQUd0RCxTQUFTLHNCQUFzQixXQUFXLGlDQUFpQztBQUMzRSxPQUFPLHlCQUF5QjtBQUNoQyxTQUFTLHNCQUFzQjtBQUV4QixJQUFNLFNBQVM7QUFVdEIsU0FBUyxtQkFBbUIsTUFBK0IsU0FBaUMsWUFBd0I7QUFDbEgsUUFBTSxTQUFTLFVBQVUsSUFBSTtBQUM3QixNQUFJLENBQUMsUUFBUTtBQUNYO0FBQUEsRUFDRjtBQUVBLE1BQUk7QUFDSixNQUFJLE9BQU8sU0FBUyxlQUFlLGtCQUFrQjtBQUNuRCxZQUFRLGNBQWM7QUFDdEI7QUFBQSxFQUNGO0FBRUEsTUFBSSxPQUFPLFNBQVMsU0FBUyxlQUFlLFlBQVk7QUFDdEQsUUFBSSxPQUFPLFNBQVMsU0FBUyxVQUFVO0FBRXJDLFlBQU0sZ0JBQWdCLFVBQVUsTUFBTTtBQUN0QyxhQUFPLEdBQUcsaUJBQWlCLGNBQWMsU0FBUyxlQUFlLGNBQWM7QUFDL0UsY0FBUSxhQUFhLENBQUMsR0FBSSxRQUFRLGNBQWMsQ0FBQyxHQUFJLGNBQWMsU0FBa0M7QUFDckcsaUJBQVc7QUFBQSxJQUNiO0FBQUEsRUFDRixPQUFPO0FBQ0wsVUFBTSxJQUFJLE1BQU0sNERBQTRELFdBQVcsUUFBUSxNQUFNLENBQUMsR0FBRztBQUFBLEVBQzNHO0FBQ0EsTUFBSSxVQUFVO0FBQ1osdUJBQW1CLFVBQVUsU0FBUyxVQUFVO0FBQUEsRUFDbEQ7QUFDRjtBQUdBLFNBQVMseUJBQ1Asd0JBQ0EsWUFDQSxzQkFDQTtBQUNBLE1BQUk7QUFDSixRQUFNLHNCQUFnQyxDQUFDO0FBQ3ZDLGFBQVcsbUJBQW1CLHVCQUF1QixjQUFjLENBQUMsR0FBRztBQUNyRSxRQUFJLGdCQUFnQixXQUFXLEdBQUc7QUFDaEMsWUFBTSxDQUFDLGlCQUFpQixJQUFJO0FB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
|
package/dist-mjs/index.mjs
CHANGED
|
@@ -14,6 +14,7 @@ import invalidJsonStringify, { ruleId as invalidJsonStringifyRuleId } from "./in
|
|
|
14
14
|
import noDuplicatedImports, { ruleId as noDuplicatedImportsRuleId } from "./no-duplicated-imports.mjs";
|
|
15
15
|
import noFixture, { ruleId as noFixtureRuleId } from "./agent/no-fixture.mjs";
|
|
16
16
|
import noSupertest, { ruleId as noSupertestRuleId } from "./agent/no-supertest.mjs";
|
|
17
|
+
import supertestThen, { ruleId as supertestThenRuleId } from "./agent/supertest-then.mjs";
|
|
17
18
|
import noLegacyServiceTyping, { ruleId as noLegacyServiceTypingRuleId } from "./no-legacy-service-typing.mjs";
|
|
18
19
|
import noMappedResponse, { ruleId as noMappedResponseRuleId } from "./agent/no-mapped-response.mjs";
|
|
19
20
|
import noPromiseInstanceMethod, { ruleId as noPromiseInstanceMethodRuleId } from "./no-promise-instance-method.mjs";
|
|
@@ -64,6 +65,7 @@ var rules = {
|
|
|
64
65
|
[noPromiseInstanceMethodRuleId]: noPromiseInstanceMethod,
|
|
65
66
|
[noFixtureRuleId]: noFixture,
|
|
66
67
|
[noSupertestRuleId]: noSupertest,
|
|
68
|
+
[supertestThenRuleId]: supertestThen,
|
|
67
69
|
[fetchThenRuleId]: fetchThen,
|
|
68
70
|
[noServiceWrapperRuleId]: noServiceWrapper,
|
|
69
71
|
[noStatusCodeRuleId]: noStatusCode,
|
|
@@ -122,6 +124,7 @@ var configs = {
|
|
|
122
124
|
[`@checkdigit/${addUrlDomainRuleId}`]: "off",
|
|
123
125
|
[`@checkdigit/${noFixtureRuleId}`]: "off",
|
|
124
126
|
[`@checkdigit/${noSupertestRuleId}`]: "off",
|
|
127
|
+
[`@checkdigit/${supertestThenRuleId}`]: "off",
|
|
125
128
|
[`@checkdigit/${noServiceWrapperRuleId}`]: "off",
|
|
126
129
|
[`@checkdigit/${noStatusCodeRuleId}`]: "off",
|
|
127
130
|
[`@checkdigit/${fetchResponseBodyJsonRuleId}`]: "off",
|
|
@@ -171,6 +174,7 @@ var configs = {
|
|
|
171
174
|
[`@checkdigit/${addUrlDomainRuleId}`]: "off",
|
|
172
175
|
[`@checkdigit/${noFixtureRuleId}`]: "off",
|
|
173
176
|
[`@checkdigit/${noSupertestRuleId}`]: "off",
|
|
177
|
+
[`@checkdigit/${supertestThenRuleId}`]: "off",
|
|
174
178
|
[`@checkdigit/${noServiceWrapperRuleId}`]: "off",
|
|
175
179
|
[`@checkdigit/${noStatusCodeRuleId}`]: "off",
|
|
176
180
|
[`@checkdigit/${fetchResponseBodyJsonRuleId}`]: "off",
|
|
@@ -214,7 +218,8 @@ var configs = {
|
|
|
214
218
|
[`@checkdigit/${addBasePathImportRuleId}`]: "error",
|
|
215
219
|
[`@checkdigit/${addAssertImportRuleId}`]: "error",
|
|
216
220
|
[`@checkdigit/${noFixtureRuleId}`]: "error",
|
|
217
|
-
[`@checkdigit/${noSupertestRuleId}`]: "error"
|
|
221
|
+
[`@checkdigit/${noSupertestRuleId}`]: "error",
|
|
222
|
+
[`@checkdigit/${supertestThenRuleId}`]: "error"
|
|
218
223
|
}
|
|
219
224
|
},
|
|
220
225
|
{
|
|
@@ -263,4 +268,4 @@ var src_default = defaultToExport;
|
|
|
263
268
|
export {
|
|
264
269
|
src_default as default
|
|
265
270
|
};
|
|
266
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
271
|
+
//# sourceMappingURL=data:application/json;base64,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
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { TSESTree } from '@typescript-eslint/utils';
|
|
2
2
|
export declare function getResponseBodyRetrievalText(responseVariableName: string): string;
|
|
3
|
+
export declare function getResponseStatusRetrievalText(responseVariableName: string): string;
|
|
3
4
|
export declare function getResponseHeadersRetrievalText(responseVariableName: string): string;
|
|
4
5
|
export declare function isInvalidResponseHeadersAccess(responseHeadersAccess: TSESTree.Node): boolean;
|
|
5
6
|
export declare function hasAssertions(fixtureCall: TSESTree.Node): boolean;
|
|
@@ -12,5 +12,6 @@ export declare function analyzeResponseReferences(variableDeclaration: TSESTree.
|
|
|
12
12
|
statusReferences: TSESTree.MemberExpression[];
|
|
13
13
|
destructuringBodyVariable?: Variable | TSESTree.ObjectPattern;
|
|
14
14
|
destructuringHeadersVariable?: Variable | TSESTree.ObjectPattern;
|
|
15
|
+
destructuringStatusVariable?: Variable | TSESTree.ObjectPattern;
|
|
15
16
|
destructuringHeadersReferences?: TSESTree.MemberExpression[] | undefined;
|
|
16
17
|
};
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@checkdigit/eslint-plugin","version":"7.6.0-PR.75-
|
|
1
|
+
{"name":"@checkdigit/eslint-plugin","version":"7.6.0-PR.75-c175","description":"Check Digit eslint plugins","keywords":["eslint","eslintplugin"],"homepage":"https://github.com/checkdigit/eslint-plugin#readme","bugs":{"url":"https://github.com/checkdigit/eslint-plugin/issues"},"repository":{"type":"git","url":"https://github.com/checkdigit/eslint-plugin"},"license":"MIT","author":"Check Digit, LLC","sideEffects":false,"type":"module","exports":{".":{"types":"./dist-types/index.d.ts","import":"./dist-mjs/index.mjs","default":"./dist-mjs/index.mjs"}},"files":["src","dist-types","dist-mjs","!src/**/test/**","!src/**/*.test.ts","!src/**/*.spec.ts","!dist-types/**/test/**","!dist-types/**/*.test.d.ts","!dist-types/**/*.spec.d.ts","!dist-mjs/**/test/**","!dist-mjs/**/*.test.mjs","!dist-mjs/**/*.spec.mjs","SECURITY.md"],"scripts":{"build:dist-mjs":"rimraf dist-mjs && npx builder --type=module --sourceMap --outDir=dist-mjs && node dist-mjs/index.mjs","build:dist-types":"rimraf dist-types && npx builder --type=types --outDir=dist-types","ci:compile":"tsc --noEmit","ci:coverage":"NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=true","ci:lint":"npm run lint","ci:style":"npm run prettier","ci:test":"NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=false","lint":"eslint --max-warnings 0 .","lint:fix":"eslint --max-warnings 0 --fix .","prepare":"","prepublishOnly":"npm run build:dist-types && npm run build:dist-mjs","prettier":"prettier --ignore-path .gitignore --list-different .","prettier:fix":"prettier --ignore-path .gitignore --write .","test":"npm run ci:compile && npm run ci:test && npm run ci:lint && npm run ci:style"},"prettier":"@checkdigit/prettier-config","jest":{"preset":"@checkdigit/jest-config"},"dependencies":{"@typescript-eslint/type-utils":"^8.15.0","@typescript-eslint/utils":"^8.15.0","debug":"^4.3.7","ts-api-utils":"^1.4.0"},"devDependencies":{"@checkdigit/jest-config":"^6.0.2","@checkdigit/prettier-config":"^5.5.1","@checkdigit/typescript-config":"^8.0.0","@eslint/js":"^9.15.0","@types/debug":"^4.1.12","@types/eslint":"^9.6.1","@types/eslint-config-prettier":"^6.11.3","@typescript-eslint/parser":"^8.15.0","@typescript-eslint/rule-tester":"^8.15.0","eslint":"^9.15.0","eslint-config-prettier":"^9.1.0","eslint-import-resolver-typescript":"^3.6.3","eslint-plugin-eslint-plugin":"^6.3.2","eslint-plugin-import":"^2.31.0","eslint-plugin-no-only-tests":"^3.3.0","eslint-plugin-no-secrets":"^1.1.2","eslint-plugin-node":"^11.1.0","eslint-plugin-sonarjs":"1.0.4","http-status-codes":"^2.3.0","rimraf":"^6.0.1","typescript-eslint":"^8.15.0"},"peerDependencies":{"eslint":">=9 <10"},"engines":{"node":">=20.17"}}
|
package/src/agent/fetch.ts
CHANGED
|
@@ -8,6 +8,10 @@ export function getResponseBodyRetrievalText(responseVariableName: string) {
|
|
|
8
8
|
return `await ${responseVariableName}.json()`;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
+
export function getResponseStatusRetrievalText(responseVariableName: string) {
|
|
12
|
+
return `${responseVariableName}.status`;
|
|
13
|
+
}
|
|
14
|
+
|
|
11
15
|
export function getResponseHeadersRetrievalText(responseVariableName: string) {
|
|
12
16
|
return `${responseVariableName}.headers`;
|
|
13
17
|
}
|
package/src/agent/no-fixture.ts
CHANGED
|
@@ -23,7 +23,12 @@ import getDocumentationUrl from '../get-documentation-url';
|
|
|
23
23
|
import { getIndentation } from '../library/format';
|
|
24
24
|
import { isValidPropertyName } from '../library/variable';
|
|
25
25
|
import { analyzeResponseReferences } from './response-reference';
|
|
26
|
-
import {
|
|
26
|
+
import {
|
|
27
|
+
getResponseBodyRetrievalText,
|
|
28
|
+
getResponseHeadersRetrievalText,
|
|
29
|
+
getResponseStatusRetrievalText,
|
|
30
|
+
hasAssertions,
|
|
31
|
+
} from './fetch';
|
|
27
32
|
import { replaceEndpointUrlPrefixWithBasePath } from './url';
|
|
28
33
|
|
|
29
34
|
export const ruleId = 'no-fixture';
|
|
@@ -44,6 +49,7 @@ interface FixtureCallInformation {
|
|
|
44
49
|
assertions?: TSESTree.Expression[][];
|
|
45
50
|
inlineStatementNode?: TSESTree.Node;
|
|
46
51
|
inlineBodyReference?: TSESTree.MemberExpression;
|
|
52
|
+
inlineStatusReference?: TSESTree.MemberExpression;
|
|
47
53
|
inlineHeadersReference?: TSESTree.MemberExpression;
|
|
48
54
|
}
|
|
49
55
|
|
|
@@ -77,6 +83,12 @@ function analyzeFixtureCall(call: TSESTree.CallExpression, results: FixtureCallI
|
|
|
77
83
|
if (awaitParent.property.type === AST_NODE_TYPES.Identifier && awaitParent.property.name === 'body') {
|
|
78
84
|
results.inlineBodyReference = awaitParent;
|
|
79
85
|
}
|
|
86
|
+
if (
|
|
87
|
+
awaitParent.property.type === AST_NODE_TYPES.Identifier &&
|
|
88
|
+
(awaitParent.property.name === 'status' || awaitParent.property.name === 'statusCode')
|
|
89
|
+
) {
|
|
90
|
+
results.inlineStatusReference = awaitParent;
|
|
91
|
+
}
|
|
80
92
|
if (
|
|
81
93
|
awaitParent.property.type === AST_NODE_TYPES.Identifier &&
|
|
82
94
|
(awaitParent.property.name === 'header' || awaitParent.property.name === 'headers')
|
|
@@ -311,6 +323,7 @@ const rule: ESLintUtils.RuleModule<'unknownError' | 'preferNativeFetch'> = creat
|
|
|
311
323
|
headersReferences: responseHeadersReferences,
|
|
312
324
|
statusReferences: responseStatusReferences,
|
|
313
325
|
destructuringBodyVariable: destructuringResponseBodyVariable,
|
|
326
|
+
destructuringStatusVariable: destructuringResponseStatusVariable,
|
|
314
327
|
destructuringHeadersVariable: destructuringResponseHeadersVariable,
|
|
315
328
|
} = analyzeResponseReferences(fixtureCallInformation.variableDeclaration, scopeManager);
|
|
316
329
|
|
|
@@ -358,6 +371,11 @@ const rule: ESLintUtils.RuleModule<'unknownError' | 'preferNativeFetch'> = creat
|
|
|
358
371
|
(responseBodyReferences.length > 0 && !responseBodyReferences.some(isResponseBodyRedefinition));
|
|
359
372
|
const redefineResponseBodyVariableName = `${responseVariableNameToUse}Body`;
|
|
360
373
|
|
|
374
|
+
const isResponseStatusVariableRedefinitionNeeded =
|
|
375
|
+
destructuringResponseStatusVariable !== undefined ||
|
|
376
|
+
fixtureCallInformation.inlineStatusReference !== undefined;
|
|
377
|
+
const redefineResponseStatusVariableName = `${responseVariableNameToUse}Status`;
|
|
378
|
+
|
|
361
379
|
const isResponseHeadersVariableRedefinitionNeeded =
|
|
362
380
|
(destructuringResponseHeadersVariable !== undefined &&
|
|
363
381
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
@@ -370,6 +388,7 @@ const rule: ESLintUtils.RuleModule<'unknownError' | 'preferNativeFetch'> = creat
|
|
|
370
388
|
responseVariable === undefined &&
|
|
371
389
|
fixtureCallInformation.assertions !== undefined) ||
|
|
372
390
|
isResponseBodyVariableRedefinitionNeeded ||
|
|
391
|
+
isResponseStatusVariableRedefinitionNeeded ||
|
|
373
392
|
isResponseHeadersVariableRedefinitionNeeded;
|
|
374
393
|
|
|
375
394
|
const responseBodyHeadersVariableRedefineLines = isResponseVariableRedefinitionNeeded
|
|
@@ -386,6 +405,17 @@ const rule: ESLintUtils.RuleModule<'unknownError' | 'preferNativeFetch'> = creat
|
|
|
386
405
|
]
|
|
387
406
|
: []),
|
|
388
407
|
// eslint-disable-next-line no-nested-ternary
|
|
408
|
+
...(destructuringResponseStatusVariable
|
|
409
|
+
? [
|
|
410
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
411
|
+
`${fixtureCallInformation.variableDeclaration?.kind ?? 'const'} ${(destructuringResponseStatusVariable as TSESTree.ObjectPattern).type === AST_NODE_TYPES.ObjectPattern ? sourceCode.getText(destructuringResponseStatusVariable as TSESTree.ObjectPattern) : (destructuringResponseStatusVariable as Variable).name} = ${getResponseStatusRetrievalText(responseVariableNameToUse)}`,
|
|
412
|
+
]
|
|
413
|
+
: isResponseStatusVariableRedefinitionNeeded
|
|
414
|
+
? [
|
|
415
|
+
`const ${redefineResponseStatusVariableName} = ${getResponseStatusRetrievalText(responseVariableNameToUse)}`,
|
|
416
|
+
]
|
|
417
|
+
: []),
|
|
418
|
+
// eslint-disable-next-line no-nested-ternary
|
|
389
419
|
...(destructuringResponseHeadersVariable
|
|
390
420
|
? // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
391
421
|
(destructuringResponseHeadersVariable as TSESTree.ObjectPattern).type ===
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
import getDocumentationUrl from '../get-documentation-url';
|
|
23
23
|
import { getIndentation } from '../library/format';
|
|
24
24
|
import { analyzeResponseReferences } from './response-reference';
|
|
25
|
-
import { getResponseBodyRetrievalText, getResponseHeadersRetrievalText } from './fetch';
|
|
25
|
+
import { getResponseBodyRetrievalText, getResponseHeadersRetrievalText, getResponseStatusRetrievalText } from './fetch';
|
|
26
26
|
|
|
27
27
|
export const ruleId = 'no-supertest';
|
|
28
28
|
|
|
@@ -42,6 +42,7 @@ interface FixtureCallInformation {
|
|
|
42
42
|
assertions?: TSESTree.Expression[][];
|
|
43
43
|
inlineStatementNode?: TSESTree.Node;
|
|
44
44
|
inlineBodyReference?: TSESTree.MemberExpression;
|
|
45
|
+
inlineStatusReference?: TSESTree.MemberExpression;
|
|
45
46
|
inlineHeadersReference?: TSESTree.MemberExpression;
|
|
46
47
|
}
|
|
47
48
|
|
|
@@ -75,6 +76,12 @@ function analyzeFixtureCall(call: TSESTree.CallExpression, results: FixtureCallI
|
|
|
75
76
|
if (awaitParent.property.type === AST_NODE_TYPES.Identifier && awaitParent.property.name === 'body') {
|
|
76
77
|
results.inlineBodyReference = awaitParent;
|
|
77
78
|
}
|
|
79
|
+
if (
|
|
80
|
+
awaitParent.property.type === AST_NODE_TYPES.Identifier &&
|
|
81
|
+
(awaitParent.property.name === 'status' || awaitParent.property.name === 'statusCode')
|
|
82
|
+
) {
|
|
83
|
+
results.inlineStatusReference = awaitParent;
|
|
84
|
+
}
|
|
78
85
|
if (
|
|
79
86
|
awaitParent.property.type === AST_NODE_TYPES.Identifier &&
|
|
80
87
|
(awaitParent.property.name === 'header' || awaitParent.property.name === 'headers')
|
|
@@ -284,33 +291,28 @@ const rule: ESLintUtils.RuleModule<'unknownError' | 'preferNativeFetch'> = creat
|
|
|
284
291
|
supertestCall: TSESTree.CallExpression,
|
|
285
292
|
// eslint-disable-next-line sonarjs/cognitive-complexity
|
|
286
293
|
) => {
|
|
287
|
-
assert.ok(supertestCall.callee.type === AST_NODE_TYPES.MemberExpression);
|
|
288
|
-
if (
|
|
289
|
-
supertestCall.callee.object.type === AST_NODE_TYPES.CallExpression &&
|
|
290
|
-
supertestCall.callee.object.callee.type === AST_NODE_TYPES.MemberExpression &&
|
|
291
|
-
supertestCall.callee.object.callee.property.type === AST_NODE_TYPES.Identifier &&
|
|
292
|
-
supertestCall.callee.object.callee.property.name === 'expect'
|
|
293
|
-
) {
|
|
294
|
-
// skip nested expect calls, only focus on the top level
|
|
295
|
-
return;
|
|
296
|
-
}
|
|
297
294
|
try {
|
|
298
|
-
|
|
299
|
-
|
|
295
|
+
assert.ok(supertestCall.callee.type === AST_NODE_TYPES.MemberExpression);
|
|
296
|
+
if (
|
|
297
|
+
supertestCall.callee.object.type !== AST_NODE_TYPES.CallExpression ||
|
|
298
|
+
(supertestCall.callee.object.callee.type === AST_NODE_TYPES.MemberExpression &&
|
|
299
|
+
supertestCall.callee.object.callee.property.type === AST_NODE_TYPES.Identifier &&
|
|
300
|
+
supertestCall.callee.object.callee.property.name === 'expect')
|
|
301
|
+
) {
|
|
302
|
+
// skip nested expect calls, only focus on the top level
|
|
300
303
|
return;
|
|
301
304
|
}
|
|
302
305
|
|
|
303
|
-
|
|
304
|
-
|
|
306
|
+
if (isUsedInArrayOrAsArgument(supertestCall) || getEnclosingFunction(supertestCall)?.async === false) {
|
|
307
|
+
// skip and leave it to "fetch-then" rule to handle it because no "await" can be used here
|
|
305
308
|
return;
|
|
306
309
|
}
|
|
307
310
|
|
|
308
311
|
const indentation = getIndentation(supertestCall, sourceCode);
|
|
309
312
|
|
|
310
313
|
const fixtureCallInformation = {} as FixtureCallInformation;
|
|
314
|
+
const fixtureFunction = supertestCall.callee.object;
|
|
311
315
|
analyzeFixtureCall(fixtureFunction, fixtureCallInformation, sourceCode);
|
|
312
|
-
sourceCode.getText(fixtureCallInformation.fixtureNode);
|
|
313
|
-
sourceCode.getText(fixtureCallInformation.rootNode);
|
|
314
316
|
fixtureCallInformation.assertions?.flat().map((ass) => sourceCode.getText(ass));
|
|
315
317
|
|
|
316
318
|
const {
|
|
@@ -320,6 +322,7 @@ const rule: ESLintUtils.RuleModule<'unknownError' | 'preferNativeFetch'> = creat
|
|
|
320
322
|
statusReferences: responseStatusReferences,
|
|
321
323
|
destructuringBodyVariable: destructuringResponseBodyVariable,
|
|
322
324
|
destructuringHeadersVariable: destructuringResponseHeadersVariable,
|
|
325
|
+
destructuringStatusVariable: destructuringResponseStatusVariable,
|
|
323
326
|
} = analyzeResponseReferences(fixtureCallInformation.variableDeclaration, scopeManager);
|
|
324
327
|
|
|
325
328
|
const responseVariableNameToUse = getResponseVariableNameToUse(
|
|
@@ -334,6 +337,11 @@ const rule: ESLintUtils.RuleModule<'unknownError' | 'preferNativeFetch'> = creat
|
|
|
334
337
|
(responseBodyReferences.length > 0 && !responseBodyReferences.some(isResponseBodyRedefinition));
|
|
335
338
|
const redefineResponseBodyVariableName = `${responseVariableNameToUse}Body`;
|
|
336
339
|
|
|
340
|
+
const isResponseStatusVariableRedefinitionNeeded =
|
|
341
|
+
destructuringResponseStatusVariable !== undefined ||
|
|
342
|
+
fixtureCallInformation.inlineStatusReference !== undefined;
|
|
343
|
+
const redefineResponseStatusVariableName = `${responseVariableNameToUse}Status`;
|
|
344
|
+
|
|
337
345
|
const isResponseHeadersVariableRedefinitionNeeded =
|
|
338
346
|
(destructuringResponseHeadersVariable !== undefined &&
|
|
339
347
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
@@ -346,6 +354,7 @@ const rule: ESLintUtils.RuleModule<'unknownError' | 'preferNativeFetch'> = creat
|
|
|
346
354
|
responseVariable === undefined &&
|
|
347
355
|
fixtureCallInformation.assertions !== undefined) ||
|
|
348
356
|
isResponseBodyVariableRedefinitionNeeded ||
|
|
357
|
+
isResponseStatusVariableRedefinitionNeeded ||
|
|
349
358
|
isResponseHeadersVariableRedefinitionNeeded;
|
|
350
359
|
|
|
351
360
|
const responseBodyHeadersVariableRedefineLines = isResponseVariableRedefinitionNeeded
|
|
@@ -362,6 +371,17 @@ const rule: ESLintUtils.RuleModule<'unknownError' | 'preferNativeFetch'> = creat
|
|
|
362
371
|
]
|
|
363
372
|
: []),
|
|
364
373
|
// eslint-disable-next-line no-nested-ternary
|
|
374
|
+
...(destructuringResponseStatusVariable
|
|
375
|
+
? [
|
|
376
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
377
|
+
`${fixtureCallInformation.variableDeclaration?.kind ?? 'const'} ${(destructuringResponseStatusVariable as TSESTree.ObjectPattern).type === AST_NODE_TYPES.ObjectPattern ? sourceCode.getText(destructuringResponseStatusVariable as TSESTree.ObjectPattern) : (destructuringResponseStatusVariable as Variable).name} = ${getResponseStatusRetrievalText(responseVariableNameToUse)}`,
|
|
378
|
+
]
|
|
379
|
+
: isResponseStatusVariableRedefinitionNeeded
|
|
380
|
+
? [
|
|
381
|
+
`const ${redefineResponseStatusVariableName} = ${getResponseStatusRetrievalText(responseVariableNameToUse)}`,
|
|
382
|
+
]
|
|
383
|
+
: []),
|
|
384
|
+
// eslint-disable-next-line no-nested-ternary
|
|
365
385
|
...(destructuringResponseHeadersVariable
|
|
366
386
|
? // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
367
387
|
(destructuringResponseHeadersVariable as TSESTree.ObjectPattern).type ===
|
|
@@ -21,6 +21,7 @@ const log = debug('eslint-plugin:response-reference');
|
|
|
21
21
|
* the implementation is for fixture API, but it can be used for fetch API as well since the tree structure is similar
|
|
22
22
|
* @param variableDeclaration - variable declaration node
|
|
23
23
|
*/
|
|
24
|
+
// eslint-disable-next-line sonarjs/cognitive-complexity
|
|
24
25
|
export function analyzeResponseReferences(
|
|
25
26
|
variableDeclaration: TSESTree.VariableDeclaration | undefined,
|
|
26
27
|
scopeManager: ScopeManager,
|
|
@@ -31,6 +32,7 @@ export function analyzeResponseReferences(
|
|
|
31
32
|
statusReferences: TSESTree.MemberExpression[];
|
|
32
33
|
destructuringBodyVariable?: Variable | TSESTree.ObjectPattern;
|
|
33
34
|
destructuringHeadersVariable?: Variable | TSESTree.ObjectPattern;
|
|
35
|
+
destructuringStatusVariable?: Variable | TSESTree.ObjectPattern;
|
|
34
36
|
destructuringHeadersReferences?: TSESTree.MemberExpression[] | undefined;
|
|
35
37
|
} {
|
|
36
38
|
const results: {
|
|
@@ -40,6 +42,7 @@ export function analyzeResponseReferences(
|
|
|
40
42
|
statusReferences: TSESTree.MemberExpression[];
|
|
41
43
|
destructuringBodyVariable?: Variable | TSESTree.ObjectPattern;
|
|
42
44
|
destructuringHeadersVariable?: Variable | TSESTree.ObjectPattern;
|
|
45
|
+
destructuringStatusVariable?: Variable | TSESTree.ObjectPattern;
|
|
43
46
|
destructuringHeadersReferences?: TSESTree.MemberExpression[] | undefined;
|
|
44
47
|
} = {
|
|
45
48
|
bodyReferences: [],
|
|
@@ -90,6 +93,13 @@ export function analyzeResponseReferences(
|
|
|
90
93
|
identifierParent.key.name === 'body'
|
|
91
94
|
) {
|
|
92
95
|
results.destructuringBodyVariable = responseVariable;
|
|
96
|
+
} else if (
|
|
97
|
+
// body reference through destruction/renaming, e.g. "const { body } = ..."
|
|
98
|
+
identifierParent.type === AST_NODE_TYPES.Property &&
|
|
99
|
+
identifierParent.key.type === AST_NODE_TYPES.Identifier &&
|
|
100
|
+
(identifierParent.key.name === 'status' || identifierParent.key.name === 'statusCode')
|
|
101
|
+
) {
|
|
102
|
+
results.destructuringStatusVariable = responseVariable;
|
|
93
103
|
} else if (
|
|
94
104
|
// header reference through destruction/renaming, e.g. "const { headers } = ..."
|
|
95
105
|
identifierParent.type === AST_NODE_TYPES.Property &&
|
|
@@ -119,6 +129,13 @@ export function analyzeResponseReferences(
|
|
|
119
129
|
) {
|
|
120
130
|
results.destructuringBodyVariable = parent;
|
|
121
131
|
}
|
|
132
|
+
if (
|
|
133
|
+
parent2?.type === AST_NODE_TYPES.Property &&
|
|
134
|
+
parent2.key.type === AST_NODE_TYPES.Identifier &&
|
|
135
|
+
(parent2.key.name === 'status' || parent2.key.name === 'statusCode')
|
|
136
|
+
) {
|
|
137
|
+
results.destructuringStatusVariable = parent;
|
|
138
|
+
}
|
|
122
139
|
if (
|
|
123
140
|
parent2?.type === AST_NODE_TYPES.Property &&
|
|
124
141
|
parent2.key.type === AST_NODE_TYPES.Identifier &&
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
// agent/supertest-then.ts
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Copyright (c) 2021-2024 Check Digit, LLC
|
|
5
|
+
*
|
|
6
|
+
* This code is licensed under the MIT license (see LICENSE.txt for details).
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { strict as assert } from 'node:assert';
|
|
10
|
+
|
|
11
|
+
import { AST_NODE_TYPES, ESLintUtils, TSESTree } from '@typescript-eslint/utils';
|
|
12
|
+
import type { SourceCode } from '@typescript-eslint/utils/ts-eslint';
|
|
13
|
+
|
|
14
|
+
import { getEnclosingFunction, getParent, isUsedInArrayOrAsArgument } from '../library/ts-tree';
|
|
15
|
+
import getDocumentationUrl from '../get-documentation-url';
|
|
16
|
+
import { getIndentation } from '../library/format';
|
|
17
|
+
|
|
18
|
+
export const ruleId = 'supertest-then';
|
|
19
|
+
|
|
20
|
+
interface FixtureCallInformation {
|
|
21
|
+
fixtureNode: TSESTree.CallExpression;
|
|
22
|
+
requestBody?: TSESTree.Expression;
|
|
23
|
+
requestHeaders?: { name: TSESTree.Expression; value: TSESTree.Expression }[];
|
|
24
|
+
assertions?: TSESTree.Expression[][];
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// recursively analyze the fixture/supertest call chain to collect information of request/response
|
|
28
|
+
function analyzeFixtureCall(call: TSESTree.CallExpression, results: FixtureCallInformation, sourceCode: SourceCode) {
|
|
29
|
+
const parent = getParent(call);
|
|
30
|
+
if (!parent) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
let nextCall;
|
|
35
|
+
if (parent.type !== AST_NODE_TYPES.MemberExpression) {
|
|
36
|
+
results.fixtureNode = call;
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (parent.property.type === AST_NODE_TYPES.Identifier) {
|
|
41
|
+
if (parent.property.name === 'expect') {
|
|
42
|
+
// supertest assertions
|
|
43
|
+
const assertionCall = getParent(parent);
|
|
44
|
+
assert.ok(assertionCall && assertionCall.type === AST_NODE_TYPES.CallExpression);
|
|
45
|
+
results.assertions = [...(results.assertions ?? []), assertionCall.arguments as TSESTree.Expression[]];
|
|
46
|
+
nextCall = assertionCall;
|
|
47
|
+
}
|
|
48
|
+
} else {
|
|
49
|
+
throw new Error(`Unexpected TSESTree.Expression in fixture/supertest call ${sourceCode.getText(parent)}.`);
|
|
50
|
+
}
|
|
51
|
+
if (nextCall) {
|
|
52
|
+
analyzeFixtureCall(nextCall, results, sourceCode);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// eslint-disable-next-line sonarjs/cognitive-complexity
|
|
57
|
+
function createResponseAssertions(
|
|
58
|
+
fixtureCallInformation: FixtureCallInformation,
|
|
59
|
+
sourceCode: SourceCode,
|
|
60
|
+
responseVariableName: string,
|
|
61
|
+
) {
|
|
62
|
+
let statusAssertion: string | undefined;
|
|
63
|
+
const nonStatusAssertions: string[] = [];
|
|
64
|
+
for (const expectArguments of fixtureCallInformation.assertions ?? []) {
|
|
65
|
+
if (expectArguments.length === 1) {
|
|
66
|
+
const [assertionArgument] = expectArguments;
|
|
67
|
+
assert.ok(assertionArgument);
|
|
68
|
+
if (
|
|
69
|
+
(assertionArgument.type === AST_NODE_TYPES.MemberExpression &&
|
|
70
|
+
assertionArgument.object.type === AST_NODE_TYPES.Identifier &&
|
|
71
|
+
assertionArgument.object.name === 'StatusCodes') ||
|
|
72
|
+
assertionArgument.type === AST_NODE_TYPES.Literal ||
|
|
73
|
+
sourceCode.getText(assertionArgument).includes('StatusCodes.')
|
|
74
|
+
) {
|
|
75
|
+
// status code assertion
|
|
76
|
+
statusAssertion = `assert.equal(${responseVariableName}.status, ${sourceCode.getText(assertionArgument)})`;
|
|
77
|
+
} else if (assertionArgument.type === AST_NODE_TYPES.ArrowFunctionExpression) {
|
|
78
|
+
// callback assertion using arrow function
|
|
79
|
+
let functionBody = sourceCode.getText(assertionArgument.body);
|
|
80
|
+
|
|
81
|
+
const [originalResponseArgument] = assertionArgument.params;
|
|
82
|
+
assert.ok(originalResponseArgument?.type === AST_NODE_TYPES.Identifier);
|
|
83
|
+
const originalResponseArgumentName = originalResponseArgument.name;
|
|
84
|
+
if (originalResponseArgumentName !== responseVariableName) {
|
|
85
|
+
functionBody = functionBody.replace(
|
|
86
|
+
new RegExp(`\\b${originalResponseArgumentName}\\b`, 'ug'),
|
|
87
|
+
responseVariableName,
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
nonStatusAssertions.push(`assert.doesNotThrow(()=>${functionBody})`);
|
|
91
|
+
} else if (assertionArgument.type === AST_NODE_TYPES.Identifier) {
|
|
92
|
+
// callback assertion using function reference
|
|
93
|
+
nonStatusAssertions.push(
|
|
94
|
+
`assert.doesNotThrow(()=>${sourceCode.getText(assertionArgument)}(${responseVariableName}))`,
|
|
95
|
+
);
|
|
96
|
+
} else if (
|
|
97
|
+
assertionArgument.type === AST_NODE_TYPES.ObjectExpression ||
|
|
98
|
+
assertionArgument.type === AST_NODE_TYPES.CallExpression
|
|
99
|
+
) {
|
|
100
|
+
// body deep equal assertion
|
|
101
|
+
nonStatusAssertions.push(
|
|
102
|
+
`assert.deepEqual(await ${responseVariableName}.json(), ${sourceCode.getText(assertionArgument)})`,
|
|
103
|
+
);
|
|
104
|
+
} else {
|
|
105
|
+
throw new Error(`Unexpected Supertest assertion argument: ".expect(${sourceCode.getText(assertionArgument)})`);
|
|
106
|
+
}
|
|
107
|
+
} else if (expectArguments.length === 2) {
|
|
108
|
+
// header assertion
|
|
109
|
+
const [headerName, headerValue] = expectArguments;
|
|
110
|
+
assert.ok(headerName && headerValue);
|
|
111
|
+
const headersReference = `${responseVariableName}.headers`;
|
|
112
|
+
if (headerValue.type === AST_NODE_TYPES.Literal && headerValue.value instanceof RegExp) {
|
|
113
|
+
nonStatusAssertions.push(
|
|
114
|
+
`assert.ok(${headersReference}.get(${sourceCode.getText(headerName)}).match(${sourceCode.getText(headerValue)}))`,
|
|
115
|
+
);
|
|
116
|
+
} else {
|
|
117
|
+
nonStatusAssertions.push(
|
|
118
|
+
`assert.equal(${headersReference}.get(${sourceCode.getText(headerName)}), ${sourceCode.getText(headerValue)})`,
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
statusAssertion,
|
|
125
|
+
nonStatusAssertions,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const createRule = ESLintUtils.RuleCreator((name) => getDocumentationUrl(name));
|
|
130
|
+
const rule: ESLintUtils.RuleModule<
|
|
131
|
+
'unknownError' | 'preferNativeFetch'
|
|
132
|
+
// | 'shouldUseHeaderGetter'
|
|
133
|
+
> = createRule({
|
|
134
|
+
name: ruleId,
|
|
135
|
+
meta: {
|
|
136
|
+
type: 'suggestion',
|
|
137
|
+
docs: {
|
|
138
|
+
description: 'Prefer native fetch API over customized fixture API.',
|
|
139
|
+
url: getDocumentationUrl(ruleId),
|
|
140
|
+
},
|
|
141
|
+
messages: {
|
|
142
|
+
preferNativeFetch: 'Prefer native fetch API over customized fixture API.',
|
|
143
|
+
// shouldUseHeaderGetter: 'Getter should be used to access response headers.',
|
|
144
|
+
unknownError: 'Unknown error occurred in file "{{fileName}}": {{ error }}.',
|
|
145
|
+
},
|
|
146
|
+
fixable: 'code',
|
|
147
|
+
schema: [],
|
|
148
|
+
},
|
|
149
|
+
defaultOptions: [],
|
|
150
|
+
create(context) {
|
|
151
|
+
const sourceCode = context.sourceCode;
|
|
152
|
+
const scopeManager = sourceCode.scopeManager;
|
|
153
|
+
assert.ok(scopeManager);
|
|
154
|
+
|
|
155
|
+
return {
|
|
156
|
+
'CallExpression[callee.property.name="expect"]': (supertestCall: TSESTree.CallExpression) => {
|
|
157
|
+
try {
|
|
158
|
+
assert.ok(supertestCall.callee.type === AST_NODE_TYPES.MemberExpression);
|
|
159
|
+
if (
|
|
160
|
+
supertestCall.callee.object.type !== AST_NODE_TYPES.CallExpression ||
|
|
161
|
+
(supertestCall.callee.object.callee.type === AST_NODE_TYPES.MemberExpression &&
|
|
162
|
+
supertestCall.callee.object.callee.property.type === AST_NODE_TYPES.Identifier &&
|
|
163
|
+
supertestCall.callee.object.callee.property.name === 'expect')
|
|
164
|
+
) {
|
|
165
|
+
// skip nested expect calls, only focus on the top level
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (!(isUsedInArrayOrAsArgument(supertestCall) || getEnclosingFunction(supertestCall)?.async === false)) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
const fixtureFunction = supertestCall.callee.object;
|
|
174
|
+
const indentation = getIndentation(supertestCall, sourceCode);
|
|
175
|
+
|
|
176
|
+
const [urlArgumentNode] = supertestCall.arguments; // e.g. `/sample-service/v1/ping`
|
|
177
|
+
assert.ok(urlArgumentNode !== undefined);
|
|
178
|
+
|
|
179
|
+
const fixtureCallInformation = {} as FixtureCallInformation;
|
|
180
|
+
analyzeFixtureCall(fixtureFunction, fixtureCallInformation, sourceCode);
|
|
181
|
+
|
|
182
|
+
const responseVariableNameToUse = 'res';
|
|
183
|
+
const { statusAssertion, nonStatusAssertions } = createResponseAssertions(
|
|
184
|
+
fixtureCallInformation,
|
|
185
|
+
sourceCode,
|
|
186
|
+
responseVariableNameToUse,
|
|
187
|
+
);
|
|
188
|
+
|
|
189
|
+
// add variable declaration if needed
|
|
190
|
+
const disableLintComment = '// eslint-disable-next-line @checkdigit/no-promise-instance-method';
|
|
191
|
+
const fetchCallText = sourceCode.getText(fixtureFunction);
|
|
192
|
+
const appendingAssignmentAndAssertionText = [
|
|
193
|
+
...(statusAssertion !== undefined ? [statusAssertion] : []),
|
|
194
|
+
...nonStatusAssertions,
|
|
195
|
+
].join(`;\n${indentation}`);
|
|
196
|
+
const replacementText = fixtureCallInformation.assertions
|
|
197
|
+
? [
|
|
198
|
+
disableLintComment,
|
|
199
|
+
`${fetchCallText}.then((${responseVariableNameToUse}) => {`,
|
|
200
|
+
appendingAssignmentAndAssertionText === '' ? '' : ` ${appendingAssignmentAndAssertionText};`,
|
|
201
|
+
` return ${responseVariableNameToUse};`,
|
|
202
|
+
`})`,
|
|
203
|
+
].join(`\n${indentation}`)
|
|
204
|
+
: fetchCallText;
|
|
205
|
+
|
|
206
|
+
context.report({
|
|
207
|
+
node: supertestCall,
|
|
208
|
+
messageId: 'preferNativeFetch',
|
|
209
|
+
fix(fixer) {
|
|
210
|
+
return fixer.replaceText(fixtureCallInformation.fixtureNode, replacementText);
|
|
211
|
+
},
|
|
212
|
+
});
|
|
213
|
+
} catch (error) {
|
|
214
|
+
// eslint-disable-next-line no-console
|
|
215
|
+
console.error(`Failed to apply ${ruleId} rule for file "${context.filename}":`, error);
|
|
216
|
+
context.report({
|
|
217
|
+
node: supertestCall,
|
|
218
|
+
messageId: 'unknownError',
|
|
219
|
+
data: {
|
|
220
|
+
fileName: context.filename,
|
|
221
|
+
error: error instanceof Error ? error.toString() : JSON.stringify(error),
|
|
222
|
+
},
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
},
|
|
226
|
+
};
|
|
227
|
+
},
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
export default rule;
|
package/src/index.ts
CHANGED
|
@@ -23,6 +23,7 @@ import invalidJsonStringify, { ruleId as invalidJsonStringifyRuleId } from './in
|
|
|
23
23
|
import noDuplicatedImports, { ruleId as noDuplicatedImportsRuleId } from './no-duplicated-imports';
|
|
24
24
|
import noFixture, { ruleId as noFixtureRuleId } from './agent/no-fixture';
|
|
25
25
|
import noSupertest, { ruleId as noSupertestRuleId } from './agent/no-supertest';
|
|
26
|
+
import supertestThen, { ruleId as supertestThenRuleId } from './agent/supertest-then';
|
|
26
27
|
import noLegacyServiceTyping, { ruleId as noLegacyServiceTypingRuleId } from './no-legacy-service-typing';
|
|
27
28
|
import noMappedResponse, { ruleId as noMappedResponseRuleId } from './agent/no-mapped-response';
|
|
28
29
|
import noPromiseInstanceMethod, { ruleId as noPromiseInstanceMethodRuleId } from './no-promise-instance-method';
|
|
@@ -74,6 +75,7 @@ const rules: Record<string, TSESLint.LooseRuleDefinition> = {
|
|
|
74
75
|
[noPromiseInstanceMethodRuleId]: noPromiseInstanceMethod,
|
|
75
76
|
[noFixtureRuleId]: noFixture,
|
|
76
77
|
[noSupertestRuleId]: noSupertest,
|
|
78
|
+
[supertestThenRuleId]: supertestThen,
|
|
77
79
|
[fetchThenRuleId]: fetchThen,
|
|
78
80
|
[noServiceWrapperRuleId]: noServiceWrapper,
|
|
79
81
|
[noStatusCodeRuleId]: noStatusCode,
|
|
@@ -134,6 +136,7 @@ const configs: Record<string, TSESLint.FlatConfig.Config[]> = {
|
|
|
134
136
|
[`@checkdigit/${addUrlDomainRuleId}`]: 'off',
|
|
135
137
|
[`@checkdigit/${noFixtureRuleId}`]: 'off',
|
|
136
138
|
[`@checkdigit/${noSupertestRuleId}`]: 'off',
|
|
139
|
+
[`@checkdigit/${supertestThenRuleId}`]: 'off',
|
|
137
140
|
[`@checkdigit/${noServiceWrapperRuleId}`]: 'off',
|
|
138
141
|
[`@checkdigit/${noStatusCodeRuleId}`]: 'off',
|
|
139
142
|
[`@checkdigit/${fetchResponseBodyJsonRuleId}`]: 'off',
|
|
@@ -183,6 +186,7 @@ const configs: Record<string, TSESLint.FlatConfig.Config[]> = {
|
|
|
183
186
|
[`@checkdigit/${addUrlDomainRuleId}`]: 'off',
|
|
184
187
|
[`@checkdigit/${noFixtureRuleId}`]: 'off',
|
|
185
188
|
[`@checkdigit/${noSupertestRuleId}`]: 'off',
|
|
189
|
+
[`@checkdigit/${supertestThenRuleId}`]: 'off',
|
|
186
190
|
[`@checkdigit/${noServiceWrapperRuleId}`]: 'off',
|
|
187
191
|
[`@checkdigit/${noStatusCodeRuleId}`]: 'off',
|
|
188
192
|
[`@checkdigit/${fetchResponseBodyJsonRuleId}`]: 'off',
|
|
@@ -227,6 +231,7 @@ const configs: Record<string, TSESLint.FlatConfig.Config[]> = {
|
|
|
227
231
|
[`@checkdigit/${addAssertImportRuleId}`]: 'error',
|
|
228
232
|
[`@checkdigit/${noFixtureRuleId}`]: 'error',
|
|
229
233
|
[`@checkdigit/${noSupertestRuleId}`]: 'error',
|
|
234
|
+
[`@checkdigit/${supertestThenRuleId}`]: 'error',
|
|
230
235
|
},
|
|
231
236
|
},
|
|
232
237
|
{
|