Skip to content

Commit c973ed9

Browse files
committed
Mock socket: getSocket no longer passes the default username and password to the socket
It's not the wanted behavior in the Web UI
1 parent 6b6bf85 commit c973ed9

File tree

3 files changed

+46
-22
lines changed

3 files changed

+46
-22
lines changed

src/tests/Socket.test.ts

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {
2-
DEFAULT_AUTH_RESPONSE, DEFAULT_CONNECT_PARAMS,
3-
getConnectedSocket as getOriginalConnectedSocket, getMockServer as getOriginalMockServer, getSocket as getOriginalSocket
2+
DEFAULT_AUTH_RESPONSE, DEFAULT_CONNECT_CREDENTIALS,
3+
getConnectedSocket as getOriginalConnectedSocket, getMockServer as getOriginalMockServer, getSocket as getOriginalSocket,
4+
MockConnectedSocketOptions,
45
} from './mocks';
56

67
import ApiConstants from '../ApiConstants.js';
@@ -34,6 +35,7 @@ describe('socket', () => {
3435
});
3536

3637
const getDefaultSocketOptions = () => ({
38+
...DEFAULT_CONNECT_CREDENTIALS,
3739
logOutput: mockConsole,
3840
});
3941

@@ -42,9 +44,10 @@ describe('socket', () => {
4244
}
4345

4446

45-
const getConnectedMockSocket = () => {
47+
const getConnectedMockSocket = (options?: Partial<MockConnectedSocketOptions>) => {
4648
return getOriginalConnectedSocket(server, {
4749
socketOptions: getDefaultSocketOptions(),
50+
...options,
4851
});
4952
}
5053

@@ -69,14 +72,31 @@ describe('socket', () => {
6972
});
7073

7174
test('should handle valid refresh token', async () => {
72-
server.addRequestHandler('POST', ApiConstants.LOGIN_URL, DEFAULT_AUTH_RESPONSE);
75+
const onAuth = jest.fn();
76+
server.addRequestHandler('POST', ApiConstants.LOGIN_URL, DEFAULT_AUTH_RESPONSE, onAuth);
7377
const connectedCallback = jest.fn();
7478

7579
const { socket } = getMockSocket();
7680
socket.onConnected = connectedCallback;
7781
const response = await socket.connectRefreshToken('refresh token');
7882

7983
expect(connectedCallback).toHaveBeenCalledWith(DEFAULT_AUTH_RESPONSE);
84+
85+
expect(onAuth).toHaveBeenCalled();
86+
expect(onAuth.mock.calls[0]).toMatchInlineSnapshot(`
87+
[
88+
{
89+
"callback_id": 1,
90+
"data": {
91+
"grant_type": "refresh_token",
92+
"refresh_token": "refresh token",
93+
},
94+
"method": "POST",
95+
"path": "sessions/authorize",
96+
},
97+
]
98+
`);
99+
80100
expect(response).toEqual(DEFAULT_AUTH_RESPONSE);
81101
expect(socket.isConnected()).toEqual(true);
82102

@@ -110,15 +130,15 @@ describe('socket', () => {
110130
test('should handle connect with custom credentials', async () => {
111131
server.stop();
112132
const { socket } = getOriginalSocket({
133+
...getDefaultSocketOptions(),
113134
username: 'dummy',
114135
password: 'dummy',
115-
...getDefaultSocketOptions(),
116136
});
117137

118138
// Fail without a server handler with auto reconnect disabled
119139
let error;
120140
try {
121-
await socket.connect(DEFAULT_CONNECT_PARAMS.username, DEFAULT_CONNECT_PARAMS.password, false);
141+
await socket.connect(DEFAULT_CONNECT_CREDENTIALS.username, DEFAULT_CONNECT_CREDENTIALS.password, false);
122142
} catch (e) {
123143
error = e;
124144
}
@@ -130,7 +150,7 @@ describe('socket', () => {
130150
server = getOriginalMockServer();
131151
server.addRequestHandler('POST', ApiConstants.LOGIN_URL, DEFAULT_AUTH_RESPONSE);
132152

133-
await socket.connect(DEFAULT_CONNECT_PARAMS.username, DEFAULT_CONNECT_PARAMS.password, false);
153+
await socket.connect(DEFAULT_CONNECT_CREDENTIALS.username, DEFAULT_CONNECT_CREDENTIALS.password, false);
134154

135155
expect(socket.isConnected()).toEqual(true);
136156

@@ -292,7 +312,9 @@ describe('socket', () => {
292312
const connectErrorCallback = jest.fn();
293313

294314
// Connect and disconnect
295-
const { socket } = await getConnectedMockSocket();
315+
const { socket } = await getConnectedMockSocket({
316+
authCallback,
317+
});
296318

297319
jest.useFakeTimers();
298320
socket.disconnect();
@@ -302,14 +324,12 @@ describe('socket', () => {
302324
// Fail the initial reconnect attempt with 'Invalid session token'
303325
// and connect with credentials afterwards
304326
server.addErrorHandler('POST', ApiConstants.CONNECT_URL, ErrorResponse, 400, connectErrorCallback);
305-
306-
server.addRequestHandler('POST', ApiConstants.LOGIN_URL, DEFAULT_AUTH_RESPONSE, authCallback);
307327

308328
jest.runOnlyPendingTimers();
309329
socket.reconnect();
310330

311331
await jest.advanceTimersByTimeAsync(1000);
312-
expect(authCallback.mock.calls.length).toBe(1);
332+
expect(authCallback.mock.calls.length).toBe(2);
313333
expect(connectErrorCallback.mock.calls.length).toBe(1);
314334

315335
expect(socket.isConnected()).toEqual(true);
@@ -446,7 +466,7 @@ describe('socket', () => {
446466
removeListener1();
447467
expect(hubUpdatedListener.unsubscribeFn.mock.calls.length).toBe(0); // Shouldn't call API yet, still one left
448468

449-
removeListener2();
469+
await removeListener2();
450470
await waitForExpect(() => expect(hubUpdatedListener.unsubscribeFn.mock.calls.length).toBe(1));
451471

452472
expect(socket.hasListeners()).toBe(false);
@@ -513,7 +533,7 @@ describe('socket', () => {
513533
}
514534

515535
// Clean up
516-
removeListener();
536+
await removeListener();
517537
expect(socket.hasListeners()).toBe(false);
518538

519539
expect(mockConsole.warn.mock.calls.length).toBe(0);

src/tests/mocks/mock-data.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1+
export const MOCK_SERVER_URL = 'ws://localhost:7171/api/v1/';
12

2-
export const DEFAULT_CONNECT_PARAMS = {
3+
export const DEFAULT_CONNECT_CREDENTIALS = {
34
username: 'test',
45
password: 'test',
5-
url: 'ws://localhost:7171/api/v1/',
66
};
77

88
export const DEFAULT_CONNECT_RESPONSE = {

src/tests/mocks/mock-socket.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ import * as Options from '../../types/options.js';
55
import ApiConstants from '../../ApiConstants.js';
66

77
import { getMockServer } from './mock-server.js';
8-
import { DEFAULT_AUTH_RESPONSE, DEFAULT_CONNECT_PARAMS } from './mock-data.js';
8+
import { DEFAULT_AUTH_RESPONSE, DEFAULT_CONNECT_CREDENTIALS, MOCK_SERVER_URL } from './mock-data.js';
99

1010
const getDefaultSocketOptions = (): Options.APISocketOptions => ({
11-
...DEFAULT_CONNECT_PARAMS,
11+
url: MOCK_SERVER_URL,
1212
logOutput: console,
1313
logLevel: 'warn',
1414
});
@@ -27,7 +27,7 @@ interface MockSocketOptions {
2727
socketOptions?: MockSocketConnectOptions;
2828
}
2929

30-
interface MockConnectedSocketOptions extends MockSocketOptions {
30+
export interface MockConnectedSocketOptions extends MockSocketOptions {
3131
authCallback?: RequestCallback;
3232
authResponse: object;
3333
}
@@ -37,7 +37,7 @@ export const getSocket = (socketOptions: MockSocketConnectOptions = {}) => {
3737
const socket = Socket(
3838
{
3939
...getDefaultSocketOptions(),
40-
...socketOptions,
40+
...socketOptions
4141
},
4242
WebSocket as any
4343
);
@@ -59,10 +59,14 @@ export const getConnectedSocket = async (
5959
...userOptions,
6060
};
6161

62-
server.addRequestHandler('POST', ApiConstants.LOGIN_URL, options.authResponse, options.authCallback);
62+
const removeAuthHandler = server.addRequestHandler('POST', ApiConstants.LOGIN_URL, options.authResponse, options.authCallback);
6363

64-
const { socket } = getSocket(options.socketOptions);
64+
const { socket } = getSocket({
65+
...DEFAULT_CONNECT_CREDENTIALS,
66+
...getDefaultSocketOptions(),
67+
...options.socketOptions
68+
});
6569
await socket.connect();
6670

67-
return { socket };
71+
return { socket, removeAuthHandler };
6872
};

0 commit comments

Comments
 (0)