Expands pure-logic coverage (harness: tsx + node:test): - utils/time (21): date/time formatters — exact values where timezone-independent, structure/regex where locale/tz-sensitive (written via subagent). - utils/matrix (13): pure id/mxc helpers (isUserId/isRoomId/isRoomAlias/ getMxIdLocalPart/getMxIdServer/isServerName + room-version gates). (subagent) - utils/mimeTypes (7): getBlobSafeMimeType allowlist+remap, safeFile rewrap, mimeTypeToExt, getFileNameExt/WithoutExt edge cases. - message-search filters (6): filterGroupsByMsgType (union, empty-group drop, non-string msgtype) + filterGroupsByPinned (disabled passthrough, pinned-only). All assertions verified against actual runtime behavior. Suite now 74 tests. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
133 lines
5.1 KiB
TypeScript
133 lines
5.1 KiB
TypeScript
import { test } from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import {
|
|
isServerName,
|
|
getMxIdServer,
|
|
getMxIdLocalPart,
|
|
isUserId,
|
|
isRoomId,
|
|
isRoomAlias,
|
|
knockSupported,
|
|
restrictedSupported,
|
|
knockRestrictedSupported,
|
|
creatorsSupported,
|
|
} from './matrix';
|
|
|
|
test('isServerName matches domain-like strings', () => {
|
|
assert.equal(isServerName('matrix.org'), true);
|
|
assert.equal(isServerName('a.b.example.com'), true);
|
|
assert.equal(isServerName('my-server.io'), true);
|
|
// The regex looks for a domain substring anywhere, so embedded domains match.
|
|
assert.equal(isServerName('user@matrix.org'), true);
|
|
assert.equal(isServerName('matrix.org:8448'), true);
|
|
});
|
|
|
|
test('isServerName rejects strings without a dotted TLD', () => {
|
|
assert.equal(isServerName('localhost'), false);
|
|
assert.equal(isServerName(''), false);
|
|
assert.equal(isServerName('nodot'), false);
|
|
// TLD must be at least two letters.
|
|
assert.equal(isServerName('a.b'), false);
|
|
// Numeric "TLD" is not matched by the [a-zA-Z]{2,} part.
|
|
assert.equal(isServerName('127.0.0.1'), false);
|
|
});
|
|
|
|
test('getMxIdServer extracts the server portion after the colon', () => {
|
|
assert.equal(getMxIdServer('@alice:matrix.org'), 'matrix.org');
|
|
assert.equal(getMxIdServer('#room:example.com'), 'example.com');
|
|
assert.equal(getMxIdServer('+group:server.io'), 'server.io');
|
|
assert.equal(getMxIdServer('$event:host.net'), 'host.net');
|
|
});
|
|
|
|
test('getMxIdServer returns undefined for ids that do not match', () => {
|
|
// '!' is not an accepted sigil in the matcher.
|
|
assert.equal(getMxIdServer('!roomid:matrix.org'), undefined);
|
|
assert.equal(getMxIdServer('alice:matrix.org'), undefined);
|
|
assert.equal(getMxIdServer('@alice'), undefined);
|
|
assert.equal(getMxIdServer(''), undefined);
|
|
// A space in the local part breaks the [^\s:]+ group.
|
|
assert.equal(getMxIdServer('@al ice:matrix.org'), undefined);
|
|
});
|
|
|
|
test('getMxIdLocalPart extracts the local part between sigil and colon', () => {
|
|
assert.equal(getMxIdLocalPart('@alice:matrix.org'), 'alice');
|
|
assert.equal(getMxIdLocalPart('#general:example.com'), 'general');
|
|
assert.equal(getMxIdLocalPart('+group:server.io'), 'group');
|
|
assert.equal(getMxIdLocalPart('$event:host.net'), 'event');
|
|
});
|
|
|
|
test('getMxIdLocalPart returns undefined for non-matching ids', () => {
|
|
assert.equal(getMxIdLocalPart('!roomid:matrix.org'), undefined);
|
|
assert.equal(getMxIdLocalPart('alice'), undefined);
|
|
assert.equal(getMxIdLocalPart('@alice'), undefined);
|
|
assert.equal(getMxIdLocalPart(''), undefined);
|
|
});
|
|
|
|
test('isUserId requires a valid mxid starting with @', () => {
|
|
assert.equal(isUserId('@alice:matrix.org'), true);
|
|
assert.equal(isUserId('@bob:example.com'), true);
|
|
// Valid mxid shape but wrong sigil.
|
|
assert.equal(isUserId('#room:matrix.org'), false);
|
|
assert.equal(isUserId('+group:matrix.org'), false);
|
|
// Starts with @ but has no server (invalid mxid).
|
|
assert.equal(isUserId('@alice'), false);
|
|
assert.equal(isUserId('alice:matrix.org'), false);
|
|
assert.equal(isUserId(''), false);
|
|
});
|
|
|
|
test('isRoomId only checks the leading ! sigil', () => {
|
|
assert.equal(isRoomId('!abc:matrix.org'), true);
|
|
// No validity check is performed, so a bare '!' passes.
|
|
assert.equal(isRoomId('!'), true);
|
|
assert.equal(isRoomId('!anything-at-all'), true);
|
|
assert.equal(isRoomId('@alice:matrix.org'), false);
|
|
assert.equal(isRoomId('#room:matrix.org'), false);
|
|
assert.equal(isRoomId(''), false);
|
|
});
|
|
|
|
test('isRoomAlias requires a valid mxid starting with #', () => {
|
|
assert.equal(isRoomAlias('#general:matrix.org'), true);
|
|
assert.equal(isRoomAlias('#room:example.com'), true);
|
|
// Wrong sigils.
|
|
assert.equal(isRoomAlias('@alice:matrix.org'), false);
|
|
assert.equal(isRoomAlias('!room:matrix.org'), false);
|
|
// Starts with # but missing server part.
|
|
assert.equal(isRoomAlias('#general'), false);
|
|
assert.equal(isRoomAlias(''), false);
|
|
});
|
|
|
|
test('knockSupported gates room versions 1-6 out', () => {
|
|
['1', '2', '3', '4', '5', '6'].forEach((v) => {
|
|
assert.equal(knockSupported(v), false, `version ${v}`);
|
|
});
|
|
assert.equal(knockSupported('7'), true);
|
|
assert.equal(knockSupported('8'), true);
|
|
assert.equal(knockSupported('10'), true);
|
|
// Unknown / non-numeric versions are treated as supported.
|
|
assert.equal(knockSupported('org.matrix.msc'), true);
|
|
});
|
|
|
|
test('restrictedSupported gates room versions 1-7 out', () => {
|
|
['1', '2', '3', '4', '5', '6', '7'].forEach((v) => {
|
|
assert.equal(restrictedSupported(v), false, `version ${v}`);
|
|
});
|
|
assert.equal(restrictedSupported('8'), true);
|
|
assert.equal(restrictedSupported('9'), true);
|
|
});
|
|
|
|
test('knockRestrictedSupported gates room versions 1-9 out', () => {
|
|
['1', '2', '3', '4', '5', '6', '7', '8', '9'].forEach((v) => {
|
|
assert.equal(knockRestrictedSupported(v), false, `version ${v}`);
|
|
});
|
|
assert.equal(knockRestrictedSupported('10'), true);
|
|
assert.equal(knockRestrictedSupported('11'), true);
|
|
});
|
|
|
|
test('creatorsSupported gates room versions 1-11 out', () => {
|
|
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'].forEach((v) => {
|
|
assert.equal(creatorsSupported(v), false, `version ${v}`);
|
|
});
|
|
assert.equal(creatorsSupported('12'), true);
|
|
assert.equal(creatorsSupported('13'), true);
|
|
});
|