From 96d395e18c03d44533abc7237dce89df8d256425 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9e=20Kooi?= Date: Mon, 25 Nov 2024 14:39:50 +0100 Subject: [PATCH] Use mute endpoint in chat test --- test/chat.mjs | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/test/chat.mjs b/test/chat.mjs index 310e71f3..c68389e0 100644 --- a/test/chat.mjs +++ b/test/chat.mjs @@ -2,9 +2,28 @@ import assert from 'assert'; import * as sinon from 'sinon'; import delay from 'delay'; import createUwave from './utils/createUwave.mjs'; +import supertest from 'supertest'; const sandbox = sinon.createSandbox(); +async function retryFor(duration, fn) { + const end = Date.now() + duration; + let caughtError; + while (Date.now() < end) { + try { + const result = await fn(); + return result; + } catch (err) { + caughtError = err; + } + await delay(100); + } + + if (caughtError != null) { + throw new Error(`Failed after ${duration}ms`, { cause: caughtError }); + } +} + describe('Chat', () => { let uw; @@ -27,18 +46,23 @@ describe('Chat', () => { }); ws.send(JSON.stringify({ command: 'sendChat', data: 'Message text' })); - await delay(500); - assert(receivedMessages.some((message) => message.command === 'chatMessage' && message.data.userID === user.id && message.data.message === 'Message text')); + await retryFor(1500, async () => { + assert(receivedMessages.some((message) => message.command === 'chatMessage' && message.data.userID === user.id && message.data.message === 'Message text')); + }); }); it('does not broadcast chat messages from muted users', async () => { const user = await uw.test.createUser(); + const token = await uw.test.createTestSessionToken(user); + await uw.acl.allow(user, ['admin']); const mutedUser = await uw.test.createUser(); - const stub = sandbox.stub(uw.chat, 'isMuted'); - stub.withArgs(sinon.match({ id: user.id })).resolves(false); - stub.withArgs(sinon.match({ id: mutedUser.id })).resolves(true); + await supertest(uw.server) + .post(`/api/users/${mutedUser.id}/mute`) + .set('Cookie', `uwsession=${token}`) + .send({ time: 60 /* seconds */ }) + .expect(200); const ws = await uw.test.connectToWebSocketAs(user); const mutedWs = await uw.test.connectToWebSocketAs(mutedUser); @@ -51,9 +75,9 @@ describe('Chat', () => { ws.send(JSON.stringify({ command: 'sendChat', data: 'unmuted' })); mutedWs.send(JSON.stringify({ command: 'sendChat', data: 'muted' })); - await delay(1500); - - assert(receivedMessages.some((message) => message.command === 'chatMessage' && message.data.userID === user.id)); - assert(!receivedMessages.some((message) => message.command === 'chatMessage' && message.data.userID === mutedUser.id)); + await retryFor(1500, async () => { + assert(receivedMessages.some((message) => message.command === 'chatMessage' && message.data.userID === user.id)); + assert(!receivedMessages.some((message) => message.command === 'chatMessage' && message.data.userID === mutedUser.id)); + }); }); });