The cache now tracks every file in the data dir (mtime_ns + size) in
.cache/manifest.json. On load, a directory scan is compared against the
manifest:
- changed/added files are re-read and merged into the parquet panels
(one read + one concat + one write per touched panel; new values
win where present, old values kept where the new file is short)
- removed files drop their symbols (and names)
- an up-to-date cache is a ~30 ms memo hit
Measured on the real 4k-symbol set: full build 54 s, refresh of
5 modified + 1 added + 1 removed files 3.4 s. No scan TTL (a scan is
a few ms); a previous 5 s scan cache masked data updates.
Tests: tests/test_data.py (11 checks) added as step 1 of run_tests.sh.
30 lines
874 B
Bash
Executable File
30 lines
874 B
Bash
Executable File
#!/usr/bin/env bash
|
|
# Full test suite: app-level (Streamlit AppTest) + real-browser e2e (Playwright).
|
|
#
|
|
# Usage: ./run_tests.sh
|
|
# The browser e2e part needs the server running (./run.sh, port 8599);
|
|
# it is skipped automatically if the server is down.
|
|
set -uo pipefail
|
|
cd "$(dirname "$0")"
|
|
|
|
fail=0
|
|
|
|
echo "=== 1/3 data cache tests (incremental refresh) ==="
|
|
.venv/bin/python tests/test_data.py || fail=1
|
|
echo
|
|
|
|
echo "=== 2/3 app tests (AppTest, no browser) ==="
|
|
.venv/bin/python tests/test_app.py || fail=1
|
|
echo
|
|
|
|
echo "=== 3/3 browser e2e (Playwright, needs the server) ==="
|
|
if curl -s -m 3 -o /dev/null http://localhost:8599/healthz; then
|
|
.venv/bin/python tests/test_e2e_browser.py || fail=1
|
|
else
|
|
echo "server not reachable on :8599 — skipping e2e (start it with ./run.sh)"
|
|
fi
|
|
echo
|
|
|
|
[ $fail -eq 0 ] && echo "ALL TESTS PASSED" || echo "TESTS FAILED"
|
|
exit $fail
|