Files
2026-11-06 22:39:55 +08:00

36 lines
1.8 KiB
Python

import json
from pathlib import Path
import subprocess
import sys
import tempfile
import unittest
from paper_atlas.cli import COMMANDS
class CliTests(unittest.TestCase):
def test_every_registered_command_has_help_without_starting_work(self):
for route in COMMANDS:
with self.subTest(route=route):
result=subprocess.run([sys.executable,'-B','-m','paper_atlas',*route,'--help'],capture_output=True,text=True)
self.assertEqual(result.returncode,0,result.stderr)
self.assertIn('paper-atlas '+' '.join(route),result.stdout)
def test_unified_import_and_query_use_shipped_schema_and_registry(self):
from paper_atlas.config import DEFAULT_REGISTRY
venues = json.loads(DEFAULT_REGISTRY.read_text())['venues']
names = [venue['acronym'] for venue in venues]
self.assertTrue({'COLM', 'MM', 'MLSys'} <= set(names))
self.assertEqual(len(names), len(set(names)))
with tempfile.TemporaryDirectory() as tmp:
root=Path(tmp);db=root/'db.sqlite';source=root/'records.jsonl'
source.write_text(json.dumps({'source':'example','external_id':'one','url':'https://example.org','title':'CLI paper','abstract':'Abstract','authors':['Jane Doe'],'venue':'Example','year':2026,'track':'main','status':'accepted'})+'\n')
source.with_suffix('.manifest.json').write_text(json.dumps({'source':'example','list_url':'https://example.org','count':1}))
for args in [('import','records','--db',str(db),str(source)),('query','--db',str(db),'--stats')]:
result=subprocess.run([sys.executable,'-B','-m','paper_atlas',*args],capture_output=True,text=True)
self.assertEqual(result.returncode,0,result.stderr)
self.assertEqual(json.loads(result.stdout)['papers'],1)
if __name__=='__main__':unittest.main()