import tempfile
import pytest
from core.oauth.client_registry import ClientRegistry
@pytest.fixture
def registry():
"""Create temporary client registry for tests"""
with tempfile.TemporaryDirectory() as tmpdir:
yield ClientRegistry(tmpdir)
def test_create_client(registry):
"""Test client creation"""
client_id, client_secret = registry.create_client(
client_name="Test App", redirect_uris=["http://localhost:3000/callback"]
)
# Check client_id format
assert client_id.startswith("cmp_client_")
# Check secret is generated
assert len(client_secret) > 20
# Retrieve client
client = registry.get_client(client_id)
assert client is not None
assert client.client_name == "Test App"
assert "authorization_code" in client.grant_types
def test_validate_client_secret(registry):
"""Test client secret validation"""
client_id, client_secret = registry.create_client(
client_name="Test App", redirect_uris=["http://localhost:3000/callback"]
)
# Valid secret
assert registry.validate_client_secret(client_id, client_secret)
# Invalid secret
assert not registry.validate_client_secret(client_id, "wrong_secret")
# Non-existent client
assert not registry.validate_client_secret("fake_id", client_secret)
def test_list_clients(registry):
"""Test listing clients"""
# Create multiple clients
registry.create_client("App 1", ["http://localhost:3001/callback"])
registry.create_client("App 2", ["http://localhost:3002/callback"])
clients = registry.list_clients()
assert len(clients) == 2
assert clients[0].client_name in ["App 1", "App 2"]
def test_delete_client(registry):
"""Test client deletion"""
client_id, _ = registry.create_client(
client_name="Test App", redirect_uris=["http://localhost:3000/callback"]
)
# Delete
assert registry.delete_client(client_id)
# Should not exist
assert registry.get_client(client_id) is None
# Delete non-existent
assert not registry.delete_client("fake_id")