33 lines
1.7 KiB
Python
33 lines
1.7 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
|
|
self.assertEqual(len(json.loads(DEFAULT_REGISTRY.read_text())['venues']),41)
|
|
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()
|