@stratal/testing 0.0.1 → 0.0.2
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/README.md +332 -0
- package/package.json +10 -10
- package/dist/core/env/index.d.ts +0 -2
- package/dist/core/env/index.d.ts.map +0 -1
- package/dist/core/env/index.js +0 -2
- package/dist/core/env/index.js.map +0 -1
- package/dist/core/env/test-env.d.ts +0 -9
- package/dist/core/env/test-env.d.ts.map +0 -1
- package/dist/core/env/test-env.js +0 -14
- package/dist/core/env/test-env.js.map +0 -1
- package/dist/core/http/fetch-mock.d.ts +0 -236
- package/dist/core/http/fetch-mock.d.ts.map +0 -1
- package/dist/core/http/fetch-mock.js +0 -290
- package/dist/core/http/fetch-mock.js.map +0 -1
- package/dist/core/http/fetch-mock.types.d.ts +0 -48
- package/dist/core/http/fetch-mock.types.d.ts.map +0 -1
- package/dist/core/http/fetch-mock.types.js +0 -2
- package/dist/core/http/fetch-mock.types.js.map +0 -1
- package/dist/core/http/index.d.ts +0 -6
- package/dist/core/http/index.d.ts.map +0 -1
- package/dist/core/http/index.js +0 -5
- package/dist/core/http/index.js.map +0 -1
- package/dist/core/http/test-http-client.d.ts +0 -54
- package/dist/core/http/test-http-client.d.ts.map +0 -1
- package/dist/core/http/test-http-client.js +0 -75
- package/dist/core/http/test-http-client.js.map +0 -1
- package/dist/core/http/test-http-request.d.ts +0 -44
- package/dist/core/http/test-http-request.d.ts.map +0 -1
- package/dist/core/http/test-http-request.js +0 -75
- package/dist/core/http/test-http-request.js.map +0 -1
- package/dist/core/http/test-response.d.ts +0 -161
- package/dist/core/http/test-response.d.ts.map +0 -1
- package/dist/core/http/test-response.js +0 -309
- package/dist/core/http/test-response.js.map +0 -1
- package/dist/core/index.d.ts +0 -7
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -7
- package/dist/core/index.js.map +0 -1
- package/dist/core/override/index.d.ts +0 -2
- package/dist/core/override/index.d.ts.map +0 -1
- package/dist/core/override/index.js +0 -2
- package/dist/core/override/index.js.map +0 -1
- package/dist/core/override/provider-override-builder.d.ts +0 -77
- package/dist/core/override/provider-override-builder.d.ts.map +0 -1
- package/dist/core/override/provider-override-builder.js +0 -94
- package/dist/core/override/provider-override-builder.js.map +0 -1
- package/dist/core/test.d.ts +0 -48
- package/dist/core/test.d.ts.map +0 -1
- package/dist/core/test.js +0 -53
- package/dist/core/test.js.map +0 -1
- package/dist/core/testing-module-builder.d.ts +0 -98
- package/dist/core/testing-module-builder.d.ts.map +0 -1
- package/dist/core/testing-module-builder.js +0 -154
- package/dist/core/testing-module-builder.js.map +0 -1
- package/dist/core/testing-module.d.ts +0 -77
- package/dist/core/testing-module.d.ts.map +0 -1
- package/dist/core/testing-module.js +0 -99
- package/dist/core/testing-module.js.map +0 -1
- package/dist/errors/index.d.ts +0 -3
- package/dist/errors/index.d.ts.map +0 -1
- package/dist/errors/index.js +0 -3
- package/dist/errors/index.js.map +0 -1
- package/dist/errors/setup-error.d.ts +0 -9
- package/dist/errors/setup-error.d.ts.map +0 -1
- package/dist/errors/setup-error.js +0 -11
- package/dist/errors/setup-error.js.map +0 -1
- package/dist/errors/test-error.d.ts +0 -9
- package/dist/errors/test-error.d.ts.map +0 -1
- package/dist/errors/test-error.js +0 -15
- package/dist/errors/test-error.js.map +0 -1
- package/dist/index.d.ts +0 -14
- package/dist/mocks/index.d.ts +0 -4
- package/dist/mocks/index.d.ts.map +0 -1
- package/dist/mocks/index.js +0 -4
- package/dist/mocks/index.js.map +0 -1
- package/dist/mocks/nodemailer.d.ts +0 -10
- package/dist/mocks/nodemailer.d.ts.map +0 -1
- package/dist/mocks/nodemailer.js +0 -9
- package/dist/mocks/nodemailer.js.map +0 -1
- package/dist/storage/fake-storage.service.d.ts +0 -114
- package/dist/storage/fake-storage.service.d.ts.map +0 -1
- package/dist/storage/fake-storage.service.js +0 -233
- package/dist/storage/fake-storage.service.js.map +0 -1
- package/dist/storage/index.d.ts +0 -2
- package/dist/storage/index.d.ts.map +0 -1
- package/dist/storage/index.js +0 -2
- package/dist/storage/index.js.map +0 -1
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TestResponse
|
|
3
|
-
*
|
|
4
|
-
* Wrapper around Response with assertion methods.
|
|
5
|
-
*
|
|
6
|
-
* @example
|
|
7
|
-
* ```typescript
|
|
8
|
-
* response
|
|
9
|
-
* .assertOk()
|
|
10
|
-
* .assertStatus(200)
|
|
11
|
-
* .assertJsonPath('data.id', userId)
|
|
12
|
-
* ```
|
|
13
|
-
*/
|
|
14
|
-
export declare class TestResponse {
|
|
15
|
-
private readonly response;
|
|
16
|
-
private jsonData;
|
|
17
|
-
private textData;
|
|
18
|
-
constructor(response: Response);
|
|
19
|
-
/**
|
|
20
|
-
* Get the raw Response object.
|
|
21
|
-
*/
|
|
22
|
-
get raw(): Response;
|
|
23
|
-
/**
|
|
24
|
-
* Get the response status code.
|
|
25
|
-
*/
|
|
26
|
-
get status(): number;
|
|
27
|
-
/**
|
|
28
|
-
* Get response headers.
|
|
29
|
-
*/
|
|
30
|
-
get headers(): Headers;
|
|
31
|
-
/**
|
|
32
|
-
* Get the response body as JSON.
|
|
33
|
-
*/
|
|
34
|
-
json<T = unknown>(): Promise<T>;
|
|
35
|
-
/**
|
|
36
|
-
* Get the response body as text.
|
|
37
|
-
*/
|
|
38
|
-
text(): Promise<string>;
|
|
39
|
-
/**
|
|
40
|
-
* Assert response status is 200 OK.
|
|
41
|
-
*/
|
|
42
|
-
assertOk(): this;
|
|
43
|
-
/**
|
|
44
|
-
* Assert response status is 201 Created.
|
|
45
|
-
*/
|
|
46
|
-
assertCreated(): this;
|
|
47
|
-
/**
|
|
48
|
-
* Assert response status is 204 No Content.
|
|
49
|
-
*/
|
|
50
|
-
assertNoContent(): this;
|
|
51
|
-
/**
|
|
52
|
-
* Assert response status is 400 Bad Request.
|
|
53
|
-
*/
|
|
54
|
-
assertBadRequest(): this;
|
|
55
|
-
/**
|
|
56
|
-
* Assert response status is 401 Unauthorized.
|
|
57
|
-
*/
|
|
58
|
-
assertUnauthorized(): this;
|
|
59
|
-
/**
|
|
60
|
-
* Assert response status is 403 Forbidden.
|
|
61
|
-
*/
|
|
62
|
-
assertForbidden(): this;
|
|
63
|
-
/**
|
|
64
|
-
* Assert response status is 404 Not Found.
|
|
65
|
-
*/
|
|
66
|
-
assertNotFound(): this;
|
|
67
|
-
/**
|
|
68
|
-
* Assert response status is 422 Unprocessable Entity.
|
|
69
|
-
*/
|
|
70
|
-
assertUnprocessable(): this;
|
|
71
|
-
/**
|
|
72
|
-
* Assert response status is 500 Internal Server Error.
|
|
73
|
-
*/
|
|
74
|
-
assertServerError(): this;
|
|
75
|
-
/**
|
|
76
|
-
* Assert response has the given status code.
|
|
77
|
-
*/
|
|
78
|
-
assertStatus(expected: number): this;
|
|
79
|
-
/**
|
|
80
|
-
* Assert response status is in the 2xx success range.
|
|
81
|
-
*/
|
|
82
|
-
assertSuccessful(): this;
|
|
83
|
-
/**
|
|
84
|
-
* Assert JSON response contains the given data.
|
|
85
|
-
*/
|
|
86
|
-
assertJson(expected: Record<string, unknown>): Promise<this>;
|
|
87
|
-
/**
|
|
88
|
-
* Assert JSON response has value at the given path.
|
|
89
|
-
*
|
|
90
|
-
* @param path - Dot-notation path (e.g., 'data.user.id')
|
|
91
|
-
* @param expected - Expected value at path
|
|
92
|
-
*/
|
|
93
|
-
assertJsonPath(path: string, expected: unknown): Promise<this>;
|
|
94
|
-
/**
|
|
95
|
-
* Assert JSON response structure matches the given schema.
|
|
96
|
-
*/
|
|
97
|
-
assertJsonStructure(structure: string[]): Promise<this>;
|
|
98
|
-
/**
|
|
99
|
-
* Assert a JSON path exists (value can be anything, including null).
|
|
100
|
-
*
|
|
101
|
-
* @param path - Dot-notation path (e.g., 'data.user.id')
|
|
102
|
-
*/
|
|
103
|
-
assertJsonPathExists(path: string): Promise<this>;
|
|
104
|
-
/**
|
|
105
|
-
* Assert a JSON path does not exist.
|
|
106
|
-
*
|
|
107
|
-
* @param path - Dot-notation path (e.g., 'data.user.deletedAt')
|
|
108
|
-
*/
|
|
109
|
-
assertJsonPathMissing(path: string): Promise<this>;
|
|
110
|
-
/**
|
|
111
|
-
* Assert JSON value at path matches a custom predicate.
|
|
112
|
-
*
|
|
113
|
-
* @param path - Dot-notation path (e.g., 'data.items')
|
|
114
|
-
* @param matcher - Predicate function to validate the value
|
|
115
|
-
*/
|
|
116
|
-
assertJsonPathMatches(path: string, matcher: (value: unknown) => boolean): Promise<this>;
|
|
117
|
-
/**
|
|
118
|
-
* Assert string value at path contains a substring.
|
|
119
|
-
*
|
|
120
|
-
* @param path - Dot-notation path (e.g., 'data.message')
|
|
121
|
-
* @param substring - Substring to search for
|
|
122
|
-
*/
|
|
123
|
-
assertJsonPathContains(path: string, substring: string): Promise<this>;
|
|
124
|
-
/**
|
|
125
|
-
* Assert array value at path includes a specific item.
|
|
126
|
-
*
|
|
127
|
-
* @param path - Dot-notation path (e.g., 'data.tags')
|
|
128
|
-
* @param item - Item to search for in the array
|
|
129
|
-
*/
|
|
130
|
-
assertJsonPathIncludes(path: string, item: unknown): Promise<this>;
|
|
131
|
-
/**
|
|
132
|
-
* Assert array length at path equals the expected count.
|
|
133
|
-
*
|
|
134
|
-
* @param path - Dot-notation path (e.g., 'data.items')
|
|
135
|
-
* @param count - Expected array length
|
|
136
|
-
*/
|
|
137
|
-
assertJsonPathCount(path: string, count: number): Promise<this>;
|
|
138
|
-
/**
|
|
139
|
-
* Assert multiple JSON paths at once (batch assertion).
|
|
140
|
-
*
|
|
141
|
-
* @param expectations - Object mapping paths to expected values
|
|
142
|
-
*/
|
|
143
|
-
assertJsonPaths(expectations: Record<string, unknown>): Promise<this>;
|
|
144
|
-
/**
|
|
145
|
-
* Assert response has the given header.
|
|
146
|
-
*/
|
|
147
|
-
assertHeader(name: string, expected?: string): this;
|
|
148
|
-
/**
|
|
149
|
-
* Assert response does not have the given header.
|
|
150
|
-
*/
|
|
151
|
-
assertHeaderMissing(name: string): this;
|
|
152
|
-
/**
|
|
153
|
-
* Get value at dot-notation path.
|
|
154
|
-
*/
|
|
155
|
-
private getValueAtPath;
|
|
156
|
-
/**
|
|
157
|
-
* Check if a path exists in the object (even if value is null/undefined).
|
|
158
|
-
*/
|
|
159
|
-
private hasValueAtPath;
|
|
160
|
-
}
|
|
161
|
-
//# sourceMappingURL=test-response.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-response.d.ts","sourceRoot":"","sources":["../../../src/core/http/test-response.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,qBAAa,YAAY;IAIX,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAHrC,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,QAAQ,CAAsB;gBAET,QAAQ,EAAE,QAAQ;IAE/C;;OAEG;IACH,IAAI,GAAG,IAAI,QAAQ,CAElB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;OAEG;IACG,IAAI,CAAC,CAAC,GAAG,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC;IAOrC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAS7B;;OAEG;IACH,QAAQ,IAAI,IAAI;IAIhB;;OAEG;IACH,aAAa,IAAI,IAAI;IAIrB;;OAEG;IACH,eAAe,IAAI,IAAI;IAIvB;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAIxB;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAI1B;;OAEG;IACH,eAAe,IAAI,IAAI;IAIvB;;OAEG;IACH,cAAc,IAAI,IAAI;IAItB;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAI3B;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAIzB;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQpC;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAYxB;;OAEG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAalE;;;;;OAKG;IACG,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpE;;OAEG;IACG,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAa7D;;;;OAIG;IACG,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvD;;;;OAIG;IACG,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYxD;;;;;OAKG;IACG,qBAAqB,CACzB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,GACnC,OAAO,CAAC,IAAI,CAAC;IAYhB;;;;;OAKG;IACG,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB5E;;;;;OAKG;IACG,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBxE;;;;;OAKG;IACG,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBrE;;;;OAIG;IACG,eAAe,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB3E;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAkBnD;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAevC;;OAEG;IACH,OAAO,CAAC,cAAc;IActB;;OAEG;IACH,OAAO,CAAC,cAAc;CAwBvB"}
|
|
@@ -1,309 +0,0 @@
|
|
|
1
|
-
import { expect } from 'vitest';
|
|
2
|
-
/**
|
|
3
|
-
* TestResponse
|
|
4
|
-
*
|
|
5
|
-
* Wrapper around Response with assertion methods.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```typescript
|
|
9
|
-
* response
|
|
10
|
-
* .assertOk()
|
|
11
|
-
* .assertStatus(200)
|
|
12
|
-
* .assertJsonPath('data.id', userId)
|
|
13
|
-
* ```
|
|
14
|
-
*/
|
|
15
|
-
export class TestResponse {
|
|
16
|
-
response;
|
|
17
|
-
jsonData = null;
|
|
18
|
-
textData = null;
|
|
19
|
-
constructor(response) {
|
|
20
|
-
this.response = response;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Get the raw Response object.
|
|
24
|
-
*/
|
|
25
|
-
get raw() {
|
|
26
|
-
return this.response;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Get the response status code.
|
|
30
|
-
*/
|
|
31
|
-
get status() {
|
|
32
|
-
return this.response.status;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Get response headers.
|
|
36
|
-
*/
|
|
37
|
-
get headers() {
|
|
38
|
-
return this.response.headers;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Get the response body as JSON.
|
|
42
|
-
*/
|
|
43
|
-
async json() {
|
|
44
|
-
if (this.jsonData === null) {
|
|
45
|
-
this.jsonData = await this.response.clone().json();
|
|
46
|
-
}
|
|
47
|
-
return this.jsonData;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Get the response body as text.
|
|
51
|
-
*/
|
|
52
|
-
async text() {
|
|
53
|
-
this.textData ??= await this.response.clone().text();
|
|
54
|
-
return this.textData;
|
|
55
|
-
}
|
|
56
|
-
// ============================================================
|
|
57
|
-
// Status Assertions
|
|
58
|
-
// ============================================================
|
|
59
|
-
/**
|
|
60
|
-
* Assert response status is 200 OK.
|
|
61
|
-
*/
|
|
62
|
-
assertOk() {
|
|
63
|
-
return this.assertStatus(200);
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Assert response status is 201 Created.
|
|
67
|
-
*/
|
|
68
|
-
assertCreated() {
|
|
69
|
-
return this.assertStatus(201);
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Assert response status is 204 No Content.
|
|
73
|
-
*/
|
|
74
|
-
assertNoContent() {
|
|
75
|
-
return this.assertStatus(204);
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Assert response status is 400 Bad Request.
|
|
79
|
-
*/
|
|
80
|
-
assertBadRequest() {
|
|
81
|
-
return this.assertStatus(400);
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Assert response status is 401 Unauthorized.
|
|
85
|
-
*/
|
|
86
|
-
assertUnauthorized() {
|
|
87
|
-
return this.assertStatus(401);
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Assert response status is 403 Forbidden.
|
|
91
|
-
*/
|
|
92
|
-
assertForbidden() {
|
|
93
|
-
return this.assertStatus(403);
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Assert response status is 404 Not Found.
|
|
97
|
-
*/
|
|
98
|
-
assertNotFound() {
|
|
99
|
-
return this.assertStatus(404);
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Assert response status is 422 Unprocessable Entity.
|
|
103
|
-
*/
|
|
104
|
-
assertUnprocessable() {
|
|
105
|
-
return this.assertStatus(422);
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Assert response status is 500 Internal Server Error.
|
|
109
|
-
*/
|
|
110
|
-
assertServerError() {
|
|
111
|
-
return this.assertStatus(500);
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Assert response has the given status code.
|
|
115
|
-
*/
|
|
116
|
-
assertStatus(expected) {
|
|
117
|
-
expect(this.response.status, `Expected status ${expected}, got ${this.response.status}`).toBe(expected);
|
|
118
|
-
return this;
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Assert response status is in the 2xx success range.
|
|
122
|
-
*/
|
|
123
|
-
assertSuccessful() {
|
|
124
|
-
expect(this.response.status >= 200 && this.response.status < 300, `Expected successful status (2xx), got ${this.response.status}`).toBe(true);
|
|
125
|
-
return this;
|
|
126
|
-
}
|
|
127
|
-
// ============================================================
|
|
128
|
-
// JSON Assertions
|
|
129
|
-
// ============================================================
|
|
130
|
-
/**
|
|
131
|
-
* Assert JSON response contains the given data.
|
|
132
|
-
*/
|
|
133
|
-
async assertJson(expected) {
|
|
134
|
-
const actual = await this.json();
|
|
135
|
-
for (const [key, value] of Object.entries(expected)) {
|
|
136
|
-
expect(actual[key], `Expected JSON key "${key}" to be ${JSON.stringify(value)}, got ${JSON.stringify(actual[key])}`).toBe(value);
|
|
137
|
-
}
|
|
138
|
-
return this;
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Assert JSON response has value at the given path.
|
|
142
|
-
*
|
|
143
|
-
* @param path - Dot-notation path (e.g., 'data.user.id')
|
|
144
|
-
* @param expected - Expected value at path
|
|
145
|
-
*/
|
|
146
|
-
async assertJsonPath(path, expected) {
|
|
147
|
-
const json = await this.json();
|
|
148
|
-
const actual = this.getValueAtPath(json, path);
|
|
149
|
-
expect(actual, `Expected JSON path "${path}" to be ${JSON.stringify(expected)}, got ${JSON.stringify(actual)}`).toBe(expected);
|
|
150
|
-
return this;
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Assert JSON response structure matches the given schema.
|
|
154
|
-
*/
|
|
155
|
-
async assertJsonStructure(structure) {
|
|
156
|
-
const json = await this.json();
|
|
157
|
-
for (const key of structure) {
|
|
158
|
-
expect(key in json, `Expected JSON to have key "${key}", got keys: ${JSON.stringify(Object.keys(json))}`).toBe(true);
|
|
159
|
-
}
|
|
160
|
-
return this;
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Assert a JSON path exists (value can be anything, including null).
|
|
164
|
-
*
|
|
165
|
-
* @param path - Dot-notation path (e.g., 'data.user.id')
|
|
166
|
-
*/
|
|
167
|
-
async assertJsonPathExists(path) {
|
|
168
|
-
const json = await this.json();
|
|
169
|
-
const exists = this.hasValueAtPath(json, path);
|
|
170
|
-
expect(exists, `Expected JSON path "${path}" to exist`).toBe(true);
|
|
171
|
-
return this;
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Assert a JSON path does not exist.
|
|
175
|
-
*
|
|
176
|
-
* @param path - Dot-notation path (e.g., 'data.user.deletedAt')
|
|
177
|
-
*/
|
|
178
|
-
async assertJsonPathMissing(path) {
|
|
179
|
-
const json = await this.json();
|
|
180
|
-
const exists = this.hasValueAtPath(json, path);
|
|
181
|
-
expect(exists, `Expected JSON path "${path}" to not exist`).toBe(false);
|
|
182
|
-
return this;
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Assert JSON value at path matches a custom predicate.
|
|
186
|
-
*
|
|
187
|
-
* @param path - Dot-notation path (e.g., 'data.items')
|
|
188
|
-
* @param matcher - Predicate function to validate the value
|
|
189
|
-
*/
|
|
190
|
-
async assertJsonPathMatches(path, matcher) {
|
|
191
|
-
const json = await this.json();
|
|
192
|
-
const value = this.getValueAtPath(json, path);
|
|
193
|
-
expect(matcher(value), `Expected JSON path "${path}" to match predicate, got ${JSON.stringify(value)}`).toBe(true);
|
|
194
|
-
return this;
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Assert string value at path contains a substring.
|
|
198
|
-
*
|
|
199
|
-
* @param path - Dot-notation path (e.g., 'data.message')
|
|
200
|
-
* @param substring - Substring to search for
|
|
201
|
-
*/
|
|
202
|
-
async assertJsonPathContains(path, substring) {
|
|
203
|
-
const json = await this.json();
|
|
204
|
-
const value = this.getValueAtPath(json, path);
|
|
205
|
-
expect(typeof value === 'string', `Expected JSON path "${path}" to be a string, got ${typeof value}`).toBe(true);
|
|
206
|
-
expect(value.includes(substring), `Expected JSON path "${path}" to contain "${substring}", got "${String(value)}"`).toBe(true);
|
|
207
|
-
return this;
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Assert array value at path includes a specific item.
|
|
211
|
-
*
|
|
212
|
-
* @param path - Dot-notation path (e.g., 'data.tags')
|
|
213
|
-
* @param item - Item to search for in the array
|
|
214
|
-
*/
|
|
215
|
-
async assertJsonPathIncludes(path, item) {
|
|
216
|
-
const json = await this.json();
|
|
217
|
-
const value = this.getValueAtPath(json, path);
|
|
218
|
-
expect(Array.isArray(value), `Expected JSON path "${path}" to be an array, got ${typeof value}`).toBe(true);
|
|
219
|
-
expect(value.includes(item), `Expected JSON path "${path}" to include ${JSON.stringify(item)}`).toBe(true);
|
|
220
|
-
return this;
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* Assert array length at path equals the expected count.
|
|
224
|
-
*
|
|
225
|
-
* @param path - Dot-notation path (e.g., 'data.items')
|
|
226
|
-
* @param count - Expected array length
|
|
227
|
-
*/
|
|
228
|
-
async assertJsonPathCount(path, count) {
|
|
229
|
-
const json = await this.json();
|
|
230
|
-
const value = this.getValueAtPath(json, path);
|
|
231
|
-
expect(Array.isArray(value), `Expected JSON path "${path}" to be an array, got ${typeof value}`).toBe(true);
|
|
232
|
-
expect(value.length, `Expected JSON path "${path}" to have ${count} items, got ${value.length}`).toBe(count);
|
|
233
|
-
return this;
|
|
234
|
-
}
|
|
235
|
-
/**
|
|
236
|
-
* Assert multiple JSON paths at once (batch assertion).
|
|
237
|
-
*
|
|
238
|
-
* @param expectations - Object mapping paths to expected values
|
|
239
|
-
*/
|
|
240
|
-
async assertJsonPaths(expectations) {
|
|
241
|
-
const json = await this.json();
|
|
242
|
-
for (const [path, expected] of Object.entries(expectations)) {
|
|
243
|
-
const actual = this.getValueAtPath(json, path);
|
|
244
|
-
expect(actual, `Expected JSON path "${path}" to be ${JSON.stringify(expected)}, got ${JSON.stringify(actual)}`).toBe(expected);
|
|
245
|
-
}
|
|
246
|
-
return this;
|
|
247
|
-
}
|
|
248
|
-
// ============================================================
|
|
249
|
-
// Header Assertions
|
|
250
|
-
// ============================================================
|
|
251
|
-
/**
|
|
252
|
-
* Assert response has the given header.
|
|
253
|
-
*/
|
|
254
|
-
assertHeader(name, expected) {
|
|
255
|
-
const actual = this.response.headers.get(name);
|
|
256
|
-
expect(actual !== null, `Expected header "${name}" to be present`).toBe(true);
|
|
257
|
-
if (expected !== undefined) {
|
|
258
|
-
expect(actual, `Expected header "${name}" to be "${expected}", got "${actual}"`).toBe(expected);
|
|
259
|
-
}
|
|
260
|
-
return this;
|
|
261
|
-
}
|
|
262
|
-
/**
|
|
263
|
-
* Assert response does not have the given header.
|
|
264
|
-
*/
|
|
265
|
-
assertHeaderMissing(name) {
|
|
266
|
-
const actual = this.response.headers.get(name);
|
|
267
|
-
expect(actual, `Expected header "${name}" to be absent, but got "${actual}"`).toBeNull();
|
|
268
|
-
return this;
|
|
269
|
-
}
|
|
270
|
-
// ============================================================
|
|
271
|
-
// Private Helpers
|
|
272
|
-
// ============================================================
|
|
273
|
-
/**
|
|
274
|
-
* Get value at dot-notation path.
|
|
275
|
-
*/
|
|
276
|
-
getValueAtPath(obj, path) {
|
|
277
|
-
const parts = path.split('.');
|
|
278
|
-
let current = obj;
|
|
279
|
-
for (const part of parts) {
|
|
280
|
-
if (current === null || current === undefined) {
|
|
281
|
-
return undefined;
|
|
282
|
-
}
|
|
283
|
-
current = current[part];
|
|
284
|
-
}
|
|
285
|
-
return current;
|
|
286
|
-
}
|
|
287
|
-
/**
|
|
288
|
-
* Check if a path exists in the object (even if value is null/undefined).
|
|
289
|
-
*/
|
|
290
|
-
hasValueAtPath(obj, path) {
|
|
291
|
-
const parts = path.split('.');
|
|
292
|
-
let current = obj;
|
|
293
|
-
for (const part of parts) {
|
|
294
|
-
if (current === null || current === undefined) {
|
|
295
|
-
return false;
|
|
296
|
-
}
|
|
297
|
-
if (typeof current !== 'object') {
|
|
298
|
-
return false;
|
|
299
|
-
}
|
|
300
|
-
const record = current;
|
|
301
|
-
if (!(part in record)) {
|
|
302
|
-
return false;
|
|
303
|
-
}
|
|
304
|
-
current = record[part];
|
|
305
|
-
}
|
|
306
|
-
return true;
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
//# sourceMappingURL=test-response.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-response.js","sourceRoot":"","sources":["../../../src/core/http/test-response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,YAAY;IAIM;IAHrB,QAAQ,GAAY,IAAI,CAAA;IACxB,QAAQ,GAAkB,IAAI,CAAA;IAEtC,YAA6B,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;IAAG,CAAC;IAEnD;;OAEG;IACH,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAA;IAC7B,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAA;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAA;QACpD,CAAC;QACD,OAAO,IAAI,CAAC,QAAa,CAAA;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAA;QACpD,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,+DAA+D;IAC/D,oBAAoB;IACpB,+DAA+D;IAE/D;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,QAAgB;QAC3B,MAAM,CACJ,IAAI,CAAC,QAAQ,CAAC,MAAM,EACpB,mBAAmB,QAAQ,SAAS,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAC3D,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAChB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,MAAM,CACJ,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,EACzD,yCAAyC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAChE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACZ,OAAO,IAAI,CAAA;IACb,CAAC;IAED,+DAA+D;IAC/D,kBAAkB;IAClB,+DAA+D;IAE/D;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,QAAiC;QAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAA2B,CAAA;QAEzD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpD,MAAM,CACJ,MAAM,CAAC,GAAG,CAAC,EACX,sBAAsB,GAAG,WAAW,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAChG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACf,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAAC,IAAY,EAAE,QAAiB;QAClD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAE9C,MAAM,CACJ,MAAM,EACN,uBAAuB,IAAI,WAAW,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAChG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAEhB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CAAC,SAAmB;QAC3C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAA2B,CAAA;QAEvD,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,MAAM,CACJ,GAAG,IAAI,IAAI,EACX,8BAA8B,GAAG,gBAAgB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CACrF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACd,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,oBAAoB,CAAC,IAAY;QACrC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAE9C,MAAM,CACJ,MAAM,EACN,uBAAuB,IAAI,YAAY,CACxC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,qBAAqB,CAAC,IAAY;QACtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAE9C,MAAM,CACJ,MAAM,EACN,uBAAuB,IAAI,gBAAgB,CAC5C,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAEb,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,qBAAqB,CACzB,IAAY,EACZ,OAAoC;QAEpC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAE7C,MAAM,CACJ,OAAO,CAAC,KAAK,CAAC,EACd,uBAAuB,IAAI,6BAA6B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAChF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,sBAAsB,CAAC,IAAY,EAAE,SAAiB;QAC1D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAE7C,MAAM,CACJ,OAAO,KAAK,KAAK,QAAQ,EACzB,uBAAuB,IAAI,yBAAyB,OAAO,KAAK,EAAE,CACnE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,MAAM,CACH,KAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,EACrC,uBAAuB,IAAI,iBAAiB,SAAS,WAAW,MAAM,CAAC,KAAK,CAAC,GAAG,CACjF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,sBAAsB,CAAC,IAAY,EAAE,IAAa;QACtD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAE7C,MAAM,CACJ,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EACpB,uBAAuB,IAAI,yBAAyB,OAAO,KAAK,EAAE,CACnE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,MAAM,CACH,KAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,EACnC,uBAAuB,IAAI,gBAAgB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAClE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,mBAAmB,CAAC,IAAY,EAAE,KAAa;QACnD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAE7C,MAAM,CACJ,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EACpB,uBAAuB,IAAI,yBAAyB,OAAO,KAAK,EAAE,CACnE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,MAAM,CACH,KAAmB,CAAC,MAAM,EAC3B,uBAAuB,IAAI,aAAa,KAAK,eAAgB,KAAmB,CAAC,MAAM,EAAE,CAC1F,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAEb,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,eAAe,CAAC,YAAqC;QACzD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAE9B,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAC9C,MAAM,CACJ,MAAM,EACN,uBAAuB,IAAI,WAAW,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAChG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAClB,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED,+DAA+D;IAC/D,oBAAoB;IACpB,+DAA+D;IAE/D;;OAEG;IACH,YAAY,CAAC,IAAY,EAAE,QAAiB;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAE9C,MAAM,CACJ,MAAM,KAAK,IAAI,EACf,oBAAoB,IAAI,iBAAiB,CAC1C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,CACJ,MAAM,EACN,oBAAoB,IAAI,YAAY,QAAQ,WAAW,MAAM,GAAG,CACjE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAClB,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,IAAY;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAE9C,MAAM,CACJ,MAAM,EACN,oBAAoB,IAAI,4BAA4B,MAAM,GAAG,CAC9D,CAAC,QAAQ,EAAE,CAAA;QAEZ,OAAO,IAAI,CAAA;IACb,CAAC;IAED,+DAA+D;IAC/D,kBAAkB;IAClB,+DAA+D;IAE/D;;OAEG;IACK,cAAc,CAAC,GAAY,EAAE,IAAY;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC7B,IAAI,OAAO,GAAY,GAAG,CAAA;QAE1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC9C,OAAO,SAAS,CAAA;YAClB,CAAC;YACD,OAAO,GAAI,OAAmC,CAAC,IAAI,CAAC,CAAA;QACtD,CAAC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,GAAY,EAAE,IAAY;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC7B,IAAI,OAAO,GAAY,GAAG,CAAA;QAE1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC9C,OAAO,KAAK,CAAA;YACd,CAAC;YAED,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAChC,OAAO,KAAK,CAAA;YACd,CAAC;YAED,MAAM,MAAM,GAAG,OAAkC,CAAA;YAEjD,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC;gBACtB,OAAO,KAAK,CAAA;YACd,CAAC;YAED,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;QACxB,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
|
package/dist/core/index.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export { getTestEnv } from './env';
|
|
2
|
-
export { TestHttpClient, TestHttpRequest, TestResponse } from './http';
|
|
3
|
-
export { ProviderOverrideBuilder, type ProviderOverrideConfig } from './override';
|
|
4
|
-
export { Test } from './test';
|
|
5
|
-
export { TestingModule } from './testing-module';
|
|
6
|
-
export { TestingModuleBuilder, type TestingModuleConfig } from './testing-module-builder';
|
|
7
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/core/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAClC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACtE,OAAO,EAAE,uBAAuB,EAAE,KAAK,sBAAsB,EAAE,MAAM,YAAY,CAAA;AACjF,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,0BAA0B,CAAA"}
|
package/dist/core/index.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export { getTestEnv } from './env';
|
|
2
|
-
export { TestHttpClient, TestHttpRequest, TestResponse } from './http';
|
|
3
|
-
export { ProviderOverrideBuilder } from './override';
|
|
4
|
-
export { Test } from './test';
|
|
5
|
-
export { TestingModule } from './testing-module';
|
|
6
|
-
export { TestingModuleBuilder } from './testing-module-builder';
|
|
7
|
-
//# sourceMappingURL=index.js.map
|
package/dist/core/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAClC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACtE,OAAO,EAAE,uBAAuB,EAA+B,MAAM,YAAY,CAAA;AACjF,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAA4B,MAAM,0BAA0B,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/override/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,KAAK,sBAAsB,EAAE,MAAM,6BAA6B,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/override/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAA+B,MAAM,6BAA6B,CAAA"}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import type { Container, InjectionToken } from 'stratal';
|
|
2
|
-
import type { TestingModuleBuilder } from '../testing-module-builder';
|
|
3
|
-
/**
|
|
4
|
-
* Provider override configuration
|
|
5
|
-
*/
|
|
6
|
-
export interface ProviderOverrideConfig<T = unknown> {
|
|
7
|
-
token: InjectionToken<T>;
|
|
8
|
-
type: 'value' | 'class' | 'factory' | 'existing';
|
|
9
|
-
implementation: T | (new (...args: unknown[]) => T) | ((container: Container) => T) | InjectionToken<T>;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Fluent builder for provider overrides
|
|
13
|
-
*
|
|
14
|
-
* Provides a NestJS-style API for overriding providers in tests.
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* ```typescript
|
|
18
|
-
* const module = await Test.createTestingModule({
|
|
19
|
-
* imports: [RegistrationModule],
|
|
20
|
-
* })
|
|
21
|
-
* .overrideProvider(EMAIL_TOKENS.EmailService)
|
|
22
|
-
* .useValue(mockEmailService)
|
|
23
|
-
* .compile()
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
export declare class ProviderOverrideBuilder<T> {
|
|
27
|
-
private readonly parent;
|
|
28
|
-
private readonly token;
|
|
29
|
-
constructor(parent: TestingModuleBuilder, token: InjectionToken<T>);
|
|
30
|
-
/**
|
|
31
|
-
* Use a static value as the provider
|
|
32
|
-
*
|
|
33
|
-
* The value will be registered directly in the container.
|
|
34
|
-
*
|
|
35
|
-
* @param value - The value to use as the provider
|
|
36
|
-
* @returns The parent TestingModuleBuilder for chaining
|
|
37
|
-
*/
|
|
38
|
-
useValue(value: T): TestingModuleBuilder;
|
|
39
|
-
/**
|
|
40
|
-
* Use a class as the provider
|
|
41
|
-
*
|
|
42
|
-
* The class will be registered as a singleton.
|
|
43
|
-
*
|
|
44
|
-
* @param cls - The class constructor to use as the provider
|
|
45
|
-
* @returns The parent TestingModuleBuilder for chaining
|
|
46
|
-
*/
|
|
47
|
-
useClass(cls: new (...args: unknown[]) => T): TestingModuleBuilder;
|
|
48
|
-
/**
|
|
49
|
-
* Use a factory function as the provider
|
|
50
|
-
*
|
|
51
|
-
* The factory receives the container and should return the provider instance.
|
|
52
|
-
*
|
|
53
|
-
* @param factory - Factory function that creates the provider
|
|
54
|
-
* @returns The parent TestingModuleBuilder for chaining
|
|
55
|
-
*/
|
|
56
|
-
useFactory(factory: (container: Container) => T): TestingModuleBuilder;
|
|
57
|
-
/**
|
|
58
|
-
* Use an existing token as the provider (alias)
|
|
59
|
-
*
|
|
60
|
-
* The override token will resolve to the same instance as the target token.
|
|
61
|
-
*
|
|
62
|
-
* @param existingToken - The token to alias
|
|
63
|
-
* @returns The parent TestingModuleBuilder for chaining
|
|
64
|
-
*
|
|
65
|
-
* @example
|
|
66
|
-
* ```typescript
|
|
67
|
-
* const module = await Test.createTestingModule({
|
|
68
|
-
* imports: [MyModule],
|
|
69
|
-
* })
|
|
70
|
-
* .overrideProvider(ABSTRACT_TOKEN)
|
|
71
|
-
* .useExisting(ConcreteService)
|
|
72
|
-
* .compile()
|
|
73
|
-
* ```
|
|
74
|
-
*/
|
|
75
|
-
useExisting(existingToken: InjectionToken<T>): TestingModuleBuilder;
|
|
76
|
-
}
|
|
77
|
-
//# sourceMappingURL=provider-override-builder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"provider-override-builder.d.ts","sourceRoot":"","sources":["../../../src/core/override/provider-override-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAErE;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,CAAC,GAAG,OAAO;IACjD,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,CAAA;IACxB,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,CAAA;IAChD,cAAc,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,SAAS,KAAK,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;CACxG;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,uBAAuB,CAAC,CAAC;IAElC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,MAAM,EAAE,oBAAoB,EAC5B,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;IAG3C;;;;;;;OAOG;IACH,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,oBAAoB;IAQxC;;;;;;;OAOG;IACH,QAAQ,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,oBAAoB;IAQlE;;;;;;;OAOG;IACH,UAAU,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,CAAC,GAAG,oBAAoB;IAQtE;;;;;;;;;;;;;;;;;OAiBG;IACH,WAAW,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,oBAAoB;CAOpE"}
|