fix: contain malformed metadata and stale discovery

This commit is contained in:
2026-08-20 01:44:23 +00:00
parent 3b5e2acb75
commit 7d484a3998
10 changed files with 276 additions and 13 deletions
+27
View File
@@ -194,6 +194,33 @@ test('tenant and synthetic namespaces stay distinct for reserved and ambiguous I
assert.ok([...model.rowByKey.keys()].every((key) => !/\s/.test(key)));
});
test('malformed Unicode metadata builds deterministically and remains searchable and visible', async () => {
const fixture = {
sites: [{ id: 'site-\ud800', name: 'Site \ud83d\udcf7 \udc00' }],
groups: [{ id: 'group-\udc00', name: 'Group \ud83d\udcf7 \ud800', parentId: 'site-\ud800' }],
devices: [{
id: 'camera-valid', name: 'Lobby \ud800 camera', siteId: 'site-\ud800',
deviceGroupId: 'group-\udc00', address: 'Floor \udc00',
}],
};
const first = buildDeviceTree(fixture);
const second = buildDeviceTree(fixture);
assert.equal(first.cameraCount, 1);
assert.deepEqual([...first.rowByKey.keys()], [...second.rowByKey.keys()]);
assert.doesNotMatch([...first.rowByKey.keys()].join(''), /[\ud800-\udfff]/u);
const camera = [...first.cameraByKey.values()][0];
assert.equal(camera.name, 'Lobby \ufffd camera');
assert.equal(camera.site.name, 'Site \ud83d\udcf7 \ufffd');
assert.equal(camera.group.name, 'Group \ud83d\udcf7 \ufffd');
assert.equal(camera.source.address, 'Floor \ufffd');
assert.doesNotMatch(JSON.stringify(camera.source), /[\ud800-\udfff]/u);
assert.match(camera.searchCorpus, /floor \ufffd/);
const result = await createSearchRunner().search(first, 'lobby \ufffd');
assert.deepEqual([...result.cameraKeys], [camera.key]);
});
test('virtual window clamps an obsolete scroll offset after rows shrink', () => {
const rows = [{ key: 'only-row' }];
const window = calculateVirtualWindow(rows, {