diff --git a/tests/test_api.py b/tests/test_api.py new file mode 100644 index 0000000..454a6c2 --- /dev/null +++ b/tests/test_api.py @@ -0,0 +1,81 @@ +"""Tests for API commands module.""" + +from unittest.mock import Mock, patch + +from devtoolbelt.commands.api import ( + _parse_auth, + _parse_headers, + _resolve_url, +) + + +class TestAPiHelpers: + """Tests for API helper functions.""" + + def test_parse_headers_empty(self): + """Test parsing empty headers.""" + result = _parse_headers(()) + assert result == {} + + def test_parse_headers_single(self): + """Test parsing single header.""" + result = _parse_headers(("Content-Type: application/json",)) + assert result == {"Content-Type": "application/json"} + + def test_parse_headers_multiple(self): + """Test parsing multiple headers.""" + result = _parse_headers(( + "Content-Type: application/json", + "Authorization: Bearer token123" + )) + assert result == { + "Content-Type": "application/json", + "Authorization": "Bearer token123" + } + + def test_parse_headers_with_spaces(self): + """Test parsing headers with extra spaces.""" + result = _parse_headers(("X-Custom-Header : value ",)) + assert result == {"X-Custom-Header": "value"} + + def test_parse_auth_none(self): + """Test parsing no auth.""" + result = _parse_auth(None) + assert result is None + + def test_parse_auth_token(self): + """Test parsing token auth.""" + result = _parse_auth("bearer-token-123") + assert result == ("bearer-token-123", "") + + def test_parse_auth_user_password(self): + """Test parsing user:password auth.""" + result = _parse_auth("user:password123") + assert result == ("user", "password123") + + def test_resolve_url_direct(self): + """Test resolving direct URL.""" + result = _resolve_url("https://api.example.com", None) + assert result == "https://api.example.com" + + def test_resolve_url_named_from_config(self): + """Test resolving named endpoint from config.""" + with patch('devtoolbelt.commands.api.get_config') as mock_get_config: + mock_config = Mock() + mock_config.get_api_endpoints.return_value = { + "myapi": "https://api.example.com/v1" + } + mock_get_config.return_value = mock_config + + result = _resolve_url("myapi", None) + assert result == "https://api.example.com/v1" + + def test_resolve_url_unknown_name(self): + """Test resolving unknown name falls back to URL.""" + with patch('devtoolbelt.commands.api.get_config') as mock_get_config: + mock_config = Mock() + mock_config.get_api_endpoints.return_value = {} + mock_get_config.return_value = mock_config + + result = _resolve_url("unknownname", None) + assert result == "unknownname"