airdcpp-apisocket 3.0.0-beta.1 → 3.0.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-es/PublicHelpers.js +21 -4
- package/dist-es/PublicHelpers.js.map +1 -1
- package/dist-es/SocketBase.js +13 -11
- package/dist-es/SocketBase.js.map +1 -1
- package/dist-es/SocketRequestHandler.js +3 -5
- package/dist-es/SocketRequestHandler.js.map +1 -1
- package/dist-es/tests/mocks/index.d.ts +3 -0
- package/dist-es/tests/mocks/index.js +4 -0
- package/dist-es/tests/mocks/index.js.map +1 -0
- package/dist-es/tests/mocks/mock-data.d.ts +54 -0
- package/dist-es/tests/mocks/mock-data.js +34 -0
- package/dist-es/tests/mocks/mock-data.js.map +1 -0
- package/dist-es/tests/mocks/mock-server.d.ts +43 -0
- package/dist-es/tests/mocks/mock-server.js +154 -0
- package/dist-es/tests/mocks/mock-server.js.map +1 -0
- package/dist-es/tests/mocks/mock-socket.d.ts +23 -0
- package/dist-es/tests/mocks/mock-socket.js +31 -0
- package/dist-es/tests/mocks/mock-socket.js.map +1 -0
- package/dist-es/tests/test-utils.d.ts +8 -0
- package/dist-es/tests/test-utils.js +28 -0
- package/dist-es/tests/test-utils.js.map +1 -0
- package/dist-es/types/public_helpers.d.ts +12 -3
- package/dist-es/types/public_helpers_internal.d.ts +4 -4
- package/dist-es/types/socket.d.ts +1 -0
- package/package.json +10 -7
- package/src/PublicHelpers.ts +22 -4
- package/src/SocketBase.ts +15 -12
- package/src/SocketRequestHandler.ts +3 -5
- package/src/tests/Socket.test.ts +107 -109
- package/src/tests/mocks/index.ts +3 -0
- package/src/tests/mocks/mock-data.ts +36 -0
- package/src/tests/mocks/mock-server.ts +269 -0
- package/src/tests/mocks/mock-socket.ts +68 -0
- package/src/tests/public_helpers.test.ts +63 -62
- package/src/tests/test-utils.ts +31 -0
- package/src/types/api_internal.ts +0 -1
- package/src/types/public_helpers.ts +11 -11
- package/src/types/public_helpers_internal.ts +4 -4
- package/src/types/socket.ts +1 -0
- package/tsconfig.json +1 -1
- package/src/tests/helpers.ts +0 -195
package/src/tests/Socket.test.ts
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
import {
|
2
|
-
|
3
|
-
getConnectedSocket, getMockServer, getSocket
|
4
|
-
} from './
|
2
|
+
DEFAULT_AUTH_RESPONSE, DEFAULT_CONNECT_PARAMS,
|
3
|
+
getConnectedSocket as getOriginalConnectedSocket, getMockServer as getOriginalMockServer, getSocket as getOriginalSocket
|
4
|
+
} from './mocks';
|
5
5
|
|
6
6
|
import ApiConstants from '../ApiConstants.js';
|
7
7
|
|
@@ -9,23 +9,23 @@ import { HookCallback, HookSubscriberInfo, SubscriptionRemoveHandler } from '../
|
|
9
9
|
import { IncomingSubscriptionEvent } from '../types/api_internal.js';
|
10
10
|
|
11
11
|
import { jest } from '@jest/globals';
|
12
|
-
|
13
|
-
let server: ReturnType<typeof getMockServer>;
|
12
|
+
import { defusedPromise, getMockConsole, waitForExpect } from './test-utils.js';
|
14
13
|
|
15
14
|
const dummyfn = () => {
|
16
15
|
// ..
|
17
16
|
};
|
18
17
|
|
19
|
-
const useFakeTimers = () => {
|
20
|
-
// Mocking performance would cause an error with Node 19, can be removed when using
|
21
|
-
// the latest version of Jest
|
22
|
-
jest.useFakeTimers({doNotFake: ['performance']});
|
23
|
-
};
|
24
18
|
|
25
19
|
// tslint:disable:no-empty
|
26
20
|
describe('socket', () => {
|
21
|
+
let server: ReturnType<typeof getOriginalMockServer>;
|
22
|
+
let mockConsole: ReturnType<typeof getMockConsole>;
|
23
|
+
|
27
24
|
beforeEach(() => {
|
28
|
-
|
25
|
+
mockConsole = getMockConsole();
|
26
|
+
server = getOriginalMockServer({
|
27
|
+
mockF: jest,
|
28
|
+
});
|
29
29
|
});
|
30
30
|
|
31
31
|
afterEach(() => {
|
@@ -33,17 +33,32 @@ describe('socket', () => {
|
|
33
33
|
jest.useRealTimers();
|
34
34
|
});
|
35
35
|
|
36
|
+
const getDefaultSocketOptions = () => ({
|
37
|
+
logOutput: mockConsole,
|
38
|
+
});
|
39
|
+
|
40
|
+
const getMockSocket = () => {
|
41
|
+
return getOriginalSocket(getDefaultSocketOptions());
|
42
|
+
}
|
43
|
+
|
44
|
+
|
45
|
+
const getConnectedMockSocket = () => {
|
46
|
+
return getOriginalConnectedSocket(server, {
|
47
|
+
socketOptions: getDefaultSocketOptions(),
|
48
|
+
});
|
49
|
+
}
|
50
|
+
|
36
51
|
describe('auth', () => {
|
37
52
|
test('should handle valid credentials', async () => {
|
38
|
-
server.
|
53
|
+
server.addRequestHandler('POST', ApiConstants.LOGIN_URL, DEFAULT_AUTH_RESPONSE);
|
39
54
|
const connectedCallback = jest.fn();
|
40
55
|
|
41
|
-
const { socket
|
56
|
+
const { socket } = getMockSocket();
|
42
57
|
socket.onConnected = connectedCallback;
|
43
58
|
const response = await socket.connect();
|
44
59
|
|
45
|
-
expect(connectedCallback).toHaveBeenCalledWith(
|
46
|
-
expect(response).toEqual(
|
60
|
+
expect(connectedCallback).toHaveBeenCalledWith(DEFAULT_AUTH_RESPONSE);
|
61
|
+
expect(response).toEqual(DEFAULT_AUTH_RESPONSE);
|
47
62
|
expect(socket.isConnected()).toEqual(true);
|
48
63
|
|
49
64
|
expect(mockConsole.warn.mock.calls.length).toBe(0);
|
@@ -54,15 +69,15 @@ describe('socket', () => {
|
|
54
69
|
});
|
55
70
|
|
56
71
|
test('should handle valid refresh token', async () => {
|
57
|
-
server.
|
72
|
+
server.addRequestHandler('POST', ApiConstants.LOGIN_URL, DEFAULT_AUTH_RESPONSE);
|
58
73
|
const connectedCallback = jest.fn();
|
59
74
|
|
60
|
-
const { socket
|
75
|
+
const { socket } = getMockSocket();
|
61
76
|
socket.onConnected = connectedCallback;
|
62
77
|
const response = await socket.connectRefreshToken('refresh token');
|
63
78
|
|
64
|
-
expect(connectedCallback).toHaveBeenCalledWith(
|
65
|
-
expect(response).toEqual(
|
79
|
+
expect(connectedCallback).toHaveBeenCalledWith(DEFAULT_AUTH_RESPONSE);
|
80
|
+
expect(response).toEqual(DEFAULT_AUTH_RESPONSE);
|
66
81
|
expect(socket.isConnected()).toEqual(true);
|
67
82
|
|
68
83
|
expect(mockConsole.warn.mock.calls.length).toBe(0);
|
@@ -75,7 +90,7 @@ describe('socket', () => {
|
|
75
90
|
test('should handle invalid credentials', async () => {
|
76
91
|
server.addErrorHandler('POST', ApiConstants.LOGIN_URL, 'Invalid username or password', 401);
|
77
92
|
|
78
|
-
const { socket
|
93
|
+
const { socket } = getMockSocket();
|
79
94
|
let error;
|
80
95
|
|
81
96
|
try {
|
@@ -94,15 +109,16 @@ describe('socket', () => {
|
|
94
109
|
|
95
110
|
test('should handle connect with custom credentials', async () => {
|
96
111
|
server.stop();
|
97
|
-
const { socket } =
|
112
|
+
const { socket } = getOriginalSocket({
|
98
113
|
username: 'dummy',
|
99
114
|
password: 'dummy',
|
115
|
+
...getDefaultSocketOptions(),
|
100
116
|
});
|
101
117
|
|
102
118
|
// Fail without a server handler with auto reconnect disabled
|
103
119
|
let error;
|
104
120
|
try {
|
105
|
-
await socket.connect(
|
121
|
+
await socket.connect(DEFAULT_CONNECT_PARAMS.username, DEFAULT_CONNECT_PARAMS.password, false);
|
106
122
|
} catch (e) {
|
107
123
|
error = e;
|
108
124
|
}
|
@@ -111,10 +127,10 @@ describe('socket', () => {
|
|
111
127
|
await waitForExpect(() => expect(socket.isActive()).toEqual(false));
|
112
128
|
|
113
129
|
// Valid connect attempt
|
114
|
-
server =
|
115
|
-
server.
|
130
|
+
server = getOriginalMockServer();
|
131
|
+
server.addRequestHandler('POST', ApiConstants.LOGIN_URL, DEFAULT_AUTH_RESPONSE);
|
116
132
|
|
117
|
-
await socket.connect(
|
133
|
+
await socket.connect(DEFAULT_CONNECT_PARAMS.username, DEFAULT_CONNECT_PARAMS.password, false);
|
118
134
|
|
119
135
|
expect(socket.isConnected()).toEqual(true);
|
120
136
|
|
@@ -126,27 +142,28 @@ describe('socket', () => {
|
|
126
142
|
const sessionResetCallback = jest.fn();
|
127
143
|
const disconnectedCallback = jest.fn();
|
128
144
|
|
129
|
-
const { socket
|
145
|
+
const { socket } = await getConnectedMockSocket();
|
130
146
|
socket.onSessionReset = sessionResetCallback;
|
131
147
|
socket.onDisconnected = disconnectedCallback;
|
132
148
|
|
133
149
|
// Dummy listener
|
134
|
-
server.
|
150
|
+
server.addRequestHandler('POST', 'hubs/listeners/hub_updated', undefined);
|
135
151
|
await socket.addListener('hubs', 'hub_updated', dummyfn);
|
136
152
|
|
137
153
|
// Dummy pending request
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
});
|
154
|
+
server.ignoreMissingHandler('DELETE', 'dummyLogoutDelete');
|
155
|
+
|
156
|
+
const pendingRequestPromise = defusedPromise(socket.delete('dummyLogoutDelete'));
|
142
157
|
|
143
158
|
// Logout
|
144
|
-
server.
|
159
|
+
server.addRequestHandler('DELETE', ApiConstants.LOGOUT_URL);
|
145
160
|
await socket.logout();
|
146
161
|
|
147
162
|
expect(sessionResetCallback.mock.calls.length).toBe(1);
|
148
163
|
await waitForExpect(() => expect(disconnectedCallback.mock.calls.length).toBe(1));
|
149
164
|
|
165
|
+
await expect(pendingRequestPromise).rejects.toMatchInlineSnapshot(`"Socket disconnected"`);
|
166
|
+
|
150
167
|
expect(socket.isActive()).toEqual(false);
|
151
168
|
expect(socket.hasListeners()).toEqual(false);
|
152
169
|
expect(socket.getPendingRequestCount()).toEqual(0);
|
@@ -158,7 +175,7 @@ describe('socket', () => {
|
|
158
175
|
|
159
176
|
describe('disconnect', () => {
|
160
177
|
test('should handle disconnect', async () => {
|
161
|
-
const { socket
|
178
|
+
const { socket } = await getConnectedMockSocket();
|
162
179
|
|
163
180
|
socket.disconnect();
|
164
181
|
|
@@ -170,16 +187,16 @@ describe('socket', () => {
|
|
170
187
|
});
|
171
188
|
|
172
189
|
test('should handle wait disconnected timeout', async () => {
|
173
|
-
const { socket
|
190
|
+
const { socket } = await getConnectedMockSocket();
|
174
191
|
|
175
|
-
let error;
|
192
|
+
let error: Error | null = null;
|
176
193
|
try {
|
177
194
|
await socket.waitDisconnected(50);
|
178
195
|
} catch (e) {
|
179
196
|
error = e;
|
180
197
|
}
|
181
198
|
|
182
|
-
expect(error).toEqual('Socket disconnect timed out');
|
199
|
+
expect(error?.message).toEqual('Socket disconnect timed out');
|
183
200
|
|
184
201
|
expect(mockConsole.error.mock.calls.length).toBe(1);
|
185
202
|
expect(mockConsole.warn.mock.calls.length).toBe(0);
|
@@ -191,19 +208,14 @@ describe('socket', () => {
|
|
191
208
|
|
192
209
|
describe('reconnect', () => {
|
193
210
|
test('should handle auto reconnect', async () => {
|
194
|
-
const { socket
|
211
|
+
const { socket } = await getConnectedMockSocket();
|
195
212
|
|
196
|
-
useFakeTimers();
|
213
|
+
jest.useFakeTimers();
|
197
214
|
|
198
215
|
socket.disconnect(true);
|
199
216
|
jest.runOnlyPendingTimers();
|
200
217
|
|
201
|
-
|
202
|
-
/*{
|
203
|
-
const waitForExpectTask = await waitForExpect(() => expect(socket.isActive()).toEqual(false));
|
204
|
-
jest.advanceTimersByTime(1000);
|
205
|
-
await waitForExpectTask;
|
206
|
-
}*/
|
218
|
+
expect(socket.isActive()).toEqual(false);
|
207
219
|
|
208
220
|
// Let it fail once
|
209
221
|
server.stop();
|
@@ -211,8 +223,8 @@ describe('socket', () => {
|
|
211
223
|
jest.runOnlyPendingTimers();
|
212
224
|
expect(mockConsole.error.mock.calls.length).toBe(1);
|
213
225
|
|
214
|
-
server =
|
215
|
-
server.
|
226
|
+
server = getOriginalMockServer();
|
227
|
+
server.addRequestHandler('POST', ApiConstants.CONNECT_URL, undefined);
|
216
228
|
jest.runOnlyPendingTimers();
|
217
229
|
jest.runOnlyPendingTimers();
|
218
230
|
jest.runOnlyPendingTimers();
|
@@ -232,9 +244,9 @@ describe('socket', () => {
|
|
232
244
|
});
|
233
245
|
|
234
246
|
test('should cancel auto reconnect', async () => {
|
235
|
-
const { socket
|
247
|
+
const { socket } = await getConnectedMockSocket();
|
236
248
|
|
237
|
-
useFakeTimers();
|
249
|
+
jest.useFakeTimers();
|
238
250
|
|
239
251
|
// Disconnect with auto reconnect
|
240
252
|
socket.disconnect(true);
|
@@ -258,12 +270,12 @@ describe('socket', () => {
|
|
258
270
|
});
|
259
271
|
|
260
272
|
test('should handle manual reconnect', async () => {
|
261
|
-
const { socket
|
273
|
+
const { socket } = await getConnectedMockSocket();
|
262
274
|
|
263
275
|
socket.disconnect();
|
264
276
|
await waitForExpect(() => expect(socket.isActive()).toEqual(false));
|
265
277
|
|
266
|
-
server.
|
278
|
+
server.addRequestHandler('POST', ApiConstants.CONNECT_URL, undefined);
|
267
279
|
await socket.reconnect();
|
268
280
|
expect(socket.isConnected()).toEqual(true);
|
269
281
|
|
@@ -274,39 +286,31 @@ describe('socket', () => {
|
|
274
286
|
await waitForExpect(() => expect(socket.isActive()).toEqual(false));
|
275
287
|
});
|
276
288
|
|
277
|
-
|
278
|
-
test.skip('should re-authenticate on lost session', async () => {
|
289
|
+
test('should re-authenticate on lost session', async () => {
|
279
290
|
const ErrorResponse = 'Invalid session token';
|
291
|
+
const authCallback = jest.fn();
|
292
|
+
const connectErrorCallback = jest.fn();
|
280
293
|
|
281
294
|
// Connect and disconnect
|
282
|
-
const { socket
|
295
|
+
const { socket } = await getConnectedMockSocket();
|
283
296
|
|
284
|
-
useFakeTimers();
|
297
|
+
jest.useFakeTimers();
|
285
298
|
socket.disconnect();
|
286
299
|
jest.runOnlyPendingTimers();
|
287
300
|
expect(socket.isActive()).toEqual(false);
|
288
301
|
|
289
302
|
// Fail the initial reconnect attempt with 'Invalid session token'
|
290
303
|
// and connect with credentials afterwards
|
291
|
-
server.addErrorHandler('POST', ApiConstants.CONNECT_URL, ErrorResponse, 400);
|
304
|
+
server.addErrorHandler('POST', ApiConstants.CONNECT_URL, ErrorResponse, 400, connectErrorCallback);
|
292
305
|
|
293
|
-
|
294
|
-
server.addDataHandler('POST', ApiConstants.LOGIN_URL, AUTH_RESPONSE, authCallback);
|
306
|
+
server.addRequestHandler('POST', ApiConstants.LOGIN_URL, DEFAULT_AUTH_RESPONSE, authCallback);
|
295
307
|
|
296
308
|
jest.runOnlyPendingTimers();
|
297
309
|
socket.reconnect();
|
298
310
|
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
jest.runOnlyPendingTimers();
|
303
|
-
expect(authCallback.mock.calls.length).toBe(1);
|
304
|
-
}
|
305
|
-
);
|
306
|
-
|
307
|
-
jest.advanceTimersByTime(1000);
|
308
|
-
await waitForExpectTask;
|
309
|
-
}
|
311
|
+
await jest.advanceTimersByTimeAsync(1000);
|
312
|
+
expect(authCallback.mock.calls.length).toBe(1);
|
313
|
+
expect(connectErrorCallback.mock.calls.length).toBe(1);
|
310
314
|
|
311
315
|
expect(socket.isConnected()).toEqual(true);
|
312
316
|
expect(mockConsole.error.mock.calls.length).toBe(0);
|
@@ -332,9 +336,12 @@ describe('socket', () => {
|
|
332
336
|
|
333
337
|
describe('requests', () => {
|
334
338
|
test('should report request timeouts', async () => {
|
335
|
-
const { socket
|
339
|
+
const { socket } = await getConnectedMockSocket();
|
340
|
+
|
341
|
+
server.ignoreMissingHandler('POST', 'hubs/listeners/hub_updated');
|
342
|
+
server.ignoreMissingHandler('POST', 'hubs/listeners/hub_added');
|
336
343
|
|
337
|
-
useFakeTimers();
|
344
|
+
jest.useFakeTimers();
|
338
345
|
socket.addListener('hubs', 'hub_updated', dummyfn)
|
339
346
|
.catch(() => {});
|
340
347
|
socket.addListener('hubs', 'hub_added', dummyfn)
|
@@ -359,7 +366,7 @@ describe('socket', () => {
|
|
359
366
|
});
|
360
367
|
|
361
368
|
test('should handle missing error messages', async () => {
|
362
|
-
const { socket } = await
|
369
|
+
const { socket } = await getConnectedMockSocket();
|
363
370
|
|
364
371
|
server.addErrorHandler('POST', 'test/test', null, 401);
|
365
372
|
|
@@ -393,9 +400,9 @@ describe('socket', () => {
|
|
393
400
|
};
|
394
401
|
|
395
402
|
test('should handle listener messages', async () => {
|
396
|
-
const { socket
|
397
|
-
server.
|
398
|
-
server.
|
403
|
+
const { socket } = await getConnectedMockSocket();
|
404
|
+
server.addSubscriptionHandler('hubs', 'hub_updated');
|
405
|
+
server.addSubscriptionHandler('hubs', 'hub_updated', entityId);
|
399
406
|
|
400
407
|
const commonSubscriptionCallback = jest.fn();
|
401
408
|
const entitySubscriptionCallback = jest.fn();
|
@@ -419,10 +426,9 @@ describe('socket', () => {
|
|
419
426
|
});
|
420
427
|
|
421
428
|
test('should handle listener removal', async () => {
|
422
|
-
const { socket
|
429
|
+
const { socket } = await getConnectedMockSocket();
|
423
430
|
|
424
|
-
const
|
425
|
-
server.addDataHandler('POST', 'hubs/listeners/hub_updated', undefined, subscribeCallback);
|
431
|
+
const hubUpdatedListener = server.addSubscriptionHandler('hubs', 'hub_updated');
|
426
432
|
|
427
433
|
// Add two simultaneous pending add events
|
428
434
|
const p1 = socket.addListener('hubs', 'hub_updated', dummyfn);
|
@@ -434,17 +440,14 @@ describe('socket', () => {
|
|
434
440
|
const removeListener1 = await p1;
|
435
441
|
const removeListener2 = await p2;
|
436
442
|
|
437
|
-
expect(
|
443
|
+
expect(hubUpdatedListener.subscribeFn.mock.calls.length).toBe(1);
|
438
444
|
expect(socket.getPendingSubscriptionCount()).toBe(0);
|
439
445
|
|
440
|
-
const deleteCallback = jest.fn();
|
441
|
-
server.addDataHandler('DELETE', 'hubs/listeners/hub_updated', undefined, deleteCallback);
|
442
|
-
|
443
446
|
removeListener1();
|
444
|
-
expect(
|
447
|
+
expect(hubUpdatedListener.unsubscribeFn.mock.calls.length).toBe(0); // Shouldn't call API yet, still one left
|
445
448
|
|
446
449
|
removeListener2();
|
447
|
-
await waitForExpect(() => expect(
|
450
|
+
await waitForExpect(() => expect(hubUpdatedListener.unsubscribeFn.mock.calls.length).toBe(1));
|
448
451
|
|
449
452
|
expect(socket.hasListeners()).toBe(false);
|
450
453
|
|
@@ -455,7 +458,7 @@ describe('socket', () => {
|
|
455
458
|
});
|
456
459
|
|
457
460
|
test('should handle view updates', async () => {
|
458
|
-
const { socket
|
461
|
+
const { socket } = await getConnectedMockSocket();
|
459
462
|
const viewUpdateCallback = jest.fn();
|
460
463
|
|
461
464
|
const removeListener = socket.addViewUpdateListener('hub_user_view', viewUpdateCallback, entityId);
|
@@ -472,11 +475,9 @@ describe('socket', () => {
|
|
472
475
|
});
|
473
476
|
|
474
477
|
describe('hooks', () => {
|
475
|
-
const
|
476
|
-
|
477
|
-
|
478
|
-
completion_id: 1,
|
479
|
-
};
|
478
|
+
const HOOK_MODULE = 'queue';
|
479
|
+
const HOOK_NAME = 'queue_bundle_finished_hook';
|
480
|
+
const HOOK_COMPLETION_ID = 1;
|
480
481
|
|
481
482
|
const hookSubscriberInfo: HookSubscriberInfo = {
|
482
483
|
id: 'sfv_checker',
|
@@ -488,38 +489,32 @@ describe('socket', () => {
|
|
488
489
|
};
|
489
490
|
|
490
491
|
test('should handle hook actions', async () => {
|
491
|
-
const { socket
|
492
|
+
const { socket } = await getConnectedMockSocket();
|
492
493
|
let removeListener: SubscriptionRemoveHandler | null = null;
|
493
494
|
|
494
495
|
// Add hook
|
495
496
|
{
|
496
|
-
const
|
497
|
-
server.addDataHandler('POST', 'queue/hooks/queue_bundle_finished_hook', undefined, hookAddCallback);
|
497
|
+
const hook = server.addHookHandler(HOOK_MODULE, HOOK_NAME);
|
498
498
|
|
499
499
|
removeListener = await socket.addHook(
|
500
|
-
|
501
|
-
|
500
|
+
HOOK_MODULE,
|
501
|
+
HOOK_NAME,
|
502
502
|
rejectCallback,
|
503
503
|
hookSubscriberInfo
|
504
504
|
);
|
505
505
|
|
506
|
-
expect((
|
507
|
-
expect(
|
508
|
-
}
|
506
|
+
expect((hook.subscribeFn.mock.calls[0][0] as any).data).toEqual(hookSubscriberInfo);
|
507
|
+
expect(hook.subscribeFn.mock.calls.length).toBe(1);
|
509
508
|
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
server.send(hookEventData);
|
515
|
-
await waitForExpect(() => expect(hookEventCallback.mock.calls.length).toBe(1));
|
509
|
+
// Simulate action
|
510
|
+
const hookResolver = hook.addResolver(HOOK_COMPLETION_ID);
|
511
|
+
hookResolver.fire({});
|
512
|
+
await waitForExpect(() => expect(hookResolver.rejectFn.mock.calls.length).toBe(1));
|
516
513
|
}
|
517
514
|
|
518
515
|
// Clean up
|
519
|
-
|
520
|
-
|
521
|
-
expect(socket.hasListeners()).toBe(false);
|
522
|
-
}
|
516
|
+
removeListener();
|
517
|
+
expect(socket.hasListeners()).toBe(false);
|
523
518
|
|
524
519
|
expect(mockConsole.warn.mock.calls.length).toBe(0);
|
525
520
|
|
@@ -530,8 +525,11 @@ describe('socket', () => {
|
|
530
525
|
|
531
526
|
describe('logging', () => {
|
532
527
|
const connect = async (logLevel: string) => {
|
533
|
-
const { socket
|
534
|
-
|
528
|
+
const { socket } = await getOriginalConnectedSocket(server, {
|
529
|
+
socketOptions: {
|
530
|
+
logLevel,
|
531
|
+
...getDefaultSocketOptions(),
|
532
|
+
},
|
535
533
|
});
|
536
534
|
|
537
535
|
socket.disconnect(true);
|
@@ -0,0 +1,36 @@
|
|
1
|
+
|
2
|
+
export const DEFAULT_CONNECT_PARAMS = {
|
3
|
+
username: 'test',
|
4
|
+
password: 'test',
|
5
|
+
url: 'ws://localhost:7171/api/v1/',
|
6
|
+
};
|
7
|
+
|
8
|
+
export const DEFAULT_CONNECT_RESPONSE = {
|
9
|
+
session_id: 1,
|
10
|
+
auth_token: 'b823187f-4aab-4b71-9764-e63e88401a26',
|
11
|
+
token_type: 'Bearer',
|
12
|
+
user: {
|
13
|
+
permissions: [ 'admin' ],
|
14
|
+
username: 'test',
|
15
|
+
active_sessions: 1,
|
16
|
+
last_login: 0,
|
17
|
+
},
|
18
|
+
system_info: {
|
19
|
+
api_version: 1,
|
20
|
+
api_feature_level: 0,
|
21
|
+
cid: 'AHLUODI2YZ2U7FDWMHFNJU65ERGKUN4MH7GW5LY',
|
22
|
+
hostname: 'ubuntu-htpc',
|
23
|
+
network_type: 'private',
|
24
|
+
path_separator: '/',
|
25
|
+
platform: 'other',
|
26
|
+
language: 'fi',
|
27
|
+
client_started: 1483972366,
|
28
|
+
client_version: 'AirDC++w 2.14.0b-39-g3af3 x86_64',
|
29
|
+
},
|
30
|
+
wizard_pending: false,
|
31
|
+
};
|
32
|
+
|
33
|
+
export const DEFAULT_AUTH_RESPONSE = {
|
34
|
+
...DEFAULT_CONNECT_RESPONSE,
|
35
|
+
refresh_token: '5124faasf-4aab-4b71-9764-e63e88401a26',
|
36
|
+
}
|