Cai
2026-08-21 b5cd4db7bf43d92dcd6f1a58c7be0f2f46ef3ea4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from __future__ import annotations
 
from datetime import datetime
from pathlib import Path
import io
import json
import tempfile
import unittest
from unittest.mock import patch
 
from hibor_fast_collection.cli import main
from helpers import task_spec
 
 
class CliDryRunTests(unittest.TestCase):
    def test_dry_run_no_ledger_creation(self):
        class FixedDateTime(datetime):
            @classmethod
            def now(cls, tz=None):
                return cls(2026, 7, 29, 12, 0, 0, tzinfo=tz)
 
        with tempfile.TemporaryDirectory() as tmp:
            root = Path(tmp)
            (root / "adb.exe").write_bytes(b"tool")
            (root / "pdfinfo.exe").write_bytes(b"tool")
            task = root / "task.json"
            task.write_text(json.dumps(task_spec(root), ensure_ascii=False, separators=(",", ":")), encoding="utf-8")
            fake_stdout = type("Stdout", (), {"buffer": io.BytesIO()})()
            with patch("sys.stdout", fake_stdout), patch(
                    "hibor_fast_collection.workflow.datetime", FixedDateTime):
                code = main(["--task", str(task), "--dry-run"])
            self.assertEqual(code, 0)
            self.assertFalse((root / "quota.csv").exists())
            output = json.loads(fake_stdout.buffer.getvalue())
            self.assertEqual(output["schema_version"], "HIBOR_FAST_REPORT_COLLECTION_TERMINAL_V009")
            self.assertEqual(output["quota_cumulative_consumed"], 3)
 
 
if __name__ == "__main__": unittest.main()