qwen_2.5_model / dashboard /src /utils /scrollDecision.test.ts
Muhammad Noman
Deploy OpenWA to Hugging Face Spaces
46252cd
Raw
History Blame Contribute Delete
1.42 kB
import { test } from 'node:test';
import assert from 'node:assert/strict';
import { decideScroll, type ScrollGeometry } from './scrollDecision.ts';
const at = (scrollTop: number, scrollHeight = 1000, clientHeight = 500): ScrollGeometry => ({
scrollTop, scrollHeight, clientHeight,
});
test('outgoing message always scrolls to bottom', () => {
// User scrolled way up (0).
assert.equal(decideScroll('outgoing', at(0)), 'bottom');
});
test('incoming message scrolls to bottom when user is near bottom (default 100px)', () => {
// gap = scrollHeight - scrollTop - clientHeight = 1000 - 450 - 500 = 50 < 100
assert.equal(decideScroll('incoming', at(450)), 'bottom');
});
test('incoming message preserves position when user is far from bottom', () => {
// gap = 1000 - 100 - 500 = 400 > 100
assert.equal(decideScroll('incoming', at(100)), 'preserve');
});
test('incoming message at exact bottom scrolls (gap = 0)', () => {
// gap = 1000 - 500 - 500 = 0 < 100
assert.equal(decideScroll('incoming', at(500)), 'bottom');
});
test('incoming message exactly at threshold preserves (gap = 100 is NOT < 100)', () => {
// gap = 1000 - 400 - 500 = 100, strictly < 100 is false
assert.equal(decideScroll('incoming', at(400)), 'preserve');
});
test('custom threshold overrides default', () => {
// gap = 200, threshold 300 → bottom
assert.equal(decideScroll('incoming', at(300), 300), 'bottom');
});