"""Publisher evidence, section boundaries and native-ingestion regression checks."""
import hashlib
import json
import re
from pathlib import Path
import sqlite3
import tempfile
import unittest
from unittest.mock import patch
from paper_atlas.collectors import aamas
from paper_atlas.ingestion.records import ingest_file
def paper(pid, abstract=True):
summary = 'Research with evidence.
More detail.' if abstract else ''
return f'''
Aggregate withdrawals do not identify papers.
', aamas.ROOT)} for index, section in enumerate(aamas.SECTIONS): items[section] = (page(section, f'P{index}_1', section != 'extabstracts'), aamas.ROOT+'resources/'+section+'.html') for key, (html, url) in items.items(): data = html.encode() (root/(key+'.html')).write_bytes(data) receipts.append({'url': url, 'status': 200, 'file': key+'.html', 'bytes': len(data), 'sha256': hashlib.sha256(data).hexdigest(), 'finished_at': '2026-11-09T00:00:00+00:00'}) (root/'receipts.json').write_text(json.dumps({'receipts': receipts})) return root def test_hidden_abstract_and_author_badges_are_not_title_or_authors(self): rows = aamas.parse_section(page('fullpapers', '1A_1'), 'fullpapers', '2026-11-09T00:00:00Z', {'sha256': 'proof'}) row, = rows self.assertEqual(row['title'], 'A structured & auditable paper 1A_1') self.assertEqual(row['abstract'], 'Research with evidence. More detail.') self.assertEqual(row['authors'], ['Jane Doe', 'Bob Smith']) self.assertEqual(row['metadata']['authors_display'], 'Jane Doe, Bob Smith') self.assertEqual(row['url'], aamas.ROOT+'resources/fullpapers.html#1A_1') self.assertEqual(row['metadata']['paper_url'], aamas.ROOT+'papers/1A_1.pdf') self.assertEqual(row['metadata']['source_evidence'], {'sha256': 'proof'}) def test_publication_formats_and_session_topics_do_not_invent_submission_tracks(self): for section, (_, fmt, track, _) in aamas.SECTIONS.items(): row, = aamas.parse_section(page(section, 'P_1', False), section, '2026-11-09T00:00:00Z', {}) self.assertEqual((row['track'], row['metadata']['publication_format']), (track, fmt)) self.assertIsNone(row['abstract']) self.assertEqual(row['status'], 'accepted') self.assertEqual(row['metadata']['decision_date_precision'], 'not_supplied') self.assertEqual(row['metadata']['session']['title'], 'Session 1A – Robotics I') self.assertIn({'namespace': 'aamas_proceedings:publication_format', 'value': fmt}, row['tags']) self.assertEqual(aamas.SECTIONS['fullpapers'][2], 'proceedings_unspecified') self.assertEqual(aamas.SECTIONS['extabstracts'][2], 'proceedings_unspecified') def test_changed_edition_section_duplicate_id_or_pdf_link_is_rejected(self): html = page('fullpapers', '1A_1') for changed in [html.replace('AAMAS 2012', 'AAMAS 2025'), html.replace('