40 lines
2.3 KiB
Python
40 lines
2.3 KiB
Python
import json
|
|
import subprocess
|
|
import sys
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
from index_core import Store
|
|
|
|
|
|
class QueryTests(unittest.TestCase):
|
|
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',str(Path(__file__).with_name('query.py')),'--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',str(Path(__file__).with_name('query.py')),'--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',str(Path(__file__).with_name('query.py')),'--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()
|