import io import json import tempfile import unittest from pathlib import Path from unittest.mock import patch from collect_peerread import collect from import_records import ingest_file from index_core import Store class PeerReadTests(unittest.TestCase): def test_explicit_rejection_and_no_review_body_storage(self): tree={'sha':'a'*40,'tree':[{'path':'data/iclr_2017/test/reviews/123.json'}]} paper={'conference':'ICLR 2017 conference submission','id':'123','title':'Public paper','abstract':'Abstract','authors':'Jane Doe, John Smith','accepted':False,'reviews':[{'text':'Do not persist this review body'}]} with tempfile.TemporaryDirectory() as tmp: root=Path(tmp) with patch('collect_peerread.fetch',side_effect=[json.dumps({'sha':'a'*40}).encode(),json.dumps(tree).encode()]),patch('collect_peerread.urllib.request.urlopen',return_value=io.BytesIO(json.dumps(paper).encode())),patch('collect_peerread.time.sleep'): collect(root/'cache',root/'out') path=root/'out/peerread-iclr2017-main.jsonl' record=json.loads(path.read_text()) self.assertEqual(record['status'],'rejected') self.assertNotIn('Do not persist',path.read_text()) ingest_file(root/'db.sqlite',path) store=Store(root/'db.sqlite') self.addCleanup(store.conn.close) self.assertEqual(store.conn.execute('SELECT status FROM decisions').fetchone()[0],'rejected') self.assertEqual(store.conn.execute('SELECT status FROM edition_sources').fetchone()[0],'complete') if __name__=='__main__': unittest.main()