Files
paper-atlas/tests/test_pmlr.py
T
codex-bot 17bdaa77fb
Metadata integrity checks / metadata (push) Successful in 40s
Resolve mixed ICML PMLR tracks from verified official programs
2026-11-06 22:12:08 +08:00

61 lines
3.4 KiB
Python

import unittest
import tempfile
import json
from pathlib import Path
from unittest.mock import patch
from paper_atlas.collectors.pmlr import load_metadata,venue_key,collect_volume
class MetadataTests(unittest.TestCase):
def test_legacy_binary_scalar_is_decoded_as_text(self):
self.assertEqual(load_metadata('title: !binary |\n SGVsbG8=\n')['title'],'Hello')
def test_trailing_empty_document_is_allowed(self):
self.assertEqual(load_metadata('---\nyear: 2024\n---\n'),{'year':2024})
def test_conflicting_documents_are_not_silently_combined(self):
with self.assertRaisesRegex(ValueError,'exactly one'):
load_metadata('year: 2024\n---\nyear: 2025\n')
def test_historical_conference_name_aliases(self):
self.assertEqual(venue_key('AISTATS 2010'),'AISTATS')
self.assertEqual(venue_key('AISTATS 2012'),'AISTATS')
self.assertEqual(venue_key('COLT 2012'),'COLT')
self.assertEqual(venue_key('ECML-PKDD'),'ECML-PKDD')
def test_missing_abstract_is_reported_as_partial_collection(self):
config=b'shortname: ICML\nyear: 2023\nbooktitle: ICML\n'
paper='---\nid: paper1\nlayout: inproceedings\ntitle: Paper\nabstract:\n---\n'
with tempfile.TemporaryDirectory() as tmp,patch('paper_atlas.collectors.pmlr.fetch',return_value=config),patch('paper_atlas.collectors.pmlr.metadata_texts',return_value=iter([('paper.md',paper)])):
result=collect_volume(999,tmp,tmp)
self.assertEqual(result['count'],1)
self.assertEqual(result['missing_abstract_count'],1)
self.assertEqual(result['status'],'partial')
def test_duplicate_publication_posts_preserve_date_evidence_once(self):
config=b'shortname: CoRL\nyear: 2023\nbooktitle: CoRL\n'
paper='---\nid: paper1\nlayout: inproceedings\ntitle: Paper\nabstract: Real abstract\ndate: {date}\n---\n'
posts=[('2023-11-13-paper1.md',paper.format(date='2023-11-13')),('2023-12-02-paper1.md',paper.format(date='2023-12-02'))]
with tempfile.TemporaryDirectory() as tmp,patch('paper_atlas.collectors.pmlr.fetch',return_value=config),patch('paper_atlas.collectors.pmlr.metadata_texts',return_value=iter(posts)):
result=collect_volume(229,tmp,tmp)
rows=[json.loads(line) for line in Path(result['file']).read_text().splitlines()]
self.assertEqual(result['count'],1)
self.assertEqual(result['metadata_post_count'],2)
self.assertEqual(result['duplicate_post_count'],1)
self.assertEqual(len(rows[0]['metadata']['source_versions']),2)
self.assertEqual(rows[0]['metadata']['date'],'2023-12-02')
def test_conflicting_duplicate_posts_do_not_replace_previous_collection(self):
config=b'shortname: CoRL\nyear: 2023\nbooktitle: CoRL\n'
paper='---\nid: paper1\nlayout: inproceedings\ntitle: {title}\nabstract: Abstract\n---\n'
with tempfile.TemporaryDirectory() as tmp,patch('paper_atlas.collectors.pmlr.fetch',return_value=config),patch('paper_atlas.collectors.pmlr.metadata_texts',return_value=iter([('a.md',paper.format(title='First paper')),('b.md',paper.format(title='Other paper'))])):
previous=Path(tmp)/'pmlr-v229.jsonl';previous.write_text('previous valid collection')
with self.assertRaisesRegex(ValueError,'Conflicting metadata posts'):
collect_volume(229,tmp,tmp)
self.assertEqual(previous.read_text(),'previous valid collection')
if __name__=='__main__':
unittest.main()