chore: update websocket test

This commit is contained in:
Lucas Nogueira
2026-09-23 06:08:43 -03:00
parent 4a94356386
commit 55f9645aa2
+23 -17
View File
@@ -26,11 +26,13 @@ describePlugin('websocket', () => {
const messages = await tauri(async (api, url) => { const messages = await tauri(async (api, url) => {
const ws = await api.websocket.connect(url) const ws = await api.websocket.connect(url)
const received: Message[] = [] const received: Message[] = []
await new Promise<void>((resolve, reject) => { // a copy taken once the echoes are in: the close acknowledgement that
// `disconnect` triggers may arrive before this function returns
const echoes = await new Promise<Message[]>((resolve, reject) => {
setTimeout(() => reject(new Error('echo not received')), 5000) setTimeout(() => reject(new Error('echo not received')), 5000)
ws.addListener((message) => { ws.addListener((message) => {
received.push(message) received.push(message)
if (received.length === 3) resolve() if (received.length === 3) resolve(received.slice())
}) })
ws.send('hello') ws.send('hello')
.then(() => ws.send([1, 2, 3])) .then(() => ws.send([1, 2, 3]))
@@ -38,7 +40,7 @@ describePlugin('websocket', () => {
.catch(reject) .catch(reject)
}) })
await ws.disconnect() await ws.disconnect()
return received return echoes
}, WEBSOCKET_FIXTURE_URL) }, WEBSOCKET_FIXTURE_URL)
expect(messages).toEqual([ expect(messages).toEqual([
{ type: 'Text', data: 'hello' }, { type: 'Text', data: 'hello' },
@@ -84,21 +86,25 @@ describePlugin('websocket', () => {
let removed = 0 let removed = 0
let kept = 0 let kept = 0
const remove = ws.addListener(() => removed++) const remove = ws.addListener(() => removed++)
await new Promise<void>((resolve, reject) => { // counted once both echoes are in, before `disconnect`'s close
setTimeout(() => reject(new Error('echoes not received')), 5000) // acknowledgement can reach the listener still attached
ws.addListener(() => { const counts = await new Promise<{ removed: number; kept: number }>(
kept++ (resolve, reject) => {
if (kept === 1) { setTimeout(() => reject(new Error('echoes not received')), 5000)
remove() ws.addListener(() => {
ws.send('second').catch(reject) kept++
} else { if (kept === 1) {
resolve() remove()
} ws.send('second').catch(reject)
}) } else {
ws.send('first').catch(reject) resolve({ removed, kept })
}) }
})
ws.send('first').catch(reject)
}
)
await ws.disconnect() await ws.disconnect()
return { removed, kept } return counts
}, WEBSOCKET_FIXTURE_URL) }, WEBSOCKET_FIXTURE_URL)
expect(counts).toEqual({ removed: 1, kept: 2 }) expect(counts).toEqual({ removed: 1, kept: 2 })
}) })