fix: contain malformed metadata and stale discovery
This commit is contained in:
@@ -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, {
|
||||
|
||||
Reference in New Issue
Block a user