refactor: Clean lint errors and organise files
This commit is contained in:
@@ -44,6 +44,19 @@ function createConnectedUser(
|
||||
return user;
|
||||
}
|
||||
|
||||
function getRequiredConnectedUser(connectionId: string): ConnectedUser {
|
||||
const connectedUser = connectedUsers.get(connectionId);
|
||||
|
||||
if (!connectedUser)
|
||||
throw new Error(`Expected connected user for ${connectionId}`);
|
||||
|
||||
return connectedUser;
|
||||
}
|
||||
|
||||
function getSentMessagesStore(user: ConnectedUser): { sentMessages: string[] } {
|
||||
return user.ws as unknown as { sentMessages: string[] };
|
||||
}
|
||||
|
||||
describe('server websocket handler - status_update', () => {
|
||||
beforeEach(() => {
|
||||
connectedUsers.clear();
|
||||
@@ -68,27 +81,24 @@ describe('server websocket handler - status_update', () => {
|
||||
|
||||
await handleWebSocketMessage('conn-1', { type: 'status_update', status: 'busy' });
|
||||
|
||||
const ws2 = user2.ws as unknown as { sentMessages: string[] };
|
||||
const messages = ws2.sentMessages.map((m: string) => JSON.parse(m));
|
||||
const statusMsg = messages.find((m: { type: string }) => m.type === 'status_update');
|
||||
const messages = getSentMessagesStore(user2).sentMessages.map((messageText: string) => JSON.parse(messageText));
|
||||
const statusMsg = messages.find((message: { type: string }) => message.type === 'status_update');
|
||||
|
||||
expect(statusMsg).toBeDefined();
|
||||
expect(statusMsg.oderId).toBe('user-1');
|
||||
expect(statusMsg.status).toBe('busy');
|
||||
expect(statusMsg?.oderId).toBe('user-1');
|
||||
expect(statusMsg?.status).toBe('busy');
|
||||
});
|
||||
|
||||
it('does not broadcast to users in different servers', async () => {
|
||||
createConnectedUser('conn-1', 'user-1');
|
||||
const user2 = createConnectedUser('conn-2', 'user-2');
|
||||
|
||||
connectedUsers.get('conn-1')!.serverIds.add('server-1');
|
||||
getRequiredConnectedUser('conn-1').serverIds.add('server-1');
|
||||
user2.serverIds.add('server-2');
|
||||
|
||||
await handleWebSocketMessage('conn-1', { type: 'status_update', status: 'away' });
|
||||
|
||||
const ws2 = user2.ws as unknown as { sentMessages: string[] };
|
||||
|
||||
expect(ws2.sentMessages.length).toBe(0);
|
||||
expect(getSentMessagesStore(user2).sentMessages.length).toBe(0);
|
||||
});
|
||||
|
||||
it('ignores invalid status values', async () => {
|
||||
@@ -134,22 +144,21 @@ describe('server websocket handler - status_update', () => {
|
||||
await handleWebSocketMessage('conn-1', { type: 'status_update', status: 'away' });
|
||||
|
||||
// Clear sent messages
|
||||
(user2.ws as unknown as { sentMessages: string[] }).sentMessages.length = 0;
|
||||
getSentMessagesStore(user2).sentMessages.length = 0;
|
||||
|
||||
// Identify first (required for handler)
|
||||
await handleWebSocketMessage('conn-1', { type: 'identify', oderId: 'user-1', displayName: 'User 1' });
|
||||
|
||||
// user-2 joins server → should receive server_users with user-1's status
|
||||
(user2.ws as unknown as { sentMessages: string[] }).sentMessages.length = 0;
|
||||
getSentMessagesStore(user2).sentMessages.length = 0;
|
||||
await handleWebSocketMessage('conn-2', { type: 'join_server', serverId: 'server-1' });
|
||||
|
||||
const ws2 = user2.ws as unknown as { sentMessages: string[] };
|
||||
const messages = ws2.sentMessages.map((m: string) => JSON.parse(m));
|
||||
const serverUsersMsg = messages.find((m: { type: string }) => m.type === 'server_users');
|
||||
const messages = getSentMessagesStore(user2).sentMessages.map((messageText: string) => JSON.parse(messageText));
|
||||
const serverUsersMsg = messages.find((message: { type: string }) => message.type === 'server_users');
|
||||
|
||||
expect(serverUsersMsg).toBeDefined();
|
||||
|
||||
const user1InList = serverUsersMsg.users.find((u: { oderId: string }) => u.oderId === 'user-1');
|
||||
const user1InList = serverUsersMsg?.users?.find((userEntry: { oderId: string }) => userEntry.oderId === 'user-1');
|
||||
|
||||
expect(user1InList?.status).toBe('away');
|
||||
});
|
||||
@@ -168,19 +177,18 @@ describe('server websocket handler - user_joined includes status', () => {
|
||||
user2.serverIds.add('server-1');
|
||||
|
||||
// Set user-1's status to busy before joining
|
||||
connectedUsers.get('conn-1')!.status = 'busy';
|
||||
getRequiredConnectedUser('conn-1').status = 'busy';
|
||||
|
||||
// Identify user-1
|
||||
await handleWebSocketMessage('conn-1', { type: 'identify', oderId: 'user-1', displayName: 'User 1' });
|
||||
|
||||
(user2.ws as unknown as { sentMessages: string[] }).sentMessages.length = 0;
|
||||
getSentMessagesStore(user2).sentMessages.length = 0;
|
||||
|
||||
// user-1 joins server-1
|
||||
await handleWebSocketMessage('conn-1', { type: 'join_server', serverId: 'server-1' });
|
||||
|
||||
const ws2 = user2.ws as unknown as { sentMessages: string[] };
|
||||
const messages = ws2.sentMessages.map((m: string) => JSON.parse(m));
|
||||
const joinMsg = messages.find((m: { type: string }) => m.type === 'user_joined');
|
||||
const messages = getSentMessagesStore(user2).sentMessages.map((messageText: string) => JSON.parse(messageText));
|
||||
const joinMsg = messages.find((message: { type: string }) => message.type === 'user_joined');
|
||||
|
||||
// user_joined may or may not appear depending on whether it's a new identity membership
|
||||
// Since both are already in the server, it may not broadcast. Either way, verify no crash.
|
||||
|
||||
Reference in New Issue
Block a user