Files
paper-atlas/tests/test_query.py
T
codex-bot 1c18cbe03a
Metadata integrity checks / metadata (push) Successful in 1m12s
Package Paper Atlas with organized modules and a unified CLI
2026-11-06 17:32:24 +08:00

52 lines
3.2 KiB
Python

import json
import subprocess
import sys
import tempfile
import unittest
from pathlib import Path
from paper_atlas.db.store import Store
class QueryTests(unittest.TestCase):
def test_joint_conference_alias_does_not_duplicate_submission(self):
with tempfile.TemporaryDirectory() as tmp:
db=Path(tmp)/'papers.sqlite';store=Store(db);self.addCleanup(store.conn.close)
paper,record=store.record('acl_anthology','paper1','https://example.org/1','Joint event paper','Abstract',[])
store.decision(paper,record,'COLING+LREC',2024,'main','paper1','https://example.org/1','accepted','official XML',['COLING','LREC'])
store.conn.commit()
for venue in ('COLING','LREC'):
command=[sys.executable,'-B','-m','paper_atlas','query','--db',str(db),'--venue',venue,'--track','main']
rows=json.loads(subprocess.run(command,check=True,capture_output=True,text=True).stdout)
self.assertEqual([r['id'] for r in rows],[paper])
self.assertEqual(store.conn.execute('SELECT count(*) FROM submissions').fetchone()[0],1)
def test_venue_filter_is_case_insensitive_and_uses_latest_decision(self):
with tempfile.TemporaryDirectory() as tmp:
db=Path(tmp)/'papers.sqlite'
store=Store(db)
self.addCleanup(store.conn.close)
paper,record=store.record('peerread','paper1','https://example.org/paper1','A real submission','Abstract',['Jane Doe'])
store.decision(paper,record,'ICLR',2017,'main','paper1','https://example.org/paper1','rejected','explicit rejection')
store.record('arxiv','2601.00001','https://example.org/other','Another paper','Abstract',['John Smith'])
store.conn.commit()
command=[sys.executable,'-B','-m','paper_atlas','query','--db',str(db),'--venue','iclr','--year','2017','--status','rejected']
result=json.loads(subprocess.run(command,check=True,capture_output=True,text=True).stdout)
self.assertEqual([r['id'] for r in result],[paper])
details_command=[sys.executable,'-B','-m','paper_atlas','query','--db',str(db),'--paper',str(paper)]
details=json.loads(subprocess.run(details_command,check=True,capture_output=True,text=True).stdout)[0]
self.assertEqual(details['authors'],['Jane Doe'])
self.assertEqual(details['submissions'][0]['decisions'][0]['status'],'rejected')
self.assertEqual(details['sources'][0]['external_id'],'paper1')
stats_command=[sys.executable,'-B','-m','paper_atlas','query','--db',str(db),'--stats']
stats=json.loads(subprocess.run(stats_command,check=True,capture_output=True,text=True).stdout)
self.assertEqual(stats['papers'],2)
self.assertEqual({r['name']:r['imported_records'] for r in stats['records_by_source']},{'arxiv':1,'peerread':1})
store.decision(paper,record,'ICLR',2017,'main','paper1','https://example.org/paper1','accepted','changed decision')
store.conn.commit()
self.assertEqual(json.loads(subprocess.run(command,check=True,capture_output=True,text=True).stdout),[])
if __name__=='__main__':
unittest.main()