| """Defaults shown in the Streamlit UI must point at files that actually exist |
| in the deployed image. The HF container does not seed `data/raw/eeg.fif` |
| unless we explicitly do so in the Dockerfile, so the EEG tab default must |
| either be a fixture file (always present) or be seeded server-side. |
| """ |
| from __future__ import annotations |
|
|
| from pathlib import Path |
| import re |
|
|
| REPO_ROOT = Path(__file__).resolve().parents[2] |
| APP_PY = REPO_ROOT / "src" / "frontend" / "app.py" |
|
|
|
|
| def _eeg_default_path() -> str: |
| """Extract the default value passed to the EEG `input_path` text_input. |
| |
| The line looks like: |
| eeg_in = st.text_input("Input FIF/EDF path", "tests/fixtures/eeg_sample.fif", key="eeg_in") |
| We pull the second positional arg (the default value). |
| """ |
| text = APP_PY.read_text() |
| match = re.search( |
| r'st\.text_input\(\s*"Input FIF/EDF path"\s*,\s*"([^"]+)"', |
| text, |
| ) |
| assert match is not None, "could not locate EEG text_input default in app.py" |
| return match.group(1) |
|
|
|
|
| def test_eeg_default_path_points_at_existing_file() -> None: |
| default = _eeg_default_path() |
| abs_path = REPO_ROOT / default |
| assert abs_path.exists(), ( |
| f"EEG default path {default!r} resolves to {abs_path} which does " |
| f"not exist on disk. The HF container does not seed this path " |
| f"either, so users get an HTTP 404 the moment they click Run." |
| ) |
|
|
|
|
| def test_eeg_default_path_is_eeg_sample_fixture() -> None: |
| """Pin the exact fix: default must be the canonical fixture so both |
| local dev and the deployed image agree.""" |
| assert _eeg_default_path() == "tests/fixtures/eeg_sample.fif" |
|
|