from datetime import UTC, datetime, timedelta
import pytest
from core.oauth.schemas import AuthorizationCode, OAuthClient
def test_oauth_client_validation():
"""Test OAuth client validation"""
client = OAuthClient(
client_id="cmp_client_test",
client_secret_hash="sha256_hash",
client_name="Test Client",
redirect_uris=["http://localhost:3000/callback"],
)
assert client.client_id == "cmp_client_test"
assert "authorization_code" in client.grant_types
assert "read" in client.allowed_scopes
def test_invalid_redirect_uri():
"""Test invalid redirect URI"""
with pytest.raises(ValueError, match="Invalid redirect URI"):
OAuthClient(
client_id="test",
client_secret_hash="hash",
client_name="Test",
redirect_uris=["invalid-uri"], # Missing http://
)
def test_authorization_code_expiry():
"""Test authorization code expiry"""
code = AuthorizationCode(
code="test_code",
client_id="client1",
redirect_uri="http://localhost:3000/callback",
scope="read",
code_challenge="challenge",
expires_at=datetime.now(UTC) - timedelta(seconds=1), # Expired
)
assert code.is_expired()