import json from pathlib import Path import tempfile import unittest from paper_atlas.audits.coverage import report from paper_atlas.db.store import Store class CoverageTests(unittest.TestCase): def setUp(self): self.tmp=tempfile.TemporaryDirectory();self.addCleanup(self.tmp.cleanup) self.root=Path(self.tmp.name);self.db=self.root/'papers.sqlite';self.store=Store(self.db);self.addCleanup(self.store.conn.close) self.registry=self.root/'venues.json';self.registry.write_text(json.dumps({'scope_note':'Candidate scope','venues':[{'acronym':'COLING','field':'language'},{'acronym':'AAAI','field':'general_ai'}]})) def test_zero_coverage_targets_are_listed_and_joint_alias_is_counted_once(self): paper,record=self.store.record('acl_anthology','joint-paper','https://example.org','Joint paper','Abstract',['Jane Doe']) edition=self.store.decision(paper,record,'COLING+LREC',2024,'main','joint-paper','https://example.org','accepted','Accepted',aliases=['COLING','LREC']) self.store.decision(paper,record,'COLING+LREC',2024,'main','joint-paper','https://example.org/another-observation','accepted','Accepted',aliases=['COLING']) self.store.conn.commit();result=report(self.db,self.registry) self.assertEqual(result['target_venue_count'],2);self.assertEqual(result['venues_with_imported_records'],1) coling,aaai=result['venues'];self.assertEqual(coling['imported_submissions'],1) self.assertEqual(coling['editions'][0]['canonical_venue'],'COLING+LREC') self.assertEqual(aaai['history_status'],'no_imported_records');self.assertEqual(aaai['editions'],[]) self.assertNotEqual(coling['history_status'],'complete') def test_same_paper_across_years_is_not_two_distinct_papers(self): paper,record=self.store.record('source','one','https://example.org','A paper','Abstract',[]) for year in (2024,2025): self.store.decision(paper,record,'COLING',year,'main',str(year),'https://example.org','accepted','Accepted') self.store.conn.commit();coling=report(self.db,self.registry)['venues'][0] self.assertEqual(coling['imported_submissions'],2);self.assertEqual(coling['distinct_papers'],1) if __name__=='__main__':unittest.main()