c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 1 | import assert from 'node:assert/strict'; |
c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 2 | import { test } from 'node:test'; |
c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 3 | import { parseMessageSound, shouldPlaySound, SOUND_THROTTLE_MS } from '../src/lib/message-sound-model.ts'; |
c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 4 | |
c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 5 | test('parse falls back to defaults', () => { |
c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 6 | assert.deepEqual(parseMessageSound(null), { mode: 'mentions_dms', sound: null }); |
c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 7 | assert.deepEqual(parseMessageSound({ mode: 'bogus', sound: 'http://x' }), { mode: 'mentions_dms', sound: null }); |
c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 8 | assert.deepEqual(parseMessageSound({ mode: 'all', sound: 'mxc://h/a' }), { mode: 'all', sound: 'mxc://h/a' }); |
c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 9 | }); |
c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 10 | |
c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 11 | test('mode decides which arrivals play', () => { |
c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 12 | const room = { direct: false }; |
c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 13 | const dm = { direct: true }; |
c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 14 | const plain = { mention: false }; |
c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 15 | assert.equal(shouldPlaySound('off', dm, { mention: true }, 0, 10_000), false); |
c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 16 | assert.equal(shouldPlaySound('all', room, plain, 0, 10_000), true); |
c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 17 | assert.equal(shouldPlaySound('mentions_dms', room, plain, 0, 10_000), false); |
c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 18 | assert.equal(shouldPlaySound('mentions_dms', room, { mention: true }, 0, 10_000), true); |
c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 19 | assert.equal(shouldPlaySound('mentions_dms', dm, plain, 0, 10_000), true); |
c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 20 | }); |
c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 21 | |
c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 22 | test('throttles repeated plays', () => { |
c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 23 | const room = { direct: true }; |
c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 24 | assert.equal(shouldPlaySound('all', room, { mention: false }, 10_000, 10_000 + SOUND_THROTTLE_MS - 1), false); |
c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 25 | assert.equal(shouldPlaySound('all', room, { mention: false }, 10_000, 10_000 + SOUND_THROTTLE_MS), true); |
c8d898e6eb59 | atagen | 2026-10-27 03:55 UTC | 26 | }); |