@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.
Files changed (87) hide show
  1. package/README.md +332 -0
  2. package/package.json +10 -10
  3. package/dist/core/env/index.d.ts +0 -2
  4. package/dist/core/env/index.d.ts.map +0 -1
  5. package/dist/core/env/index.js +0 -2
  6. package/dist/core/env/index.js.map +0 -1
  7. package/dist/core/env/test-env.d.ts +0 -9
  8. package/dist/core/env/test-env.d.ts.map +0 -1
  9. package/dist/core/env/test-env.js +0 -14
  10. package/dist/core/env/test-env.js.map +0 -1
  11. package/dist/core/http/fetch-mock.d.ts +0 -236
  12. package/dist/core/http/fetch-mock.d.ts.map +0 -1
  13. package/dist/core/http/fetch-mock.js +0 -290
  14. package/dist/core/http/fetch-mock.js.map +0 -1
  15. package/dist/core/http/fetch-mock.types.d.ts +0 -48
  16. package/dist/core/http/fetch-mock.types.d.ts.map +0 -1
  17. package/dist/core/http/fetch-mock.types.js +0 -2
  18. package/dist/core/http/fetch-mock.types.js.map +0 -1
  19. package/dist/core/http/index.d.ts +0 -6
  20. package/dist/core/http/index.d.ts.map +0 -1
  21. package/dist/core/http/index.js +0 -5
  22. package/dist/core/http/index.js.map +0 -1
  23. package/dist/core/http/test-http-client.d.ts +0 -54
  24. package/dist/core/http/test-http-client.d.ts.map +0 -1
  25. package/dist/core/http/test-http-client.js +0 -75
  26. package/dist/core/http/test-http-client.js.map +0 -1
  27. package/dist/core/http/test-http-request.d.ts +0 -44
  28. package/dist/core/http/test-http-request.d.ts.map +0 -1
  29. package/dist/core/http/test-http-request.js +0 -75
  30. package/dist/core/http/test-http-request.js.map +0 -1
  31. package/dist/core/http/test-response.d.ts +0 -161
  32. package/dist/core/http/test-response.d.ts.map +0 -1
  33. package/dist/core/http/test-response.js +0 -309
  34. package/dist/core/http/test-response.js.map +0 -1
  35. package/dist/core/index.d.ts +0 -7
  36. package/dist/core/index.d.ts.map +0 -1
  37. package/dist/core/index.js +0 -7
  38. package/dist/core/index.js.map +0 -1
  39. package/dist/core/override/index.d.ts +0 -2
  40. package/dist/core/override/index.d.ts.map +0 -1
  41. package/dist/core/override/index.js +0 -2
  42. package/dist/core/override/index.js.map +0 -1
  43. package/dist/core/override/provider-override-builder.d.ts +0 -77
  44. package/dist/core/override/provider-override-builder.d.ts.map +0 -1
  45. package/dist/core/override/provider-override-builder.js +0 -94
  46. package/dist/core/override/provider-override-builder.js.map +0 -1
  47. package/dist/core/test.d.ts +0 -48
  48. package/dist/core/test.d.ts.map +0 -1
  49. package/dist/core/test.js +0 -53
  50. package/dist/core/test.js.map +0 -1
  51. package/dist/core/testing-module-builder.d.ts +0 -98
  52. package/dist/core/testing-module-builder.d.ts.map +0 -1
  53. package/dist/core/testing-module-builder.js +0 -154
  54. package/dist/core/testing-module-builder.js.map +0 -1
  55. package/dist/core/testing-module.d.ts +0 -77
  56. package/dist/core/testing-module.d.ts.map +0 -1
  57. package/dist/core/testing-module.js +0 -99
  58. package/dist/core/testing-module.js.map +0 -1
  59. package/dist/errors/index.d.ts +0 -3
  60. package/dist/errors/index.d.ts.map +0 -1
  61. package/dist/errors/index.js +0 -3
  62. package/dist/errors/index.js.map +0 -1
  63. package/dist/errors/setup-error.d.ts +0 -9
  64. package/dist/errors/setup-error.d.ts.map +0 -1
  65. package/dist/errors/setup-error.js +0 -11
  66. package/dist/errors/setup-error.js.map +0 -1
  67. package/dist/errors/test-error.d.ts +0 -9
  68. package/dist/errors/test-error.d.ts.map +0 -1
  69. package/dist/errors/test-error.js +0 -15
  70. package/dist/errors/test-error.js.map +0 -1
  71. package/dist/index.d.ts +0 -14
  72. package/dist/mocks/index.d.ts +0 -4
  73. package/dist/mocks/index.d.ts.map +0 -1
  74. package/dist/mocks/index.js +0 -4
  75. package/dist/mocks/index.js.map +0 -1
  76. package/dist/mocks/nodemailer.d.ts +0 -10
  77. package/dist/mocks/nodemailer.d.ts.map +0 -1
  78. package/dist/mocks/nodemailer.js +0 -9
  79. package/dist/mocks/nodemailer.js.map +0 -1
  80. package/dist/storage/fake-storage.service.d.ts +0 -114
  81. package/dist/storage/fake-storage.service.d.ts.map +0 -1
  82. package/dist/storage/fake-storage.service.js +0 -233
  83. package/dist/storage/fake-storage.service.js.map +0 -1
  84. package/dist/storage/index.d.ts +0 -2
  85. package/dist/storage/index.d.ts.map +0 -1
  86. package/dist/storage/index.js +0 -2
  87. 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":"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"}
@@ -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
@@ -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"}
@@ -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
@@ -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,2 +0,0 @@
1
- export { ProviderOverrideBuilder, type ProviderOverrideConfig } from './provider-override-builder';
2
- //# sourceMappingURL=index.d.ts.map
@@ -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,2 +0,0 @@
1
- export { ProviderOverrideBuilder } from './provider-override-builder';
2
- //# sourceMappingURL=index.js.map
@@ -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"}