| monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x126e091f0>
|
|
|
| def test_indicator_cli_divergence(monkeypatch):
|
| monkeypatch.setattr("rtrader.cli.indicator_cli.CMFService", StubCMFService)
|
|
|
| divergence_payload = {
|
| "triggered": True,
|
| "title": "Bullish Divergence (Extreme)",
|
| "pattern": "Bullish Divergence",
|
| "direction": "bullish",
|
| "strength": "extreme",
|
| "score": 100.0,
|
| "confidence": 0.93,
|
| "confidence_label": "Extreme • 93%",
|
| "priority": "critical_buy",
|
| "price_change_pct": -9.3,
|
| "cmf": 0.22,
|
| "summary_text": "-9.3% last hour • CMF +0.22",
|
| "recommendation": "Set breakout trigger at resistance and buy on confirmation.",
|
| "historical": {
|
| "win_rate": 0.875,
|
| "average_move": 0.08,
|
| "dates": ["2025-09-30", "2025-09-25"],
|
| },
|
| }
|
|
|
| def _stub_summary(*_, **__):
|
| return SimpleNamespace(
|
| divergence=divergence_payload,
|
| interpretation={"divergence": divergence_payload},
|
| price_change_pct=-9.3,
|
| cmf=0.22,
|
| )
|
|
|
| monkeypatch.setattr(
|
| "rtrader.cli.indicator_cli.compute_order_flow_summary",
|
| _stub_summary,
|
| )
|
|
|
| runner = CliRunner()
|
| result = runner.invoke(
|
| indicator_group,
|
| [
|
| "test",
|
| "--date",
|
| "2025-10-10",
|
| "--type",
|
| "divergence",
|
| "--symbol",
|
| "OSCR",
|
| ],
|
| )
|
|
|
| assert result.exit_code == 0, result.output
|
| assert "OSCR" in result.output
|
| > assert "Bullish Divergence (Extreme)" in result.output
|
| E assert 'Bullish Divergence (Extreme)' in 'OSCR: divergence analysis failed – [TypeError] can only concatenate str (not "datetime.timedelta") to str [host=mini-turtle.local pid=9191 pm2=ranking-worker]\nNo divergence signals detected.\n'
|
| E + where 'OSCR: divergence analysis failed – [TypeError] can only concatenate str (not "datetime.timedelta") to str [host=mini-turtle.local pid=9191 pm2=ranking-worker]\nNo divergence signals detected.\n' = <Result okay>.output
|
|
|
| tests/cli/test_indicator_cli.py:184: AssertionError
|