diff --git a/src/production_analytics/cli/__main__.py b/src/production_analytics/cli/__main__.py index de828b0..466fe0a 100644 --- a/src/production_analytics/cli/__main__.py +++ b/src/production_analytics/cli/__main__.py @@ -260,6 +260,7 @@ def _parse_cli_timestamp(value: str) -> object: def _run_power_meter(args: argparse.Namespace) -> int: from datetime import UTC, datetime, timedelta import time + from production_analytics.calculations.config import CalculationConfigError from production_analytics.enlyze.exploration import ConfigurationError from production_analytics.power_meter.config import load_power_meter_config from production_analytics.power_meter.gateway import PowerMeterGateway diff --git a/tests/test_cli.py b/tests/test_cli.py index 2eb133e..adbceb6 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -3,7 +3,7 @@ import json import os import tempfile import unittest -from contextlib import redirect_stdout +from contextlib import redirect_stderr, redirect_stdout from pathlib import Path from unittest.mock import patch @@ -12,6 +12,21 @@ from production_analytics.enlyze.exploration import ExplorationResponse class CliTests(unittest.TestCase): + def test_power_meter_config_error_returns_controlled_exit_code(self) -> None: + with tempfile.TemporaryDirectory() as temporary_directory: + missing_config = Path(temporary_directory) / "missing.yaml" + error_output = io.StringIO() + with redirect_stderr(error_output): + result = main([ + "run", "power-meter", "--config", str(missing_config), "--meter", "B2", + "--start", "2026-10-01T10:00:00Z", "--end", "2026-10-01T10:10:00Z", + ]) + + self.assertEqual(result, 2) + self.assertIn( + "Config/startup error: Cannot read power-meter configuration", error_output.getvalue() + ) + @patch.dict(os.environ, {"ENLYZE_BASE_URL": "https://enlyze.example"}, clear=True) @patch("production_analytics.cli.__main__.ExplorationClient.get") def test_raw_prints_and_saves_sanitized_response(self, get_mock: object) -> None: