"""Tests for check_api command.""" import json from unittest.mock import MagicMock, patch from coinhunter.commands import check_api class TestMain: def test_missing_api_key(self, monkeypatch, capsys): monkeypatch.setenv("BINANCE_API_KEY", "") monkeypatch.setenv("BINANCE_API_SECRET", "secret") rc = check_api.main() assert rc == 1 out = json.loads(capsys.readouterr().out) assert out["ok"] is False assert "BINANCE_API_KEY" in out["error"] def test_missing_api_secret(self, monkeypatch, capsys): monkeypatch.setenv("BINANCE_API_KEY", "key") monkeypatch.setenv("BINANCE_API_SECRET", "") rc = check_api.main() assert rc == 1 out = json.loads(capsys.readouterr().out) assert out["ok"] is False assert "BINANCE_API_SECRET" in out["error"] def test_placholder_api_key(self, monkeypatch, capsys): monkeypatch.setenv("BINANCE_API_KEY", "your_api_key") monkeypatch.setenv("BINANCE_API_SECRET", "secret") rc = check_api.main() assert rc == 1 def test_balance_fetch_failure(self, monkeypatch, capsys): monkeypatch.setenv("BINANCE_API_KEY", "key") monkeypatch.setenv("BINANCE_API_SECRET", "secret") mock_ex = MagicMock() mock_ex.fetch_balance.side_effect = Exception("Network error") with patch("coinhunter.commands.check_api.ccxt.binance", return_value=mock_ex): rc = check_api.main() assert rc == 1 out = json.loads(capsys.readouterr().out) assert "Failed to connect" in out["error"] def test_success_with_spot_trading(self, monkeypatch, capsys): monkeypatch.setenv("BINANCE_API_KEY", "key") monkeypatch.setenv("BINANCE_API_SECRET", "secret") mock_ex = MagicMock() mock_ex.fetch_balance.return_value = {"USDT": 100.0} mock_ex.sapi_get_account_api_restrictions.return_value = {"enableSpotTrading": True} with patch("coinhunter.commands.check_api.ccxt.binance", return_value=mock_ex): rc = check_api.main() assert rc == 0 out = json.loads(capsys.readouterr().out) assert out["ok"] is True assert out["read_permission"] is True assert out["spot_trading_enabled"] is True def test_success_restrictions_query_fails(self, monkeypatch, capsys): monkeypatch.setenv("BINANCE_API_KEY", "key") monkeypatch.setenv("BINANCE_API_SECRET", "secret") mock_ex = MagicMock() mock_ex.fetch_balance.return_value = {"USDT": 100.0} mock_ex.sapi_get_account_api_restrictions.side_effect = Exception("no permission") with patch("coinhunter.commands.check_api.ccxt.binance", return_value=mock_ex): rc = check_api.main() assert rc == 0 out = json.loads(capsys.readouterr().out) assert out["spot_trading_enabled"] is None assert "may be null" in out["note"]