lllin000_PaperForge/fixtures/MANIFEST.json
Research Assistant 2068109d2b feat(52-golden-datasets-cli-contracts): create golden dataset fixtures
- 10 Zotero JSON variants in fixtures/zotero/ (orthopedic, sports_medicine,
  multi_attachment, no_pdf, absolute_paths, storage_prefix, bare_relative,
  empty, malformed, missing_keys, cjk_content)
- 4 minimal PDFs generated via pymupdf (blank, two_page, with_figures, CJK)
- 6 mock PaddleOCR response fixtures (submit, poll_pending, poll_done,
  result, error, timeout) + extracted_fulltext.md + figure_map.json
- 4 expected output snapshots (paths_json, status_json,
  formal_note_frontmatter, index_json)
- MANIFEST.json tracks all 30+ fixtures with used_by, desc, generated
- VaultBuilder factory in fixtures/vault_builder.py with 3 levels
- All 5 FIX requirements (FIX-01 through FIX-05) satisfied
2026-05-08 23:23:01 +08:00

36 lines
6.3 KiB
JSON

{
"format_version": "1",
"generated_at": "2026-05-08T00:00:00+00:00",
"fixtures": [
{"path": "zotero/orthopedic.json", "desc": "Standard valid BBT JSON: single paper, domain=orthopedic, storage: path format", "used_by": ["tests/unit/test_bbt_parser.py", "tests/cli/", "tests/e2e/"], "generated": false},
{"path": "zotero/sports_medicine.json", "desc": "Second domain with CJK collection name (运动医学), storage: path, English title", "used_by": ["tests/unit/test_bbt_parser.py", "tests/cli/"], "generated": false},
{"path": "zotero/multi_attachment.json", "desc": "1 main PDF + 2 supplementary attachments (title=PDF filter test), key=FIXT0003", "used_by": ["tests/unit/test_bbt_parser.py", "tests/cli/", "tests/unit/test_pdf_resolver.py"], "generated": false},
{"path": "zotero/no_pdf.json", "desc": "Entry with zero attachments, verifies graceful handling of PDF-less papers", "used_by": ["tests/unit/test_bbt_parser.py", "tests/cli/"], "generated": false},
{"path": "zotero/absolute_paths.json", "desc": "Windows absolute D:\\Zotero\\storage path format for bbt_path_raw conversion test", "used_by": ["tests/unit/test_bbt_parser.py", "tests/unit/test_pdf_resolver.py"], "generated": false},
{"path": "zotero/storage_prefix.json", "desc": "storage: prefix path format, the most common modern BBT export format", "used_by": ["tests/unit/test_bbt_parser.py", "tests/cli/", "tests/e2e/"], "generated": false},
{"path": "zotero/bare_relative.json", "desc": "Bare KEY/file.pdf format, tests fallback resolver that prepends storage:", "used_by": ["tests/unit/test_bbt_parser.py", "tests/unit/test_pdf_resolver.py"], "generated": false},
{"path": "zotero/empty.json", "desc": "Empty export edge case: bare [] array, tests graceful empty-export handling", "used_by": ["tests/unit/test_bbt_parser.py", "tests/cli/"], "generated": false},
{"path": "zotero/malformed.json", "desc": "Broken JSON for error-path testing: raises JSONDecodeError", "used_by": ["tests/unit/test_bbt_parser.py"], "generated": false},
{"path": "zotero/missing_keys.json", "desc": "Entry missing title, DOI, date fields; uses citationKey instead of key", "used_by": ["tests/unit/test_bbt_parser.py"], "generated": false},
{"path": "zotero/cjk_content.json", "desc": "Full CJK content: Chinese title, authors, publicationTitle, CJK attachment filename", "used_by": ["tests/unit/test_bbt_parser.py", "tests/unit/test_pdf_resolver.py", "tests/e2e/"], "generated": false},
{"path": "pdf/generate_fixtures.py", "desc": "Programmatic PDF generator using pymupdf (fitz), run to regenerate PDFs", "used_by": ["tests/unit/test_pdf_resolver.py", "tests/e2e/"], "generated": false},
{"path": "pdf/blank.pdf", "desc": "Minimal single-page blank PDF for generic PDF fixture", "used_by": ["tests/unit/test_pdf_resolver.py", "tests/e2e/", "tests/journey/"], "generated": true},
{"path": "pdf/two_page.pdf", "desc": "Two-page PDF for multi-page resolution and OCR page count tests", "used_by": ["tests/unit/test_pdf_resolver.py", "tests/unit/test_ocr_state_machine.py"], "generated": true},
{"path": "pdf/with_figures.pdf", "desc": "PDF with placeholder rectangle figures for figure extraction tests", "used_by": ["tests/unit/test_figure_extraction.py", "tests/e2e/"], "generated": true},
{"path": "pdf/CJK_文件名.pdf", "desc": "PDF with CJK filename (中文文件名) for path resolution tests", "used_by": ["tests/unit/test_pdf_resolver.py", "tests/e2e/"], "generated": true},
{"path": "ocr/paddleocr_submit.json", "desc": "Mock POST /api/v2/ocr/jobs response: 202, job queued with mock-job-001", "used_by": ["tests/unit/test_ocr_state_machine.py", "tests/cli/"], "generated": false},
{"path": "ocr/paddleocr_poll_pending.json", "desc": "Mock GET job status: processing at 45% progress", "used_by": ["tests/unit/test_ocr_state_machine.py"], "generated": false},
{"path": "ocr/paddleocr_poll_done.json", "desc": "Mock GET job status: completed with result_url", "used_by": ["tests/unit/test_ocr_state_machine.py", "tests/cli/"], "generated": false},
{"path": "ocr/paddleocr_result.json", "desc": "Mock GET result_url response: 2 pages with markdown, 1 figure, 1 table", "used_by": ["tests/unit/test_ocr_state_machine.py", "tests/unit/test_figure_extraction.py"], "generated": false},
{"path": "ocr/paddleocr_error.json", "desc": "Mock API error response: 401 authentication_failed", "used_by": ["tests/unit/test_ocr_state_machine.py"], "generated": false},
{"path": "ocr/paddleocr_timeout.json", "desc": "Mock job stuck in queued state forever for timeout/chaos tests", "used_by": ["tests/chaos/"], "generated": false},
{"path": "ocr/extracted_fulltext.md", "desc": "Expected OCR fulltext output: 2 pages with page markers, sections, and table", "used_by": ["tests/unit/test_ocr_state_machine.py", "tests/cli/"], "generated": false},
{"path": "ocr/figure_map.json", "desc": "Expected figure-map.json output: 1 figure + 1 table with keys and captions", "used_by": ["tests/unit/test_figure_extraction.py"], "generated": false},
{"path": "ocr/mock_ocr_backend.py", "desc": "Standalone mock OCR backend module with 4 context managers (success, pending, error, timeout)", "used_by": ["tests/cli/conftest.py", "tests/unit/", "tests/e2e/", "tests/chaos/"], "generated": false},
{"path": "snapshots/paths_json/default_config.json", "desc": "Expected top-level JSON shape for 'paperforge paths --json'", "used_by": ["tests/cli/test_json_contracts.py"], "generated": false},
{"path": "snapshots/status_json/empty_vault.json", "desc": "Expected JSON shape for 'paperforge status --json' on empty vault", "used_by": ["tests/cli/test_json_contracts.py"], "generated": false},
{"path": "snapshots/formal_note_frontmatter/orthopedic_article.yaml", "desc": "Expected frontmatter YAML after sync with orthopedic.json fixture", "used_by": ["tests/cli/", "tests/e2e/", "tests/journey/"], "generated": false},
{"path": "snapshots/index_json/after_sync.json", "desc": "Expected canonical index entry after sync with orthopedic.json", "used_by": ["tests/cli/", "tests/e2e/", "tests/journey/"], "generated": false},
{"path": "vault_builder.py", "desc": "Shared vault factory: builds test vaults at minimal/standard/full levels from golden data", "used_by": ["tests/cli/conftest.py", "tests/e2e/conftest.py", "tests/journey/conftest.py"], "generated": false}
]
}