from __future__ import annotations import tempfile import unittest from pathlib import Path from email_connect.config import AppConfig, MailboxConfig, ReportsConfig, ScanConfig, SourceConfig, StorageConfig from email_connect.scanner import scan_mailbox FIXTURES = Path(__file__).parent / "fixtures" / "mailbox" class ScannerTests(unittest.TestCase): def test_scan_fixture_directory_writes_report_and_deduplicates(self) -> None: with tempfile.TemporaryDirectory() as tmp: root = Path(tmp) config = AppConfig( mailbox=MailboxConfig(id="test-mailbox", protocol="fixture"), scan=ScanConfig(), storage=StorageConfig(path=str(root / "state.sqlite")), reports=ReportsConfig(output_dir=str(root / "reports")), source=SourceConfig(fixture_dir=str(FIXTURES)), ) first = scan_mailbox(config) second = scan_mailbox(config) self.assertEqual(first.scan.messages_seen, 4) self.assertEqual(first.scan.messages_new, 4) self.assertGreaterEqual(first.scan.evidence_events_created, 4) self.assertEqual(second.scan.messages_new, 0) self.assertEqual(second.scan.evidence_events_created, 0) self.assertTrue(first.report_path and first.report_path.exists()) if __name__ == "__main__": unittest.main()