from __future__ import annotations import tempfile,unittest from pathlib import Path import duckdb from document_query import search_documents class DocumentQueryTests(unittest.TestCase): def test_equal_timestamp_cursor_has_no_duplicates_or_skips(self): with tempfile.TemporaryDirectory() as td: root=Path(td);d=root/"data/v1/documents/date=x";e=root/"data/v1/events/date=x";d.mkdir(parents=True);e.mkdir(parents=True);c=duckdb.connect() c.execute("CREATE TABLE d(document_id VARCHAR,exchange VARCHAR,ticker VARCHAR,source_document_id VARCHAR,title VARCHAR,doc_type VARCHAR,doc_type_source VARCHAR,doc_type_confidence DOUBLE,announced_at TIMESTAMPTZ,announcement_date DATE,raw_artifact_key VARCHAR,raw_size_bytes BIGINT,markdown_artifact_key VARCHAR,markdown_size_bytes BIGINT,publication_state VARCHAR)");c.execute("INSERT INTO d VALUES ('ASX:A11:3','ASX','A11','3','Three','Notice','rule',.4,'2026-04-01T00:00:00Z','2026-04-01',NULL,3,NULL,NULL,'artifact_pending'),('ASX:A11:2','ASX','A11','2','Two','Notice','rule',.4,'2026-04-01T00:00:00Z','2026-04-01',NULL,2,NULL,NULL,'artifact_pending'),('ASX:A11:1','ASX','A11','1','One','Report','rule',.4,'2026-04-01T00:00:00Z','2026-04-01',NULL,1,NULL,NULL,'artifact_pending')");c.execute("COPY d TO ? (FORMAT PARQUET)",[str(d/"d.parquet")]);c.execute("CREATE TABLE e(document_id VARCHAR,instrument_id VARCHAR)");c.execute("INSERT INTO e VALUES ('ASX:A11:2','ASX:A11:OPT')");c.execute("COPY e TO ? (FORMAT PARQUET)",[str(e/"e.parquet")]);c.close() first,next_values=search_documents(root,ticker='A11',limit=2);second,end=search_documents(root,ticker='A11',limit=2,after=next_values);self.assertEqual([x['document_id'] for x in first+second],['ASX:A11:3','ASX:A11:2','ASX:A11:1']);self.assertIsNone(end) by_instrument,_,=search_documents(root,instrument_id='ASX:A11:OPT',limit=10);self.assertEqual([x['document_id'] for x in by_instrument],['ASX:A11:2']) reports,_=search_documents(root,doc_type='Report',direction='asc',limit=10);self.assertEqual(reports[0]['document_id'],'ASX:A11:1') if __name__=="__main__":unittest.main()