@typespec/spector 0.1.0-alpha.10-dev.3 → 0.1.0-alpha.10-dev.5
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/src/actions/helper.d.ts +7 -15
- package/dist/src/actions/helper.d.ts.map +1 -1
- package/dist/src/actions/helper.js +51 -73
- package/dist/src/actions/helper.js.map +1 -1
- package/dist/src/actions/serve.d.ts.map +1 -1
- package/dist/src/actions/serve.js +0 -1
- package/dist/src/actions/serve.js.map +1 -1
- package/dist/src/actions/server-test.d.ts +2 -3
- package/dist/src/actions/server-test.d.ts.map +1 -1
- package/dist/src/actions/server-test.js +94 -115
- package/dist/src/actions/server-test.js.map +1 -1
- package/dist/src/app/app.d.ts.map +1 -1
- package/dist/src/app/app.js +37 -51
- package/dist/src/app/app.js.map +1 -1
- package/dist/src/coverage/coverage-tracker.d.ts.map +1 -1
- package/dist/src/coverage/coverage-tracker.js.map +1 -1
- package/package.json +1 -6
- package/src/actions/helper.ts +59 -100
- package/src/actions/serve.ts +0 -1
- package/src/actions/server-test.ts +107 -135
- package/src/app/app.ts +47 -68
- package/src/coverage/coverage-tracker.ts +2 -2
- package/temp/.tsbuildinfo +1 -1
|
@@ -1,20 +1,12 @@
|
|
|
1
|
-
import { HttpMethod,
|
|
2
|
-
import { AxiosRequestConfig, AxiosResponse } from "axios";
|
|
1
|
+
import { HttpMethod, MockBody, MockMultipartBody } from "@typespec/spec-api";
|
|
3
2
|
export interface ServiceRequest {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
};
|
|
3
|
+
method: HttpMethod;
|
|
4
|
+
url: string;
|
|
5
|
+
body?: MockBody | MockMultipartBody;
|
|
6
|
+
headers?: Record<string, unknown>;
|
|
7
|
+
query?: Record<string, unknown>;
|
|
10
8
|
}
|
|
11
|
-
export declare function makeServiceCall(
|
|
12
|
-
export declare function makePutCall(request: ServiceRequest): Promise<AxiosResponse<any, any>>;
|
|
13
|
-
export declare function makePostCall(request: ServiceRequest): Promise<AxiosResponse<any, any>>;
|
|
14
|
-
export declare function makeGetCall(request: ServiceRequest): Promise<AxiosResponse<any, any>>;
|
|
15
|
-
export declare function makePatchCall(request: ServiceRequest): Promise<AxiosResponse<any, any>>;
|
|
16
|
-
export declare function makeDeleteCall(request: ServiceRequest): Promise<AxiosResponse<any, any>>;
|
|
17
|
-
export declare function makeHeadCall(request: ServiceRequest): Promise<AxiosResponse<any, any>>;
|
|
9
|
+
export declare function makeServiceCall(request: ServiceRequest): Promise<Response>;
|
|
18
10
|
type EncodingType = "utf-8" | "base64" | "base64url" | "hex";
|
|
19
11
|
export declare function uint8ArrayToString(bytes: Uint8Array, format: EncodingType): string;
|
|
20
12
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../../src/actions/helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../../src/actions/helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE7E,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,QAAQ,GAAG,iBAAiB,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAyCD,wBAAsB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,CAuBhF;AAED,KAAK,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,GAAG,KAAK,CAAC;AAC7D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAElF"}
|
|
@@ -1,81 +1,59 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
if (request.options?.config?.headers?.["Content-Type"] === "multipart/form-data") {
|
|
7
|
-
const formData = new FormData();
|
|
8
|
-
if (request.options?.requestBody) {
|
|
9
|
-
for (const key in request.options.requestBody) {
|
|
10
|
-
formData.append(key, JSON.stringify(request.options.requestBody[key]));
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
if (request.options.files) {
|
|
14
|
-
request.options.files.forEach((file) => {
|
|
15
|
-
formData.append(`${file.fieldname}`, file.buffer, {
|
|
16
|
-
filename: file.originalname,
|
|
17
|
-
contentType: file.mimetype,
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
request.options.requestBody = formData;
|
|
22
|
-
request.options.config = {
|
|
23
|
-
...request.options.config,
|
|
24
|
-
headers: formData.getHeaders(),
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
function checkAndUpdateEndpoint(request) {
|
|
29
|
-
if (request.options?.config?.params) {
|
|
30
|
-
for (const key in request.options.config.params) {
|
|
31
|
-
request.endPoint = request.endPoint.replace(`:${key}`, request.options.config.params[key]);
|
|
1
|
+
function renderMultipartRequest(body) {
|
|
2
|
+
const formData = new FormData();
|
|
3
|
+
if (body.parts) {
|
|
4
|
+
for (const key in body.parts) {
|
|
5
|
+
formData.append(key, JSON.stringify(body.parts[key]));
|
|
32
6
|
}
|
|
33
7
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
checkAndAddFormDataIfRequired(request);
|
|
39
|
-
if (serviceCallType === "put") {
|
|
40
|
-
return await makePutCall(request);
|
|
41
|
-
}
|
|
42
|
-
if (serviceCallType === "post") {
|
|
43
|
-
return await makePostCall(request);
|
|
44
|
-
}
|
|
45
|
-
if (serviceCallType === "get") {
|
|
46
|
-
return await makeGetCall(request);
|
|
8
|
+
if (body.files) {
|
|
9
|
+
body.files.forEach((file) => {
|
|
10
|
+
formData.append(`${file.fieldname}`, new Blob([file.buffer], { type: file.mimetype }), file.originalname);
|
|
11
|
+
});
|
|
47
12
|
}
|
|
48
|
-
|
|
49
|
-
|
|
13
|
+
return formData;
|
|
14
|
+
}
|
|
15
|
+
function resolveUrl(request) {
|
|
16
|
+
let endpoint = request.url.replaceAll("[:]", ":");
|
|
17
|
+
if (request.query) {
|
|
18
|
+
const query = new URLSearchParams();
|
|
19
|
+
for (const [key, value] of Object.entries(request.query)) {
|
|
20
|
+
if (Array.isArray(value)) {
|
|
21
|
+
for (const v of value) {
|
|
22
|
+
query.append(key, v);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
query.append(key, value);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
endpoint = `${endpoint}?${query.toString()}`;
|
|
50
30
|
}
|
|
51
|
-
|
|
52
|
-
|
|
31
|
+
return endpoint;
|
|
32
|
+
}
|
|
33
|
+
export async function makeServiceCall(request) {
|
|
34
|
+
const url = resolveUrl(request);
|
|
35
|
+
let body;
|
|
36
|
+
let headers = request.headers;
|
|
37
|
+
if (request.body) {
|
|
38
|
+
if ("kind" in request.body) {
|
|
39
|
+
const formData = renderMultipartRequest(request.body);
|
|
40
|
+
body = formData;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
body = request.body.rawContent;
|
|
44
|
+
headers = {
|
|
45
|
+
...headers,
|
|
46
|
+
...(request.body?.contentType && {
|
|
47
|
+
"Content-Type": request.body.contentType,
|
|
48
|
+
}),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
53
51
|
}
|
|
54
|
-
return await
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
60
|
-
export async function makePostCall(request) {
|
|
61
|
-
const response = await axios.post(request.endPoint, request.options?.requestBody, request.options?.config);
|
|
62
|
-
return response;
|
|
63
|
-
}
|
|
64
|
-
export async function makeGetCall(request) {
|
|
65
|
-
const response = await axios.get(request.endPoint, request.options?.config);
|
|
66
|
-
return response;
|
|
67
|
-
}
|
|
68
|
-
export async function makePatchCall(request) {
|
|
69
|
-
const response = await axios.patch(request.endPoint, request.options?.requestBody, request.options?.config);
|
|
70
|
-
return response;
|
|
71
|
-
}
|
|
72
|
-
export async function makeDeleteCall(request) {
|
|
73
|
-
const response = await axios.delete(request.endPoint, request.options?.config);
|
|
74
|
-
return response;
|
|
75
|
-
}
|
|
76
|
-
export async function makeHeadCall(request) {
|
|
77
|
-
const response = await axios.head(request.endPoint, request.options?.config);
|
|
78
|
-
return response;
|
|
52
|
+
return await fetch(url, {
|
|
53
|
+
method: request.method.toUpperCase(),
|
|
54
|
+
body,
|
|
55
|
+
headers,
|
|
56
|
+
});
|
|
79
57
|
}
|
|
80
58
|
export function uint8ArrayToString(bytes, format) {
|
|
81
59
|
return Buffer.from(bytes).toString(format);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../src/actions/helper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../src/actions/helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../src/actions/serve.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../src/actions/serve.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,KAAK,CAAC,MAAM,EAAE,WAAW,iBAgB9C;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,WAAW,iBAmC1D;AAED,wBAAsB,IAAI,CAAC,MAAM,EAAE,UAAU,iBAc5C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/actions/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/actions/serve.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-test.d.ts","sourceRoot":"","sources":["../../../src/actions/server-test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server-test.d.ts","sourceRoot":"","sources":["../../../src/actions/server-test.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAkFD,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAuBD,wBAAsB,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,iBAyEtF"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import { ValidationError } from "@typespec/spec-api";
|
|
2
|
+
import deepEqual from "deep-equal";
|
|
1
3
|
import micromatch from "micromatch";
|
|
4
|
+
import { inspect } from "node:util";
|
|
2
5
|
import pc from "picocolors";
|
|
3
6
|
import { logger } from "../logger.js";
|
|
4
7
|
import { loadScenarioMockApis } from "../scenarios-resolver.js";
|
|
5
|
-
import { makeServiceCall
|
|
8
|
+
import { makeServiceCall } from "./helper.js";
|
|
6
9
|
const DEFAULT_BASE_URL = "http://localhost:3000";
|
|
7
10
|
class ServerTestsGenerator {
|
|
8
11
|
name = "";
|
|
@@ -13,110 +16,64 @@ class ServerTestsGenerator {
|
|
|
13
16
|
this.mockApiDefinition = mockApiDefinition;
|
|
14
17
|
this.serverBasePath = serverBasePath;
|
|
15
18
|
}
|
|
16
|
-
getConfigObj() {
|
|
17
|
-
let config = {};
|
|
18
|
-
if (this.mockApiDefinition.request.status) {
|
|
19
|
-
const validStatusCode = this.mockApiDefinition.request.status;
|
|
20
|
-
config = {
|
|
21
|
-
validateStatus: function (status) {
|
|
22
|
-
return (status >= 200 && status < 300) || validStatusCode === status;
|
|
23
|
-
},
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
if (this.mockApiDefinition.request.params) {
|
|
27
|
-
config = {
|
|
28
|
-
...config,
|
|
29
|
-
params: this.mockApiDefinition.request.params,
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
if (this.mockApiDefinition.request.headers) {
|
|
33
|
-
config = {
|
|
34
|
-
...config,
|
|
35
|
-
headers: this.mockApiDefinition.request.headers,
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
if (["head", "get", "delete"].includes(this.mockApiDefinition.method) &&
|
|
39
|
-
this.mockApiDefinition.request.body) {
|
|
40
|
-
config = {
|
|
41
|
-
...config,
|
|
42
|
-
data: this.mockApiDefinition.request.body,
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
return config;
|
|
46
|
-
}
|
|
47
19
|
async executeScenario() {
|
|
48
|
-
|
|
49
|
-
const response = await makeServiceCall(
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
},
|
|
20
|
+
log(`Executing ${this.name} endpoint - Method: ${this.mockApiDefinition.method}`);
|
|
21
|
+
const response = await makeServiceCall({
|
|
22
|
+
method: this.mockApiDefinition.method,
|
|
23
|
+
url: `${this.serverBasePath}${this.mockApiDefinition.uri}`,
|
|
24
|
+
body: this.mockApiDefinition.request?.body,
|
|
25
|
+
headers: this.mockApiDefinition.request?.headers,
|
|
26
|
+
query: this.mockApiDefinition.request?.query,
|
|
56
27
|
});
|
|
57
28
|
if (this.mockApiDefinition.response.status !== response.status) {
|
|
58
|
-
|
|
59
|
-
logger.error(`Expected: ${this.mockApiDefinition.response.status} - Actual: ${response.status}`);
|
|
60
|
-
throw new Error(`Status code mismatch for ${this.name} endpoint`);
|
|
29
|
+
throw new ValidationError("Status code mismatch", this.mockApiDefinition.response.status, response.status);
|
|
61
30
|
}
|
|
62
31
|
if (this.mockApiDefinition.response.body) {
|
|
63
|
-
|
|
64
|
-
if (JSON.stringify(this.mockApiDefinition.response.body.rawContent) !==
|
|
65
|
-
JSON.stringify(response.data)) {
|
|
66
|
-
logger.error(`Response data mismatch for ${this.name} endpoint`);
|
|
67
|
-
logger.error(`Expected: ${this.mockApiDefinition.response.body["rawContent"]} - Actual: ${response.data}`);
|
|
68
|
-
throw new Error(`Response data mismatch for ${this.name} endpoint`);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
else if (Buffer.isBuffer(this.mockApiDefinition.response.body.rawContent)) {
|
|
72
|
-
if (this.mockApiDefinition.request.headers &&
|
|
73
|
-
this.mockApiDefinition.request.headers["accept"] === "application/json") {
|
|
74
|
-
if (response.data.content !==
|
|
75
|
-
this.mockApiDefinition.response.body.rawContent.toString("base64")) {
|
|
76
|
-
throw new Error(`Response data mismatch for ${this.name} endpoint`);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
if (uint8ArrayToString(response.data, "utf-8") !==
|
|
81
|
-
this.mockApiDefinition.response.body.rawContent.toString()) {
|
|
82
|
-
throw new Error(`Response data mismatch for ${this.name} endpoint`);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
else if (this.mockApiDefinition.response.body.contentType === "text/plain") {
|
|
87
|
-
if (this.mockApiDefinition.response.body.rawContent !== response.data) {
|
|
88
|
-
logger.error(`Response data mismatch for ${this.name} endpoint`);
|
|
89
|
-
logger.error(`Expected: ${this.mockApiDefinition.response.body} - Actual: ${response.data}`);
|
|
90
|
-
throw new Error(`Response data mismatch for ${this.name} endpoint`);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
const responseData = JSON.stringify(response.data);
|
|
95
|
-
if (this.mockApiDefinition.response.body.rawContent !==
|
|
96
|
-
responseData.replace(this.serverBasePath, "")) {
|
|
97
|
-
logger.error(`Response data mismatch for ${this.name} endpoint`);
|
|
98
|
-
logger.error(`Expected: ${this.mockApiDefinition.response.body} - Actual: ${response.data}`);
|
|
99
|
-
throw new Error(`Response data mismatch for ${this.name} endpoint`);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
32
|
+
await this.#validateBody(response, this.mockApiDefinition.response.body);
|
|
102
33
|
}
|
|
103
34
|
if (this.mockApiDefinition.response.headers) {
|
|
104
35
|
for (const key in this.mockApiDefinition.response.headers) {
|
|
105
36
|
if (this.mockApiDefinition.response.headers[key] !==
|
|
106
|
-
response.headers
|
|
107
|
-
|
|
108
|
-
logger.error(`Expected: ${this.mockApiDefinition.response.headers[key]} - Actual: ${response.headers[key]}`);
|
|
109
|
-
throw new Error(`Response headers mismatch for ${this.name} endpoint`);
|
|
37
|
+
response.headers.get(key)?.replace(this.serverBasePath, "")) {
|
|
38
|
+
throw new ValidationError(`Response headers mismatch`, this.mockApiDefinition.response.headers[key], response.headers.get(key));
|
|
110
39
|
}
|
|
111
40
|
}
|
|
112
41
|
}
|
|
113
42
|
}
|
|
43
|
+
async #validateBody(response, body) {
|
|
44
|
+
if (Buffer.isBuffer(body.rawContent)) {
|
|
45
|
+
const responseData = Buffer.from(await response.arrayBuffer());
|
|
46
|
+
if (!deepEqual(responseData, body.rawContent)) {
|
|
47
|
+
throw new ValidationError(`Raw body mismatch`, body.rawContent, responseData);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
const responseData = await response.text();
|
|
52
|
+
if (typeof body.rawContent !== "string") {
|
|
53
|
+
throw new Error(` bodyContent should be string`);
|
|
54
|
+
}
|
|
55
|
+
switch (body.contentType) {
|
|
56
|
+
case "application/xml":
|
|
57
|
+
case "text/plain":
|
|
58
|
+
if (body.rawContent !== responseData) {
|
|
59
|
+
throw new ValidationError("Response data mismatch", body.rawContent, responseData);
|
|
60
|
+
}
|
|
61
|
+
break;
|
|
62
|
+
case "application/json":
|
|
63
|
+
const expected = JSON.parse(body.rawContent);
|
|
64
|
+
const actual = JSON.parse(responseData);
|
|
65
|
+
if (!deepEqual(actual, expected, { strict: true })) {
|
|
66
|
+
throw new ValidationError("Response data mismatch", expected, actual);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
114
71
|
}
|
|
115
72
|
async function delay(ms) {
|
|
116
73
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
117
74
|
}
|
|
118
75
|
async function waitForServer(baseUrl) {
|
|
119
|
-
logger.
|
|
76
|
+
logger.debug(`Executing server tests with base URL: ${baseUrl}`);
|
|
120
77
|
let retry = 0;
|
|
121
78
|
while (retry < 3) {
|
|
122
79
|
try {
|
|
@@ -135,14 +92,15 @@ export async function serverTest(scenariosPath, options = {}) {
|
|
|
135
92
|
const baseUrl = options.baseUrl ?? DEFAULT_BASE_URL;
|
|
136
93
|
await waitForServer(baseUrl);
|
|
137
94
|
const scenarios = await loadScenarioMockApis(scenariosPath);
|
|
138
|
-
const
|
|
139
|
-
const
|
|
95
|
+
const successfullScenarios = [];
|
|
96
|
+
const failureDiagnostics = [];
|
|
97
|
+
const scenarioEntries = Object.entries(scenarios);
|
|
140
98
|
// 3. Execute each scenario
|
|
141
|
-
for (const [name, scenario] of
|
|
142
|
-
const
|
|
99
|
+
for (const [name, scenario] of scenarioEntries) {
|
|
100
|
+
const pathlikeName = name.replaceAll("_", "/").toLowerCase();
|
|
143
101
|
const filter = options.filter?.toLowerCase();
|
|
144
|
-
if (filter && !micromatch.isMatch(
|
|
145
|
-
logger.debug(`Skipping scenario: ${
|
|
102
|
+
if (filter && !micromatch.isMatch(pathlikeName, filter)) {
|
|
103
|
+
logger.debug(`Skipping scenario: ${pathlikeName}, does not match filter: ${filter}`);
|
|
146
104
|
continue;
|
|
147
105
|
}
|
|
148
106
|
if (!Array.isArray(scenario.apis))
|
|
@@ -153,37 +111,58 @@ export async function serverTest(scenariosPath, options = {}) {
|
|
|
153
111
|
const obj = new ServerTestsGenerator(name, api, baseUrl);
|
|
154
112
|
try {
|
|
155
113
|
await obj.executeScenario();
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
message: "executed successfully",
|
|
114
|
+
successfullScenarios.push({
|
|
115
|
+
name,
|
|
116
|
+
pathlikeName,
|
|
160
117
|
});
|
|
161
118
|
}
|
|
162
119
|
catch (e) {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
120
|
+
if (e instanceof ValidationError) {
|
|
121
|
+
failureDiagnostics.push({
|
|
122
|
+
scenarioName: name,
|
|
123
|
+
message: [
|
|
124
|
+
`Validation failed: ${e.message}:`,
|
|
125
|
+
` Expected:\n ${inspect(e.expected)}`,
|
|
126
|
+
` Actual:\n ${inspect(e.actual)}`,
|
|
127
|
+
].join("\n"),
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
failureDiagnostics.push({
|
|
132
|
+
scenarioName: name,
|
|
133
|
+
message: `code = ${e.code} \n message = ${e.message} \n name = ${e.name} \n stack = ${e.stack} \n status = ${e.status}`,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
168
136
|
}
|
|
169
137
|
}
|
|
170
138
|
}
|
|
171
139
|
// 4. Print diagnostics
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
140
|
+
log("");
|
|
141
|
+
log("Server Tests Diagnostics Summary");
|
|
142
|
+
if (successfullScenarios.length === 0 && failureDiagnostics.length === 0) {
|
|
143
|
+
logger.error("No scenarios were executed");
|
|
144
|
+
process.exit(-1);
|
|
145
|
+
}
|
|
146
|
+
if (successfullScenarios.length > 0)
|
|
147
|
+
log("Successfull scenarios");
|
|
148
|
+
successfullScenarios.forEach((diagnostic) => {
|
|
149
|
+
log(`${pc.green("✓")} Scenario: ${pc.cyan(diagnostic.name)}`);
|
|
177
150
|
});
|
|
178
|
-
if (
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
logger.error(`${pc.red("✘")} Scenario: ${diagnostic.scenario_name}`);
|
|
184
|
-
logger.error(`${diagnostic.message}`);
|
|
151
|
+
if (failureDiagnostics.length > 0) {
|
|
152
|
+
log("Failed scenarios");
|
|
153
|
+
failureDiagnostics.forEach((diagnostic) => {
|
|
154
|
+
log(`${pc.red("✘")} Scenario: ${pc.cyan(diagnostic.scenarioName)}`);
|
|
155
|
+
log(`${diagnostic.message}`);
|
|
185
156
|
});
|
|
186
|
-
process.exit(-1);
|
|
187
157
|
}
|
|
158
|
+
log(pc.bold(pc.green(`✓ ${scenarioEntries.length} passed`)));
|
|
159
|
+
if (failureDiagnostics.length > 0) {
|
|
160
|
+
log(pc.red(`✘ ${failureDiagnostics.length} failed`));
|
|
161
|
+
}
|
|
162
|
+
process.exit(failureDiagnostics.length > 0 ? 1 : 0);
|
|
163
|
+
}
|
|
164
|
+
function log(message) {
|
|
165
|
+
// eslint-disable-next-line no-console
|
|
166
|
+
console.log(message);
|
|
188
167
|
}
|
|
189
168
|
//# sourceMappingURL=server-test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-test.js","sourceRoot":"","sources":["../../../src/actions/server-test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server-test.js","sourceRoot":"","sources":["../../../src/actions/server-test.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AAOjD,MAAM,oBAAoB;IAChB,IAAI,GAAW,EAAE,CAAC;IAClB,iBAAiB,CAAoB;IACrC,cAAc,GAAW,EAAE,CAAC;IAEpC,YAAY,IAAY,EAAE,iBAAoC,EAAE,cAAsB;QACpF,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAEM,KAAK,CAAC,eAAe;QAC1B,GAAG,CAAC,aAAa,IAAI,CAAC,IAAI,uBAAuB,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC;QAElF,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC;YACrC,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM;YACrC,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE;YAC1D,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI;YAC1C,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO;YAChD,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK;SAC7C,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC/D,MAAM,IAAI,eAAe,CACvB,sBAAsB,EACtB,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,EACtC,QAAQ,CAAC,MAAM,CAChB,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACzC,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3E,CAAC;QAED,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC5C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBAC1D,IACE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC;oBAC5C,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,EAC3D,CAAC;oBACD,MAAM,IAAI,eAAe,CACvB,2BAA2B,EAC3B,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAC5C,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAC1B,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAkB,EAAE,IAAc;QACpD,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACrC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;YAC/D,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC9C,MAAM,IAAI,eAAe,CAAC,mBAAmB,EAAE,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;YAChF,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC3C,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACnD,CAAC;YAED,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;gBACzB,KAAK,iBAAiB,CAAC;gBACvB,KAAK,YAAY;oBACf,IAAI,IAAI,CAAC,UAAU,KAAK,YAAY,EAAE,CAAC;wBACrC,MAAM,IAAI,eAAe,CAAC,wBAAwB,EAAE,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;oBACrF,CAAC;oBACD,MAAM;gBACR,KAAK,kBAAkB;oBACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;oBACxC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;wBACnD,MAAM,IAAI,eAAe,CAAC,wBAAwB,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;oBACxE,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAOD,KAAK,UAAU,KAAK,CAAC,EAAU;IAC7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAAe;IAC1C,MAAM,CAAC,KAAK,CAAC,yCAAyC,OAAO,EAAE,CAAC,CAAC;IACjE,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;YACrB,MAAM;QACR,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,KAAK,EAAE,CAAC;YACR,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC3B,MAAM,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,KAAK,OAAO,YAAY,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,aAAqB,EAAE,UAA6B,EAAE;IACrF,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,gBAAgB,CAAC;IACpD,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAC7B,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAC5D,MAAM,oBAAoB,GAA6C,EAAE,CAAC;IAC1E,MAAM,kBAAkB,GAA4B,EAAE,CAAC;IAEvD,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClD,2BAA2B;IAC3B,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,eAAe,EAAE,CAAC;QAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;QAC7C,IAAI,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,CAAC;YACxD,MAAM,CAAC,KAAK,CAAC,sBAAsB,YAAY,4BAA4B,MAAM,EAAE,CAAC,CAAC;YACrF,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAS;QAC5C,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,GAAG,CAAC,IAAI,KAAK,mBAAmB;gBAAE,SAAS;YAC/C,MAAM,GAAG,GAAyB,IAAI,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YAC/E,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,eAAe,EAAE,CAAC;gBAC5B,oBAAoB,CAAC,IAAI,CAAC;oBACxB,IAAI;oBACJ,YAAY;iBACb,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,YAAY,eAAe,EAAE,CAAC;oBACjC,kBAAkB,CAAC,IAAI,CAAC;wBACtB,YAAY,EAAE,IAAI;wBAClB,OAAO,EAAE;4BACP,sBAAsB,CAAC,CAAC,OAAO,GAAG;4BAClC,mBAAmB,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;4BACxC,iBAAiB,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;yBACrC,CAAC,IAAI,CAAC,IAAI,CAAC;qBACb,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,kBAAkB,CAAC,IAAI,CAAC;wBACtB,YAAY,EAAE,IAAI;wBAClB,OAAO,EAAE,UAAU,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,OAAO,cAAc,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,KAAK,gBAAgB,CAAC,CAAC,MAAM,EAAE;qBACxH,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAExC,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzE,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAClE,oBAAoB,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;QAC1C,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACxB,kBAAkB,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YACxC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACpE,GAAG,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IACD,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,eAAe,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC;IAC7D,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,kBAAkB,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,GAAG,CAAC,OAAe;IAC1B,sCAAsC;IACtC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/app/app.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/app/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAQhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC3C,iBAAiB,EAAE,iBAAiB,CAAC;CACtC;AAED,qBAAa,UAAU;IAKT,OAAO,CAAC,MAAM;IAJ1B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,eAAe,CAAkB;gBAErB,MAAM,EAAE,gBAAgB;IAK/B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgCnC,OAAO,CAAC,gBAAgB;CAezB"}
|