Spaces:
Runtime error
Runtime error
| from __future__ import annotations | |
| import json | |
| import sys | |
| from pathlib import Path | |
| ROOT = Path(__file__).resolve().parents[1] | |
| SRC = ROOT / 'src' | |
| for candidate in (ROOT, SRC): | |
| if str(candidate) not in sys.path: | |
| sys.path.insert(0, str(candidate)) | |
| from app_kit.config import load_app_config | |
| from app_kit.storage import SQLiteStore | |
| from apps._base import _process_uploaded_files | |
| from apps.p4_food_waste.app import create_project_spec | |
| def _prepare_env(monkeypatch, tmp_path: Path) -> None: | |
| monkeypatch.setenv('APP_ROOT_DIR', str(ROOT)) | |
| monkeypatch.setenv('ARTIFACT_DIR', str(tmp_path / 'artifacts')) | |
| monkeypatch.setenv('SQLITE_PATH', str(tmp_path / 'sqlite' / 'p4.sqlite3')) | |
| def test_upload_processing_creates_trace_artifact_and_record(tmp_path, monkeypatch) -> None: | |
| _prepare_env(monkeypatch, tmp_path) | |
| spec = create_project_spec() | |
| config = load_app_config(spec.key, data_subdir=spec.data_subdir) | |
| store = SQLiteStore(config.sqlite_path, config.artifact_dir) | |
| note_path = tmp_path / 'note.txt' | |
| receipt_path = tmp_path / 'receipt.txt' | |
| note_path.write_text( | |
| 'Weekly household notes with leafy greens and fruit waste. Several leftovers were forgotten.', | |
| encoding='utf-8', | |
| ) | |
| receipt_path.write_text( | |
| 'Receipt summary: leafy greens, fruit, bread\nItem list: groceries and leftovers.', | |
| encoding='utf-8', | |
| ) | |
| try: | |
| output, status = _process_uploaded_files([str(note_path), str(receipt_path)], spec, store, config) | |
| records = store.list_records(spec.key) | |
| finally: | |
| store.close() | |
| assert status == '✅ Processed 2 document(s) successfully.' | |
| assert output | |
| assert not output.startswith('❌') | |
| assert len(records) == 1 | |
| record = records[0] | |
| assert record['project'] == spec.key | |
| assert record['pack_id'].startswith('upload_') | |
| payload = json.loads(record['json_blob']) | |
| assert payload['waste_category'] | |
| assert payload['receipt_table'] | |
| trace_paths = sorted((Path(config.artifact_dir) / 'traces').glob('app-upload-*.json')) | |
| assert trace_paths, 'expected an app-upload trace artifact to be written' | |
| trace = json.loads(trace_paths[-1].read_text(encoding='utf-8')) | |
| assert trace['kind'] == 'app-upload' | |
| assert trace['project'] == spec.key | |
| assert trace['file_count'] == 2 | |
| assert trace['pack_id'].startswith('upload_') | |