@zze/mock-server 0.2.4
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 +643 -0
- package/dist/__tests__/mock-server.test.d.ts +5 -0
- package/dist/__tests__/mock-server.test.d.ts.map +1 -0
- package/dist/__tests__/mock-server.test.js +599 -0
- package/dist/__tests__/mock-server.test.js.map +1 -0
- package/dist/admin/__tests__/admin-router.test.d.ts +2 -0
- package/dist/admin/__tests__/admin-router.test.d.ts.map +1 -0
- package/dist/admin/__tests__/admin-router.test.js +621 -0
- package/dist/admin/__tests__/admin-router.test.js.map +1 -0
- package/dist/admin/admin-router.d.ts +27 -0
- package/dist/admin/admin-router.d.ts.map +1 -0
- package/dist/admin/admin-router.js +616 -0
- package/dist/admin/admin-router.js.map +1 -0
- package/dist/admin/index.d.ts +4 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +10 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/types.d.ts +185 -0
- package/dist/admin/types.d.ts.map +1 -0
- package/dist/admin/types.js +33 -0
- package/dist/admin/types.js.map +1 -0
- package/dist/config/__tests__/config-discovery.test.d.ts +2 -0
- package/dist/config/__tests__/config-discovery.test.d.ts.map +1 -0
- package/dist/config/__tests__/config-discovery.test.js +52 -0
- package/dist/config/__tests__/config-discovery.test.js.map +1 -0
- package/dist/config/__tests__/config-loader.test.d.ts +2 -0
- package/dist/config/__tests__/config-loader.test.d.ts.map +1 -0
- package/dist/config/__tests__/config-loader.test.js +124 -0
- package/dist/config/__tests__/config-loader.test.js.map +1 -0
- package/dist/config/__tests__/file-loader.test.d.ts +2 -0
- package/dist/config/__tests__/file-loader.test.d.ts.map +1 -0
- package/dist/config/__tests__/file-loader.test.js +63 -0
- package/dist/config/__tests__/file-loader.test.js.map +1 -0
- package/dist/config/__tests__/fixtures/mock-config/endpoints/products.d.ts +25 -0
- package/dist/config/__tests__/fixtures/mock-config/endpoints/products.d.ts.map +1 -0
- package/dist/config/__tests__/fixtures/mock-config/endpoints/products.js +25 -0
- package/dist/config/__tests__/fixtures/mock-config/endpoints/products.js.map +1 -0
- package/dist/config/__tests__/fixtures/mock-config/flows/error-flow.d.ts +11 -0
- package/dist/config/__tests__/fixtures/mock-config/flows/error-flow.d.ts.map +1 -0
- package/dist/config/__tests__/fixtures/mock-config/flows/error-flow.js +11 -0
- package/dist/config/__tests__/fixtures/mock-config/flows/error-flow.js.map +1 -0
- package/dist/config/config-discovery.d.ts +23 -0
- package/dist/config/config-discovery.d.ts.map +1 -0
- package/dist/config/config-discovery.js +60 -0
- package/dist/config/config-discovery.js.map +1 -0
- package/dist/config/config-loader.d.ts +56 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +162 -0
- package/dist/config/config-loader.js.map +1 -0
- package/dist/config/config-writer.d.ts +96 -0
- package/dist/config/config-writer.d.ts.map +1 -0
- package/dist/config/config-writer.js +248 -0
- package/dist/config/config-writer.js.map +1 -0
- package/dist/config/file-loader.d.ts +16 -0
- package/dist/config/file-loader.d.ts.map +1 -0
- package/dist/config/file-loader.js +90 -0
- package/dist/config/file-loader.js.map +1 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +23 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/types.d.ts +47 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +7 -0
- package/dist/config/types.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/mock-server.d.ts +243 -0
- package/dist/mock-server.d.ts.map +1 -0
- package/dist/mock-server.js +387 -0
- package/dist/mock-server.js.map +1 -0
- package/dist/resolver/__tests__/response-resolver.test.d.ts +2 -0
- package/dist/resolver/__tests__/response-resolver.test.d.ts.map +1 -0
- package/dist/resolver/__tests__/response-resolver.test.js +358 -0
- package/dist/resolver/__tests__/response-resolver.test.js.map +1 -0
- package/dist/resolver/index.d.ts +4 -0
- package/dist/resolver/index.d.ts.map +1 -0
- package/dist/resolver/index.js +9 -0
- package/dist/resolver/index.js.map +1 -0
- package/dist/resolver/response-resolver.d.ts +73 -0
- package/dist/resolver/response-resolver.d.ts.map +1 -0
- package/dist/resolver/response-resolver.js +167 -0
- package/dist/resolver/response-resolver.js.map +1 -0
- package/dist/resolver/types.d.ts +47 -0
- package/dist/resolver/types.d.ts.map +1 -0
- package/dist/resolver/types.js +9 -0
- package/dist/resolver/types.js.map +1 -0
- package/dist/schemas/__tests__/config.validator.test.d.ts +2 -0
- package/dist/schemas/__tests__/config.validator.test.d.ts.map +1 -0
- package/dist/schemas/__tests__/config.validator.test.js +66 -0
- package/dist/schemas/__tests__/config.validator.test.js.map +1 -0
- package/dist/schemas/__tests__/endpoint.schema.test.d.ts +2 -0
- package/dist/schemas/__tests__/endpoint.schema.test.d.ts.map +1 -0
- package/dist/schemas/__tests__/endpoint.schema.test.js +103 -0
- package/dist/schemas/__tests__/endpoint.schema.test.js.map +1 -0
- package/dist/schemas/__tests__/flow.schema.test.d.ts +2 -0
- package/dist/schemas/__tests__/flow.schema.test.d.ts.map +1 -0
- package/dist/schemas/__tests__/flow.schema.test.js +92 -0
- package/dist/schemas/__tests__/flow.schema.test.js.map +1 -0
- package/dist/schemas/config.validator.d.ts +39 -0
- package/dist/schemas/config.validator.d.ts.map +1 -0
- package/dist/schemas/config.validator.js +117 -0
- package/dist/schemas/config.validator.js.map +1 -0
- package/dist/schemas/endpoint.schema.d.ts +108 -0
- package/dist/schemas/endpoint.schema.d.ts.map +1 -0
- package/dist/schemas/endpoint.schema.js +87 -0
- package/dist/schemas/endpoint.schema.js.map +1 -0
- package/dist/schemas/flow.schema.d.ts +46 -0
- package/dist/schemas/flow.schema.d.ts.map +1 -0
- package/dist/schemas/flow.schema.js +73 -0
- package/dist/schemas/flow.schema.js.map +1 -0
- package/dist/schemas/http.schema.d.ts +15 -0
- package/dist/schemas/http.schema.d.ts.map +1 -0
- package/dist/schemas/http.schema.js +32 -0
- package/dist/schemas/http.schema.js.map +1 -0
- package/dist/schemas/index.d.ts +6 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +33 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/scenario.schema.d.ts +54 -0
- package/dist/schemas/scenario.schema.d.ts.map +1 -0
- package/dist/schemas/scenario.schema.js +75 -0
- package/dist/schemas/scenario.schema.js.map +1 -0
- package/dist/server/__tests__/mock-server-app.test.d.ts +2 -0
- package/dist/server/__tests__/mock-server-app.test.d.ts.map +1 -0
- package/dist/server/__tests__/mock-server-app.test.js +296 -0
- package/dist/server/__tests__/mock-server-app.test.js.map +1 -0
- package/dist/server/index.d.ts +4 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +10 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/mock-server-app.d.ts +119 -0
- package/dist/server/mock-server-app.d.ts.map +1 -0
- package/dist/server/mock-server-app.js +304 -0
- package/dist/server/mock-server-app.js.map +1 -0
- package/dist/server/types.d.ts +38 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +11 -0
- package/dist/server/types.js.map +1 -0
- package/dist/state/__tests__/state-manager.test.d.ts +2 -0
- package/dist/state/__tests__/state-manager.test.d.ts.map +1 -0
- package/dist/state/__tests__/state-manager.test.js +275 -0
- package/dist/state/__tests__/state-manager.test.js.map +1 -0
- package/dist/state/index.d.ts +3 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +7 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/state-manager.d.ts +92 -0
- package/dist/state/state-manager.d.ts.map +1 -0
- package/dist/state/state-manager.js +198 -0
- package/dist/state/state-manager.js.map +1 -0
- package/dist/state/types.d.ts +30 -0
- package/dist/state/types.d.ts.map +1 -0
- package/dist/state/types.js +2 -0
- package/dist/state/types.js.map +1 -0
- package/dist/ui/assets/index-SADMOgPE.js +10 -0
- package/dist/ui/assets/index-rj7m-XdG.css +1 -0
- package/dist/ui/index.html +29 -0
- package/dist/watcher/__tests__/config-watcher.test.d.ts +2 -0
- package/dist/watcher/__tests__/config-watcher.test.d.ts.map +1 -0
- package/dist/watcher/__tests__/config-watcher.test.js +372 -0
- package/dist/watcher/__tests__/config-watcher.test.js.map +1 -0
- package/dist/watcher/config-watcher.d.ts +100 -0
- package/dist/watcher/config-watcher.d.ts.map +1 -0
- package/dist/watcher/config-watcher.js +358 -0
- package/dist/watcher/config-watcher.js.map +1 -0
- package/dist/watcher/index.d.ts +7 -0
- package/dist/watcher/index.d.ts.map +1 -0
- package/dist/watcher/index.js +8 -0
- package/dist/watcher/index.js.map +1 -0
- package/dist/watcher/types.d.ts +64 -0
- package/dist/watcher/types.d.ts.map +1 -0
- package/dist/watcher/types.js +15 -0
- package/dist/watcher/types.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const vitest_1 = require("vitest");
|
|
7
|
+
const supertest_1 = __importDefault(require("supertest"));
|
|
8
|
+
const mock_server_app_js_1 = require("../mock-server-app.js");
|
|
9
|
+
// Test fixtures
|
|
10
|
+
const mockEndpoints = [
|
|
11
|
+
{
|
|
12
|
+
id: 'get-users',
|
|
13
|
+
path: '/users',
|
|
14
|
+
method: 'GET',
|
|
15
|
+
scenarios: [
|
|
16
|
+
{
|
|
17
|
+
id: 'success',
|
|
18
|
+
name: 'Success',
|
|
19
|
+
status: 200,
|
|
20
|
+
body: [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }],
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
id: 'empty',
|
|
24
|
+
name: 'Empty',
|
|
25
|
+
status: 200,
|
|
26
|
+
body: [],
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
id: 'error',
|
|
30
|
+
name: 'Error',
|
|
31
|
+
status: 500,
|
|
32
|
+
body: { error: 'Internal Server Error' },
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
defaultScenarioId: 'success',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
id: 'get-user',
|
|
39
|
+
path: '/users/:id',
|
|
40
|
+
method: 'GET',
|
|
41
|
+
scenarios: [
|
|
42
|
+
{
|
|
43
|
+
id: 'found',
|
|
44
|
+
name: 'Found',
|
|
45
|
+
status: 200,
|
|
46
|
+
body: (ctx) => ({ id: ctx.params.id, name: 'User ' + ctx.params.id }),
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
id: 'not-found',
|
|
50
|
+
name: 'Not Found',
|
|
51
|
+
status: 404,
|
|
52
|
+
body: { error: 'User not found' },
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
defaultScenarioId: 'found',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
id: 'create-user',
|
|
59
|
+
path: '/users',
|
|
60
|
+
method: 'POST',
|
|
61
|
+
scenarios: [
|
|
62
|
+
{
|
|
63
|
+
id: 'created',
|
|
64
|
+
name: 'Created',
|
|
65
|
+
status: 201,
|
|
66
|
+
body: (ctx) => ({ id: 123, ...ctx.body }),
|
|
67
|
+
headers: { 'X-Created': 'true' },
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
id: 'validation-error',
|
|
71
|
+
name: 'Validation Error',
|
|
72
|
+
status: 400,
|
|
73
|
+
body: { error: 'Invalid data' },
|
|
74
|
+
},
|
|
75
|
+
],
|
|
76
|
+
defaultScenarioId: 'created',
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
id: 'delete-user',
|
|
80
|
+
path: '/users/:id',
|
|
81
|
+
method: 'DELETE',
|
|
82
|
+
scenarios: [
|
|
83
|
+
{
|
|
84
|
+
id: 'deleted',
|
|
85
|
+
name: 'Deleted',
|
|
86
|
+
status: 204,
|
|
87
|
+
body: null,
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
defaultScenarioId: 'deleted',
|
|
91
|
+
},
|
|
92
|
+
];
|
|
93
|
+
const mockFlows = [
|
|
94
|
+
{
|
|
95
|
+
id: 'error-flow',
|
|
96
|
+
name: 'Error Flow',
|
|
97
|
+
endpointScenarios: {
|
|
98
|
+
'get-users': 'error',
|
|
99
|
+
'get-user': 'not-found',
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
];
|
|
103
|
+
(0, vitest_1.describe)('MockServerApp', () => {
|
|
104
|
+
let serverApp;
|
|
105
|
+
(0, vitest_1.beforeEach)(() => {
|
|
106
|
+
serverApp = new mock_server_app_js_1.MockServerApp({ port: 0 }); // Port 0 = random available port
|
|
107
|
+
serverApp.registerConfig(mockEndpoints, mockFlows);
|
|
108
|
+
});
|
|
109
|
+
(0, vitest_1.afterEach)(async () => {
|
|
110
|
+
if (serverApp.isRunning()) {
|
|
111
|
+
await serverApp.stop();
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
(0, vitest_1.describe)('constructor', () => {
|
|
115
|
+
(0, vitest_1.it)('should create with default options', () => {
|
|
116
|
+
const app = new mock_server_app_js_1.MockServerApp();
|
|
117
|
+
const options = app.getOptions();
|
|
118
|
+
(0, vitest_1.expect)(options.port).toBe(3001);
|
|
119
|
+
(0, vitest_1.expect)(options.apiPrefix).toBe('/api');
|
|
120
|
+
(0, vitest_1.expect)(options.hotReload).toBe(true);
|
|
121
|
+
});
|
|
122
|
+
(0, vitest_1.it)('should accept custom options', () => {
|
|
123
|
+
const app = new mock_server_app_js_1.MockServerApp({
|
|
124
|
+
port: 4000,
|
|
125
|
+
apiPrefix: '/mock',
|
|
126
|
+
hotReload: false,
|
|
127
|
+
});
|
|
128
|
+
const options = app.getOptions();
|
|
129
|
+
(0, vitest_1.expect)(options.port).toBe(4000);
|
|
130
|
+
(0, vitest_1.expect)(options.apiPrefix).toBe('/mock');
|
|
131
|
+
(0, vitest_1.expect)(options.hotReload).toBe(false);
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
(0, vitest_1.describe)('registerConfig', () => {
|
|
135
|
+
(0, vitest_1.it)('should register endpoints', () => {
|
|
136
|
+
const routes = serverApp.getRegisteredRoutes();
|
|
137
|
+
(0, vitest_1.expect)(routes.length).toBe(4);
|
|
138
|
+
(0, vitest_1.expect)(routes.find((r) => r.endpointId === 'get-users')).toBeDefined();
|
|
139
|
+
});
|
|
140
|
+
(0, vitest_1.it)('should update state manager', () => {
|
|
141
|
+
const state = serverApp.getStateManager().getState();
|
|
142
|
+
(0, vitest_1.expect)(state.activeFlowId).toBeNull();
|
|
143
|
+
});
|
|
144
|
+
(0, vitest_1.it)('should track registered routes with full paths', () => {
|
|
145
|
+
const routes = serverApp.getRegisteredRoutes();
|
|
146
|
+
const getUsersRoute = routes.find((r) => r.endpointId === 'get-users');
|
|
147
|
+
(0, vitest_1.expect)(getUsersRoute?.fullPath).toBe('/api/users');
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
(0, vitest_1.describe)('getState', () => {
|
|
151
|
+
(0, vitest_1.it)('should return server state', () => {
|
|
152
|
+
const state = serverApp.getState();
|
|
153
|
+
(0, vitest_1.expect)(state.running).toBe(false);
|
|
154
|
+
(0, vitest_1.expect)(state.port).toBeNull();
|
|
155
|
+
(0, vitest_1.expect)(state.endpointCount).toBe(4);
|
|
156
|
+
(0, vitest_1.expect)(state.flowCount).toBe(1);
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
(0, vitest_1.describe)('HTTP requests', () => {
|
|
160
|
+
(0, vitest_1.it)('should handle GET request with default scenario', async () => {
|
|
161
|
+
const res = await (0, supertest_1.default)(serverApp.getApp())
|
|
162
|
+
.get('/api/users')
|
|
163
|
+
.expect(200);
|
|
164
|
+
(0, vitest_1.expect)(res.body).toEqual([
|
|
165
|
+
{ id: 1, name: 'Alice' },
|
|
166
|
+
{ id: 2, name: 'Bob' },
|
|
167
|
+
]);
|
|
168
|
+
});
|
|
169
|
+
(0, vitest_1.it)('should handle GET request with URL parameters', async () => {
|
|
170
|
+
const res = await (0, supertest_1.default)(serverApp.getApp())
|
|
171
|
+
.get('/api/users/42')
|
|
172
|
+
.expect(200);
|
|
173
|
+
(0, vitest_1.expect)(res.body).toEqual({ id: '42', name: 'User 42' });
|
|
174
|
+
});
|
|
175
|
+
(0, vitest_1.it)('should handle POST request with body', async () => {
|
|
176
|
+
const res = await (0, supertest_1.default)(serverApp.getApp())
|
|
177
|
+
.post('/api/users')
|
|
178
|
+
.send({ name: 'Charlie', email: 'charlie@example.com' })
|
|
179
|
+
.expect(201);
|
|
180
|
+
(0, vitest_1.expect)(res.body).toEqual({
|
|
181
|
+
id: 123,
|
|
182
|
+
name: 'Charlie',
|
|
183
|
+
email: 'charlie@example.com',
|
|
184
|
+
});
|
|
185
|
+
(0, vitest_1.expect)(res.headers['x-created']).toBe('true');
|
|
186
|
+
});
|
|
187
|
+
(0, vitest_1.it)('should handle DELETE request with null body', async () => {
|
|
188
|
+
await (0, supertest_1.default)(serverApp.getApp())
|
|
189
|
+
.delete('/api/users/1')
|
|
190
|
+
.expect(204);
|
|
191
|
+
});
|
|
192
|
+
(0, vitest_1.it)('should return 404 for unknown routes', async () => {
|
|
193
|
+
await (0, supertest_1.default)(serverApp.getApp())
|
|
194
|
+
.get('/api/unknown')
|
|
195
|
+
.expect(404);
|
|
196
|
+
});
|
|
197
|
+
(0, vitest_1.it)('should handle activated scenario', async () => {
|
|
198
|
+
serverApp.getStateManager().activateScenario('get-users', 'empty');
|
|
199
|
+
const res = await (0, supertest_1.default)(serverApp.getApp())
|
|
200
|
+
.get('/api/users')
|
|
201
|
+
.expect(200);
|
|
202
|
+
(0, vitest_1.expect)(res.body).toEqual([]);
|
|
203
|
+
});
|
|
204
|
+
(0, vitest_1.it)('should handle activated flow', async () => {
|
|
205
|
+
serverApp.getStateManager().activateFlow('error-flow');
|
|
206
|
+
await (0, supertest_1.default)(serverApp.getApp())
|
|
207
|
+
.get('/api/users')
|
|
208
|
+
.expect(500);
|
|
209
|
+
await (0, supertest_1.default)(serverApp.getApp())
|
|
210
|
+
.get('/api/users/1')
|
|
211
|
+
.expect(404);
|
|
212
|
+
});
|
|
213
|
+
(0, vitest_1.it)('should handle reset state', async () => {
|
|
214
|
+
serverApp.getStateManager().activateScenario('get-users', 'error');
|
|
215
|
+
serverApp.getStateManager().reset();
|
|
216
|
+
const res = await (0, supertest_1.default)(serverApp.getApp())
|
|
217
|
+
.get('/api/users')
|
|
218
|
+
.expect(200);
|
|
219
|
+
(0, vitest_1.expect)(res.body.length).toBe(2); // Back to default success scenario
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
(0, vitest_1.describe)('custom API prefix', () => {
|
|
223
|
+
(0, vitest_1.it)('should mount routes at custom prefix', async () => {
|
|
224
|
+
const customApp = new mock_server_app_js_1.MockServerApp({ apiPrefix: '/mock/v1' });
|
|
225
|
+
customApp.registerConfig(mockEndpoints, []);
|
|
226
|
+
const res = await (0, supertest_1.default)(customApp.getApp())
|
|
227
|
+
.get('/mock/v1/users')
|
|
228
|
+
.expect(200);
|
|
229
|
+
(0, vitest_1.expect)(res.body.length).toBe(2);
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
(0, vitest_1.describe)('start and stop', () => {
|
|
233
|
+
(0, vitest_1.it)('should start the server', async () => {
|
|
234
|
+
const port = await serverApp.start();
|
|
235
|
+
(0, vitest_1.expect)(serverApp.isRunning()).toBe(true);
|
|
236
|
+
(0, vitest_1.expect)(port).toBeGreaterThan(0);
|
|
237
|
+
});
|
|
238
|
+
(0, vitest_1.it)('should stop the server', async () => {
|
|
239
|
+
await serverApp.start();
|
|
240
|
+
await serverApp.stop();
|
|
241
|
+
(0, vitest_1.expect)(serverApp.isRunning()).toBe(false);
|
|
242
|
+
});
|
|
243
|
+
(0, vitest_1.it)('should handle stop when not running', async () => {
|
|
244
|
+
await (0, vitest_1.expect)(serverApp.stop()).resolves.not.toThrow();
|
|
245
|
+
});
|
|
246
|
+
(0, vitest_1.it)('should update state when running', async () => {
|
|
247
|
+
await serverApp.start();
|
|
248
|
+
const state = serverApp.getState();
|
|
249
|
+
(0, vitest_1.expect)(state.running).toBe(true);
|
|
250
|
+
(0, vitest_1.expect)(state.port).toBeGreaterThan(0);
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
(0, vitest_1.describe)('reloadConfig', () => {
|
|
254
|
+
(0, vitest_1.it)('should reload with new configuration', async () => {
|
|
255
|
+
const newEndpoints = [
|
|
256
|
+
{
|
|
257
|
+
id: 'new-endpoint',
|
|
258
|
+
path: '/new',
|
|
259
|
+
method: 'GET',
|
|
260
|
+
scenarios: [{ id: 'ok', name: 'OK', status: 200, body: { new: true } }],
|
|
261
|
+
defaultScenarioId: 'ok',
|
|
262
|
+
},
|
|
263
|
+
];
|
|
264
|
+
serverApp.reloadConfig(newEndpoints, []);
|
|
265
|
+
const res = await (0, supertest_1.default)(serverApp.getApp())
|
|
266
|
+
.get('/api/new')
|
|
267
|
+
.expect(200);
|
|
268
|
+
(0, vitest_1.expect)(res.body).toEqual({ new: true });
|
|
269
|
+
});
|
|
270
|
+
(0, vitest_1.it)('should reset state on reload', async () => {
|
|
271
|
+
serverApp.getStateManager().activateScenario('get-users', 'error');
|
|
272
|
+
serverApp.reloadConfig(mockEndpoints, mockFlows);
|
|
273
|
+
// State should be reset, so default scenario should be active
|
|
274
|
+
const res = await (0, supertest_1.default)(serverApp.getApp())
|
|
275
|
+
.get('/api/users')
|
|
276
|
+
.expect(200);
|
|
277
|
+
(0, vitest_1.expect)(res.body.length).toBe(2);
|
|
278
|
+
});
|
|
279
|
+
(0, vitest_1.it)('should remove old routes on reload', async () => {
|
|
280
|
+
serverApp.reloadConfig([], []);
|
|
281
|
+
await (0, supertest_1.default)(serverApp.getApp())
|
|
282
|
+
.get('/api/users')
|
|
283
|
+
.expect(404);
|
|
284
|
+
});
|
|
285
|
+
});
|
|
286
|
+
});
|
|
287
|
+
(0, vitest_1.describe)('createMockServerApp', () => {
|
|
288
|
+
(0, vitest_1.it)('should create a MockServerApp instance', () => {
|
|
289
|
+
const app = (0, mock_server_app_js_1.createMockServerApp)();
|
|
290
|
+
(0, vitest_1.expect)(app).toBeInstanceOf(mock_server_app_js_1.MockServerApp);
|
|
291
|
+
});
|
|
292
|
+
(0, vitest_1.it)('should accept options', () => {
|
|
293
|
+
const app = (0, mock_server_app_js_1.createMockServerApp)({ port: 5000 });
|
|
294
|
+
(0, vitest_1.expect)(app.getOptions().port).toBe(5000);
|
|
295
|
+
});
|
|
296
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-server-app.test.js","sourceRoot":"","sources":["../../../src/server/__tests__/mock-server-app.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,aAAa,EACb,WAAW,EACX,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAGpD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ADMIN_UI_PATH = exports.createMockServerApp = exports.MockServerApp = exports.DEFAULT_SERVER_OPTIONS = void 0;
|
|
4
|
+
var types_js_1 = require("./types.js");
|
|
5
|
+
Object.defineProperty(exports, "DEFAULT_SERVER_OPTIONS", { enumerable: true, get: function () { return types_js_1.DEFAULT_SERVER_OPTIONS; } });
|
|
6
|
+
// Mock server app
|
|
7
|
+
var mock_server_app_js_1 = require("./mock-server-app.js");
|
|
8
|
+
Object.defineProperty(exports, "MockServerApp", { enumerable: true, get: function () { return mock_server_app_js_1.MockServerApp; } });
|
|
9
|
+
Object.defineProperty(exports, "createMockServerApp", { enumerable: true, get: function () { return mock_server_app_js_1.createMockServerApp; } });
|
|
10
|
+
Object.defineProperty(exports, "ADMIN_UI_PATH", { enumerable: true, get: function () { return mock_server_app_js_1.ADMIN_UI_PATH; } });
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":";;;AAOA,uCAAoD;AAA3C,kHAAA,sBAAsB,OAAA;AAE/B,kBAAkB;AAClB,2DAAyF;AAAhF,mHAAA,aAAa,OAAA;AAAE,yHAAA,mBAAmB,OAAA;AAAE,mHAAA,aAAa,OAAA"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { Express } from 'express';
|
|
2
|
+
import type { Server } from 'http';
|
|
3
|
+
import type { EndpointConfig, FlowConfig } from '../schemas/index.js';
|
|
4
|
+
import { StateManager } from '../state/index.js';
|
|
5
|
+
import { ResponseResolver } from '../resolver/index.js';
|
|
6
|
+
import type { ConfigWriter } from '../config/index.js';
|
|
7
|
+
import type { ServerOptions, ServerState, RegisteredRoute } from './types.js';
|
|
8
|
+
export declare const ADMIN_UI_PATH = "/mock-admin";
|
|
9
|
+
/**
|
|
10
|
+
* Mock server that serves configured endpoints
|
|
11
|
+
*/
|
|
12
|
+
export declare class MockServerApp {
|
|
13
|
+
private app;
|
|
14
|
+
private server;
|
|
15
|
+
private options;
|
|
16
|
+
private stateManager;
|
|
17
|
+
private resolver;
|
|
18
|
+
private mockRouter;
|
|
19
|
+
private registeredRoutes;
|
|
20
|
+
private endpoints;
|
|
21
|
+
private flows;
|
|
22
|
+
private configWriter?;
|
|
23
|
+
private onConfigChange?;
|
|
24
|
+
constructor(options?: Partial<ServerOptions>);
|
|
25
|
+
/**
|
|
26
|
+
* Setup Express middleware
|
|
27
|
+
*/
|
|
28
|
+
private setupMiddleware;
|
|
29
|
+
/**
|
|
30
|
+
* Mount the admin API router
|
|
31
|
+
*/
|
|
32
|
+
private mountAdminRouter;
|
|
33
|
+
/**
|
|
34
|
+
* Mount the admin UI static files
|
|
35
|
+
* Serves the built React app at /mock-admin
|
|
36
|
+
*/
|
|
37
|
+
private mountAdminUI;
|
|
38
|
+
/**
|
|
39
|
+
* Mount the mock router at the configured prefix
|
|
40
|
+
*/
|
|
41
|
+
private mountMockRouter;
|
|
42
|
+
/**
|
|
43
|
+
* Get the Express app instance
|
|
44
|
+
*/
|
|
45
|
+
getApp(): Express;
|
|
46
|
+
/**
|
|
47
|
+
* Get the state manager
|
|
48
|
+
*/
|
|
49
|
+
getStateManager(): StateManager;
|
|
50
|
+
/**
|
|
51
|
+
* Get the response resolver
|
|
52
|
+
*/
|
|
53
|
+
getResolver(): ResponseResolver;
|
|
54
|
+
/**
|
|
55
|
+
* Get server options
|
|
56
|
+
*/
|
|
57
|
+
getOptions(): ServerOptions;
|
|
58
|
+
/**
|
|
59
|
+
* Get registered routes
|
|
60
|
+
*/
|
|
61
|
+
getRegisteredRoutes(): RegisteredRoute[];
|
|
62
|
+
/**
|
|
63
|
+
* Set the config writer for endpoint/flow management
|
|
64
|
+
*/
|
|
65
|
+
setConfigWriter(configWriter: ConfigWriter, onConfigChange?: () => Promise<void>): void;
|
|
66
|
+
/**
|
|
67
|
+
* Get current server state
|
|
68
|
+
*/
|
|
69
|
+
getState(): ServerState;
|
|
70
|
+
/**
|
|
71
|
+
* Register endpoints and flows
|
|
72
|
+
*/
|
|
73
|
+
registerConfig(endpoints: EndpointConfig[], flows: FlowConfig[]): void;
|
|
74
|
+
/**
|
|
75
|
+
* Register routes for all endpoints
|
|
76
|
+
*/
|
|
77
|
+
private registerRoutes;
|
|
78
|
+
/**
|
|
79
|
+
* Register a single endpoint
|
|
80
|
+
*/
|
|
81
|
+
private registerEndpoint;
|
|
82
|
+
/**
|
|
83
|
+
* Create request handler for an endpoint
|
|
84
|
+
*/
|
|
85
|
+
private createEndpointHandler;
|
|
86
|
+
/**
|
|
87
|
+
* Add custom middleware to the Express app
|
|
88
|
+
*/
|
|
89
|
+
use(...args: Parameters<Express['use']>): ReturnType<Express['use']>;
|
|
90
|
+
/**
|
|
91
|
+
* Start the server
|
|
92
|
+
*/
|
|
93
|
+
start(port?: number): Promise<number>;
|
|
94
|
+
/**
|
|
95
|
+
* Start the server with a callback
|
|
96
|
+
*/
|
|
97
|
+
startWithCallback(callback: (port: number) => void, port?: number): void;
|
|
98
|
+
/**
|
|
99
|
+
* Stop the server
|
|
100
|
+
*/
|
|
101
|
+
stop(): Promise<void>;
|
|
102
|
+
/**
|
|
103
|
+
* Check if server is running
|
|
104
|
+
*/
|
|
105
|
+
isRunning(): boolean;
|
|
106
|
+
/**
|
|
107
|
+
* Get the HTTP server instance
|
|
108
|
+
*/
|
|
109
|
+
getHttpServer(): Server | null;
|
|
110
|
+
/**
|
|
111
|
+
* Reload configuration (for hot reload support)
|
|
112
|
+
*/
|
|
113
|
+
reloadConfig(endpoints: EndpointConfig[], flows: FlowConfig[]): void;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Create a new MockServerApp instance
|
|
117
|
+
*/
|
|
118
|
+
export declare function createMockServerApp(options?: Partial<ServerOptions>): MockServerApp;
|
|
119
|
+
//# sourceMappingURL=mock-server-app.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-server-app.d.ts","sourceRoot":"","sources":["../../src/server/mock-server-app.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,OAAO,EAA2C,MAAM,SAAS,CAAC;AACpF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAsB,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAA0B,MAAM,sBAAsB,CAAC;AAEhF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAI9E,eAAO,MAAM,aAAa,gBAAgB,CAAC;AAE3C;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,GAAG,CAAU;IACrB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,gBAAgB,CAAyB;IACjD,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,YAAY,CAAC,CAAe;IACpC,OAAO,CAAC,cAAc,CAAC,CAAsB;gBAEjC,OAAO,GAAE,OAAO,CAAC,aAAa,CAAM;IAahD;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAiCpB;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;OAEG;IACH,WAAW,IAAI,gBAAgB;IAI/B;;OAEG;IACH,UAAU,IAAI,aAAa;IAI3B;;OAEG;IACH,mBAAmB,IAAI,eAAe,EAAE;IAIxC;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,YAAY,EAAE,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAKvF;;OAEG;IACH,QAAQ,IAAI,WAAW;IASvB;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI;IAetE;;OAEG;IACH,OAAO,CAAC,cAAc;IAmBtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAwBxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAgB7B;;OAEG;IACH,GAAG,CACD,GAAG,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAClC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAI7B;;OAEG;IACG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAyB3C;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAexE;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB3B;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,aAAa,IAAI,MAAM,GAAG,IAAI;IAI9B;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI;CAKrE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,OAAO,CAAC,aAAa,CAAM,GACnC,aAAa,CAEf"}
|