From a33646e59f51075de22dea2b754d1569ef493ede Mon Sep 17 00:00:00 2001 From: Gabe Kangas Date: Thu, 11 Nov 2021 13:17:00 -0800 Subject: [PATCH] Add test to verify websocket events come through for changing message visibility --- test/automated/api/chat.test.js | 4 +- test/automated/api/chatmoderation.test.js | 75 ++++++++++++++++------- test/automated/api/lib/chat.js | 24 +++++++- 3 files changed, 77 insertions(+), 26 deletions(-) diff --git a/test/automated/api/chat.test.js b/test/automated/api/chat.test.js index 818e1366e..a4e1cf22f 100644 --- a/test/automated/api/chat.test.js +++ b/test/automated/api/chat.test.js @@ -27,9 +27,9 @@ test('can fetch chat messages', async (done) => { .auth('admin', 'abc123') .expect(200); - const expectedBody = `${testMessage.body}` + const expectedBody = `${testMessage.body}`; const message = res.body.filter(function (msg) { - return msg.body === expectedBody + return msg.body === expectedBody; })[0]; expect(message.body).toBe(expectedBody); diff --git a/test/automated/api/chatmoderation.test.js b/test/automated/api/chatmoderation.test.js index f50fc9727..1f01e1c99 100644 --- a/test/automated/api/chatmoderation.test.js +++ b/test/automated/api/chatmoderation.test.js @@ -1,42 +1,71 @@ const { test } = require('@jest/globals'); var request = require('supertest'); request = request('http://127.0.0.1:8080'); +const WebSocket = require('ws'); const registerChat = require('./lib/chat').registerChat; const sendChatMessage = require('./lib/chat').sendChatMessage; +const listenForEvent = require('./lib/chat').listenForEvent; const testVisibilityMessage = { - body: "message " + Math.floor(Math.random() * 100), - type: 'CHAT', + body: 'message ' + Math.floor(Math.random() * 100), + type: 'CHAT', }; test('can send a chat message', async (done) => { - const registration = await registerChat(); - const accessToken = registration.accessToken; - - sendChatMessage(testVisibilityMessage, accessToken, done); - }); + const registration = await registerChat(); + const accessToken = registration.accessToken; + + sendChatMessage(testVisibilityMessage, accessToken, done); +}); test('verify we can make API call to mark message as hidden', async (done) => { - const res = await request.get('/api/admin/chat/messages').auth('admin', 'abc123').expect(200) + const registration = await registerChat(); + const accessToken = registration.accessToken; + const ws = new WebSocket( + `ws://localhost:8080/ws?accessToken=${accessToken}`, + { + origin: 'http://localhost:8080', + } + ); - const message = res.body[0]; - const messageId = message.id; - await request.post('/api/admin/chat/updatemessagevisibility') - .auth('admin', 'abc123') - .send({ "idArray": [messageId], "visible": false }).expect(200); - done(); + // Verify the visibility change comes through the websocket + ws.on('message', function incoming(message) { + const messages = message.split('\n'); + messages.forEach(function (message) { + const event = JSON.parse(message); + + if (event.type === 'VISIBILITY-UPDATE') { + done(); + ws.close(); + } + }); + }); + + const res = await request + .get('/api/admin/chat/messages') + .auth('admin', 'abc123') + .expect(200); + + const message = res.body[0]; + const messageId = message.id; + await request + .post('/api/admin/chat/updatemessagevisibility') + .auth('admin', 'abc123') + .send({ idArray: [messageId], visible: false }) + .expect(200); }); test('verify message has become hidden', async (done) => { - const res = await request.get('/api/admin/chat/messages') - .expect(200) - .auth('admin', 'abc123') + const res = await request + .get('/api/admin/chat/messages') + .expect(200) + .auth('admin', 'abc123'); - const message = res.body.filter(obj => { - return obj.body === `${testVisibilityMessage.body}`; - }); - expect(message.length).toBe(1); - expect(message[0].hiddenAt).toBeTruthy(); - done(); + const message = res.body.filter((obj) => { + return obj.body === `${testVisibilityMessage.body}`; + }); + expect(message.length).toBe(1); + expect(message[0].hiddenAt).toBeTruthy(); + done(); }); diff --git a/test/automated/api/lib/chat.js b/test/automated/api/lib/chat.js index 3ef243c82..e5c47e121 100644 --- a/test/automated/api/lib/chat.js +++ b/test/automated/api/lib/chat.js @@ -29,5 +29,27 @@ function sendChatMessage(message, accessToken, done) { ws.on('open', onOpen); } +async function listenForEvent(name, accessToken, done) { + const ws = new WebSocket( + `ws://localhost:8080/ws?accessToken=${accessToken}`, + { + origin: 'http://localhost:8080', + } + ); + + ws.on('message', function incoming(message) { + const messages = message.split('\n'); + messages.forEach(function (message) { + const event = JSON.parse(message); + + if (event.type === name) { + done(); + ws.close(); + } + }); + }); +} + module.exports.sendChatMessage = sendChatMessage; -module.exports.registerChat = registerChat; \ No newline at end of file +module.exports.registerChat = registerChat; +module.exports.listenForEvent = listenForEvent;