from scripts.bulk_update import BulkUpdatePlan, execute_bulk_updates, main def test_execute_bulk_updates_dry_run_returns_projection(): plan = execute_bulk_updates(iterations=10, batch_size=5, limit=1, dry_run=True) assert isinstance(plan, BulkUpdatePlan) assert plan.dry_run is True assert plan.executed_iterations == 5 # min(5, iterations) assert plan.iterations == 10 assert plan.sample_runtime_seconds >= 0 assert plan.estimated_total_runtime_seconds >= plan.sample_runtime_seconds def test_execute_bulk_updates_validates_arguments(): try: execute_bulk_updates(iterations=0) except ValueError as exc: assert "iterations" in str(exc) else: # pragma: no cover - ensure the exception is raised raise AssertionError("Expected ValueError for iterations") try: execute_bulk_updates(iterations=1, batch_size=0) except ValueError as exc: assert "batch_size" in str(exc) else: # pragma: no cover - ensure the exception is raised raise AssertionError("Expected ValueError for batch_size") try: execute_bulk_updates(iterations=1, limit=0) except ValueError as exc: assert "limit" in str(exc) else: # pragma: no cover - ensure the exception is raised raise AssertionError("Expected ValueError for limit") def test_bulk_update_main_outputs_json(capsys): exit_code = main(["--iterations", "2", "--batch-size", "1", "--limit", "1"]) captured = capsys.readouterr() assert exit_code == 0 assert "\"iterations\": 2" in captured.out assert "dry_run" in captured.out