From b2e29eaa950590bcb69c8e6f8eac301b70e8ad8a Mon Sep 17 00:00:00 2001 From: Schluffe Date: Sun, 13 Sep 2026 00:57:59 +0200 Subject: [PATCH] test more --- server/client.test.ts | 46 +++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/server/client.test.ts b/server/client.test.ts index 1a972c6..2dcefc3 100644 --- a/server/client.test.ts +++ b/server/client.test.ts @@ -3,7 +3,7 @@ import { assertEquals } from "jsr:@std/assert"; const url = "ws://0.0.0.0:6969"; -function connect(): Promise { +function connect(url: string): Promise { return new Promise((resolve, reject) => { const socket = new WebSocket(url); socket.onopen = () => resolve(socket); @@ -26,34 +26,46 @@ function nextMessage(socket: WebSocket): Promise { }); } -function closeAndWait(socket: WebSocket): Promise { +function close(socket: WebSocket): Promise { return new Promise((resolve) => { - if (socket.readyState === WebSocket.CLOSED) return resolve(); + if (socket.readyState === WebSocket.CLOSED) { + return resolve(); + } socket.onclose = () => resolve(); socket.close(); }); } -Deno.test("broadcasts a message from one client to another", async () => { - const a = await connect(); // 1 - const b = await connect(); // 2 +Deno.test("broadcasts a message on connect to all clients", async () => { + const s1 = await connect(url); + const s2 = await connect(url); + assertEquals(await nextMessage(s1), "2 has joined!"); - const received = await nextMessage(b); - assertEquals(received, "2 has joined!"); + const s3 = connect(url); + Promise.all([nextMessage(s1), nextMessage(s2)]).then((messages) => { + messages.forEach((message) => { + assertEquals(message, "3 has joined!"); + }); + }); - await closeAndWait(a); - await closeAndWait(b); + await close(s1); + await close(s2); + await close(await s3); }); Deno.test("removes a client from broadcast after it disconnects", async () => { - // test are executed in a row so the ID will just increment - const a = await connect(); // 3 - const b = await connect(); // 4 + const s4 = await connect(url); + const s5 = await connect(url); + const s6 = await connect(url); - await closeAndWait(b); + await close(s5); - const msg = await nextMessage(a); - assertEquals(msg, "4 has left!"); + Promise.all([nextMessage(s4), nextMessage(s6)]).then((messages) => { + messages.forEach((message) => { + assertEquals(message, "5 has left!"); + }); + }); - await closeAndWait(a); + await close(s4); + await close(s6); });