30 lines
1.3 KiB
TypeScript
30 lines
1.3 KiB
TypeScript
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);
|
||
|
|
});
|