Spaces:
Sleeping
Sleeping
| from __future__ import annotations | |
| import ast | |
| from pathlib import Path | |
| REPO_ROOT = Path(__file__).resolve().parents[1] | |
| APP_PATH = REPO_ROOT / "presidio_streamlit.py" | |
| DOCKERFILE_PATH = REPO_ROOT / "Dockerfile" | |
| THIS_TEST_PATH = REPO_ROOT / "tests" / "test_export_download_ux_implementation.py" | |
| def read_text(path: Path) -> str: | |
| return path.read_text(encoding="utf-8") | |
| def normalise(text: str) -> str: | |
| return " ".join(text.lower().split()) | |
| def assert_contains(text: str, term: str) -> None: | |
| assert normalise(term) in normalise(text), f"Expected to find {term!r}" | |
| def test_direct_app_source_has_new_export_title(): | |
| source = read_text(APP_PATH) | |
| assert_contains(source, 'st.subheader("3. Exporteer resultaat")') | |
| assert 'st.subheader("5. Download opgeschoonde bestanden")' not in source | |
| def test_export_groups_exist_in_direct_app_source(): | |
| source = read_text(APP_PATH) | |
| for term in [ | |
| "Document downloaden", | |
| "Scrub Key", | |
| "Audit en technische bestanden", | |
| ]: | |
| assert_contains(source, term) | |
| def test_scrub_key_warning_is_present_in_direct_app_source(): | |
| source = read_text(APP_PATH) | |
| assert_contains(source, "De Scrub Key kan originele waarden herstellen. Bewaar dit bestand veilig.") | |
| assert_contains(source, "Download Scrub Key (.json)") | |
| def test_existing_download_concepts_remain_available(): | |
| source = read_text(APP_PATH) | |
| for term in [ | |
| "Download opgeschoonde tekst", | |
| "Download opgeschoond Word-bestand", | |
| "Download opgeschoonde PDF", | |
| "Download vervangtabel", | |
| "Download scrubrapport", | |
| "Download Scrub Key", | |
| ]: | |
| assert_contains(source, term) | |
| def test_existing_filenames_and_mime_types_remain_present(): | |
| source = read_text(APP_PATH) | |
| for term in [ | |
| "opgeschoonde_tekst.txt", | |
| "opgeschoonde_tekst.docx", | |
| "opgeschoond_", | |
| "opgeschoonde_tekst.pdf", | |
| "vervangtabel.csv", | |
| "scrubrapport.txt", | |
| "solidprivacy_scrub_key.json", | |
| "text/plain", | |
| "text/csv", | |
| "application/pdf", | |
| "application/json", | |
| "application/vnd.openxmlformats-officedocument.wordprocessingml.document", | |
| ]: | |
| assert_contains(source, term) | |
| def test_dockerfile_no_longer_runs_export_startup_patch(): | |
| dockerfile = read_text(DOCKERFILE_PATH) | |
| assert "fix_streamlit_export_download_ux.py" not in dockerfile | |
| assert ( | |
| "python fix_streamlit_nested_expanders.py && python fix_streamlit_pdf_text_reinsert.py" | |
| in dockerfile | |
| ) | |
| def test_no_bundle_or_zip_export_was_introduced(): | |
| source = normalise(read_text(APP_PATH)) | |
| for forbidden_term in [ | |
| "exportpakket.zip", | |
| "download alles", | |
| "download gekozen bestanden", | |
| "bundled package", | |
| "combined export", | |
| ]: | |
| assert forbidden_term not in source | |
| def test_docx_hygiene_audit_remains_available_outside_technical_expander(): | |
| source = read_text(APP_PATH) | |
| assert "render_docx_hygiene_audit_panel(docx_bytes, source_label=docx_filename)" in source | |
| assert_contains(source, "Audit en technische bestanden") | |
| def test_implementation_test_does_not_import_streamlit_or_runtime_app(): | |
| tree = ast.parse(read_text(THIS_TEST_PATH)) | |
| imported_roots = set() | |
| for node in ast.walk(tree): | |
| if isinstance(node, ast.Import): | |
| imported_roots.update(alias.name.split(".")[0] for alias in node.names) | |
| elif isinstance(node, ast.ImportFrom) and node.module: | |
| imported_roots.add(node.module.split(".")[0]) | |
| assert "streamlit" not in imported_roots | |
| assert "presidio_streamlit" not in imported_roots | |