Files
tracer-cloud--opensre/tests/cli/test_investigate_positional_alert_file.py
wehub-resource-sync 4b6817381b
CI (OpenClaw E2E) / openclaw test (push) Has been cancelled
CI / coverage-report (push) Has been cancelled
CI / test-kubernetes (push) Has been cancelled
CI / should-run-thorough (push) Has been cancelled
CI / test-thorough (cloudwatch-demo) (push) Has been cancelled
CI / test-thorough (flink-ecs) (push) Has been cancelled
CI / test-thorough (upstream-lambda) (push) Has been cancelled
CI / test-thorough (prefect-ecs-fargate) (push) Has been cancelled
Release / build-binaries (zip, opensre.exe, onefile, windows-latest, windows-x64) (push) Has been cancelled
Benchmark image — build + push to ECR (any adapter) / build + push (push) Has been cancelled
CI / quality (ubuntu-latest) (push) Has been cancelled
CI / test (tools-runtime) (push) Has been cancelled
CI / test (e2e-general) (push) Has been cancelled
CI / test (cli-runtime) (push) Has been cancelled
CI / test (e2e-provider-and-openclaw) (push) Has been cancelled
CI / test (integrations-and-misc) (push) Has been cancelled
Release / verify (push) Has been cancelled
Release / build-python-dist (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, macos-15-intel, darwin-x64) (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, macos-latest, darwin-arm64) (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, ubuntu-22.04, linux-x64) (push) Has been cancelled
Release / publish-release (push) Has been cancelled
Release / publish-main-release (push) Has been cancelled
Interactive Shell Live (PR + post-merge) / turn-checks (no-LLM) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Interactive Shell Live (PR + post-merge) / turn-live shard ${{ matrix.shard_index }} (push) Has been cancelled
Release / prepare (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, ubuntu-22.04-arm, linux-arm64) (push) Has been cancelled
Synthetic Deterministic Tests / Synthetic offline (deterministic) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:10:45 +08:00

96 lines
3.3 KiB
Python

"""Tests for the optional positional ``ALERT_FILE`` argument on
``opensre investigate``.
Before this change, ``opensre investigate alert.json`` failed with
``Error: Got unexpected extra argument (alert.json)``. The positional
shortcut is treated as equivalent to ``-i alert.json``; an explicit
``-i`` flag wins when both are passed.
"""
from __future__ import annotations
from pathlib import Path
import pytest
from click.testing import CliRunner
from surfaces.cli.commands.general import investigate_command
def _write_minimal_alert(tmp_path: Path) -> Path:
"""Write a syntactically valid alert payload tests can pass through the CLI."""
alert = tmp_path / "alert.json"
alert.write_text(
'{"alert_name": "test", "pipeline_name": "etl", "severity": "warning"}',
encoding="utf-8",
)
return alert
def test_positional_alert_file_is_accepted(monkeypatch: pytest.MonkeyPatch, tmp_path: Path) -> None:
"""``opensre investigate <path>`` must not error with 'unexpected extra argument'."""
captured: dict[str, str | None] = {}
def _capture_load_payload(*, input_path: str | None, **_kwargs: object) -> dict[str, str]:
captured["input_path"] = input_path
return {"alert_name": "test"}
monkeypatch.setattr(
"surfaces.cli.investigation.payload.load_payload",
_capture_load_payload,
)
monkeypatch.setattr(
"surfaces.cli.investigation.run_investigation_cli",
lambda **_kwargs: {"report": "ok", "root_cause": "ok"},
)
monkeypatch.setattr(
"surfaces.cli.investigation.run_investigation_cli_streaming",
lambda **_kwargs: {"report": "ok", "root_cause": "ok"},
)
monkeypatch.setattr("surfaces.cli.write_json", lambda *_args, **_kw: None)
alert = _write_minimal_alert(tmp_path)
result = CliRunner().invoke(investigate_command, [str(alert)])
assert "unexpected extra argument" not in result.output, result.output
assert captured["input_path"] == str(alert)
def test_explicit_input_flag_wins_when_both_provided(
monkeypatch: pytest.MonkeyPatch, tmp_path: Path
) -> None:
"""When both positional and ``-i`` are passed, ``-i`` takes precedence."""
captured: dict[str, str | None] = {}
def _capture_load_payload(*, input_path: str | None, **_kwargs: object) -> dict[str, str]:
captured["input_path"] = input_path
return {"alert_name": "test"}
monkeypatch.setattr(
"surfaces.cli.investigation.payload.load_payload",
_capture_load_payload,
)
monkeypatch.setattr(
"surfaces.cli.investigation.run_investigation_cli",
lambda **_kwargs: {"report": "ok", "root_cause": "ok"},
)
monkeypatch.setattr(
"surfaces.cli.investigation.run_investigation_cli_streaming",
lambda **_kwargs: {"report": "ok", "root_cause": "ok"},
)
monkeypatch.setattr("surfaces.cli.write_json", lambda *_args, **_kw: None)
positional = _write_minimal_alert(tmp_path)
explicit = tmp_path / "explicit.json"
explicit.write_text(
'{"alert_name": "explicit", "pipeline_name": "etl", "severity": "warning"}',
encoding="utf-8",
)
CliRunner().invoke(
investigate_command,
[str(positional), "-i", str(explicit)],
)
assert captured["input_path"] == str(explicit)