import { test } from 'node:test'; import assert from 'node:assert/strict'; import type { Room } from 'matrix-js-sdk'; import { isRingableRoom } from './callRing'; const fakeRoom = (opts: { callRoom?: boolean; joinRule?: string; spaceParent?: boolean }): Room => ({ isCallRoom: () => !!opts.callRoom, getJoinRule: () => opts.joinRule ?? 'invite', getLiveTimeline: () => ({ getState: () => ({ getStateEvents: () => (opts.spaceParent ? [{}] : []) }), }), }) as unknown as Room; test('voice rooms never ring or show "missed call", even as DMs', () => { assert.equal(isRingableRoom(fakeRoom({ callRoom: true }), false), false); assert.equal(isRingableRoom(fakeRoom({ callRoom: true }), true), false); }); test('DMs and invite-only groups outside a space ring', () => { assert.equal(isRingableRoom(fakeRoom({ joinRule: 'public' }), true), true); assert.equal(isRingableRoom(fakeRoom({ joinRule: 'invite' }), false), true); }); test('space channels, public and restricted rooms do not ring', () => { assert.equal(isRingableRoom(fakeRoom({ joinRule: 'invite', spaceParent: true }), false), false); assert.equal(isRingableRoom(fakeRoom({ joinRule: 'public' }), false), false); assert.equal(isRingableRoom(fakeRoom({ joinRule: 'restricted' }), false), false); });