Files
api-testgen-cli/tests/unit/test_auth.py
7000pctAUTO f647888fe7
Some checks failed
CI / test (push) Has been cancelled
CI / build (push) Has been cancelled
Add unit tests for spec parser and auth
2026-02-06 04:51:47 +00:00

183 lines
5.8 KiB
Python

"""Unit tests for the auth configuration module."""
import pytest
import tempfile
from pathlib import Path
from api_testgen.core.auth import AuthConfig, AuthType
from api_testgen.core.exceptions import AuthConfigError, MissingSecuritySchemeError
class TestAuthConfig:
"""Tests for AuthConfig class."""
def test_add_api_key(self):
"""Test adding API key authentication."""
auth = AuthConfig()
auth.add_api_key("test_api_key", header_name="X-API-Key", api_key="test123")
method = auth.get_auth_method("test_api_key")
assert method is not None
assert method["type"] == AuthType.API_KEY
assert method["header_name"] == "X-API-Key"
assert method["api_key"] == "test123"
def test_add_bearer_token(self):
"""Test adding Bearer token authentication."""
auth = AuthConfig()
auth.add_bearer("test_bearer", token="abc123", token_prefix="Bearer")
method = auth.get_auth_method("test_bearer")
assert method is not None
assert method["type"] == AuthType.BEARER
assert method["token"] == "abc123"
assert method["token_prefix"] == "Bearer"
def test_add_basic_auth(self):
"""Test adding Basic authentication."""
auth = AuthConfig()
auth.add_basic("test_basic", username="user", password="pass")
method = auth.get_auth_method("test_basic")
assert method is not None
assert method["type"] == AuthType.BASIC
assert method["username"] == "user"
assert method["password"] == "pass"
def test_method_chaining(self):
"""Test that add methods return self for chaining."""
auth = AuthConfig()
result = auth.add_api_key("key1")
assert result is auth
result = auth.add_bearer("key2")
assert result is auth
result = auth.add_basic("key3")
assert result is auth
def test_get_all_methods(self):
"""Test getting all configured auth methods."""
auth = AuthConfig()
auth.add_api_key("api_key")
auth.add_bearer("bearer")
methods = auth.get_all_methods()
assert len(methods) == 2
assert "api_key" in methods
assert "bearer" in methods
def test_get_headers_api_key(self):
"""Test getting headers for API key auth."""
auth = AuthConfig()
auth.add_api_key("test", header_name="X-Custom-Key", api_key="mykey")
headers = auth.get_headers("test")
assert headers["X-Custom-Key"] == "mykey"
def test_get_headers_bearer(self):
"""Test getting headers for Bearer auth."""
auth = AuthConfig()
auth.add_bearer("test", token="mytoken", token_prefix="Bearer")
headers = auth.get_headers("test")
assert headers["Authorization"] == "Bearer mytoken"
def test_get_headers_basic(self):
"""Test getting headers for Basic auth."""
import base64
auth = AuthConfig()
auth.add_basic("test", username="user", password="pass")
headers = auth.get_headers("test")
expected = base64.b64encode(b"user:pass").decode()
assert headers["Authorization"] == f"Basic {expected}"
def test_get_headers_unconfigured_scheme_raises_error(self):
"""Test that getting headers for unconfigured scheme raises error."""
auth = AuthConfig()
with pytest.raises(AuthConfigError):
auth.get_headers("nonexistent")
def test_build_from_spec(self):
"""Test building auth config from OpenAPI security schemes."""
auth = AuthConfig()
security_schemes = {{
"ApiKeyAuth": {{"type": "apiKey", "name": "X-API-Key", "in": "header"}},
"BearerAuth": {{"type": "http", "scheme": "bearer"}},
"BasicAuth": {{"type": "http", "scheme": "basic"}},
}}
security_requirements = [
{{"ApiKeyAuth": []}},
{{"BearerAuth": []}},
]
auth.build_from_spec(security_schemes, security_requirements)
assert auth.get_auth_method("ApiKeyAuth") is not None
assert auth.get_auth_method("BearerAuth") is not None
assert auth.get_auth_method("BasicAuth") is None
def test_build_from_spec_missing_scheme_raises_error(self):
"""Test that missing security scheme raises error."""
auth = AuthConfig()
security_schemes = {{
"ApiKeyAuth": {{"type": "apiKey", "name": "X-API-Key", "in": "header"}},
}}
security_requirements = [
{{"MissingScheme": []}},
]
with pytest.raises(MissingSecuritySchemeError):
auth.build_from_spec(security_schemes, security_requirements)
def test_generate_pytest_auth_code(self):
"""Test generating pytest authentication code."""
auth = AuthConfig()
auth.add_api_key("test_key", header_name="X-Api-Key", api_key="key123")
code = auth.generate_auth_code("test_key", "pytest")
assert "X-Api-Key" in code
assert "key123" in code
def test_generate_jest_auth_code(self):
"""Test generating Jest authentication code."""
auth = AuthConfig()
auth.add_bearer("test_bearer", token="token123")
code = auth.generate_auth_code("test_bearer", "jest")
assert "Authorization" in code
assert "token123" in code
def test_generate_go_auth_code(self):
"""Test generating Go authentication code."""
auth = AuthConfig()
auth.add_api_key("test_key", header_name="X-Api-Key")
code = auth.generate_auth_code("test_key", "go")
assert "X-Api-Key" in code
def test_generate_auth_code_unconfigured_scheme(self):
"""Test generating auth code for unconfigured scheme returns empty."""
auth = AuthConfig()
code = auth.generate_auth_code("nonexistent", "pytest")
assert code == ""