Community edition generated from private repo via sync pipeline. Includes 9 plugins (WordPress, WooCommerce, WP Advanced, Gitea, n8n, Supabase, OpenPanel, Appwrite, Directus) with ~587 tools. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
72 lines
1.9 KiB
Python
72 lines
1.9 KiB
Python
import tempfile
|
|
from datetime import UTC, datetime, timedelta
|
|
|
|
import pytest
|
|
|
|
from core.oauth.schemas import AuthorizationCode, RefreshToken
|
|
from core.oauth.storage import JSONStorage
|
|
|
|
|
|
@pytest.fixture
|
|
def storage():
|
|
"""Create temporary storage for tests"""
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
yield JSONStorage(tmpdir)
|
|
|
|
|
|
def test_save_and_get_authorization_code(storage):
|
|
"""Test authorization code storage"""
|
|
code = AuthorizationCode(
|
|
code="test_code_123",
|
|
client_id="client_1",
|
|
redirect_uri="http://localhost:3000/callback",
|
|
scope="read write",
|
|
code_challenge="challenge_123",
|
|
expires_at=datetime.now(UTC) + timedelta(minutes=5),
|
|
)
|
|
|
|
# Save
|
|
assert storage.save_authorization_code(code)
|
|
|
|
# Get
|
|
retrieved = storage.get_authorization_code("test_code_123")
|
|
assert retrieved is not None
|
|
assert retrieved.code == "test_code_123"
|
|
assert retrieved.client_id == "client_1"
|
|
|
|
|
|
def test_expired_code_auto_cleanup(storage):
|
|
"""Test expired code auto-cleanup"""
|
|
code = AuthorizationCode(
|
|
code="expired_code",
|
|
client_id="client_1",
|
|
redirect_uri="http://localhost:3000/callback",
|
|
scope="read",
|
|
code_challenge="challenge",
|
|
expires_at=datetime.now(UTC) - timedelta(seconds=1), # Expired
|
|
)
|
|
|
|
storage.save_authorization_code(code)
|
|
|
|
# Should return None and cleanup
|
|
retrieved = storage.get_authorization_code("expired_code")
|
|
assert retrieved is None
|
|
|
|
|
|
def test_refresh_token_revocation(storage):
|
|
"""Test refresh token revocation"""
|
|
token = RefreshToken(
|
|
token="refresh_token_123",
|
|
client_id="client_1",
|
|
expires_at=datetime.now(UTC) + timedelta(days=7),
|
|
)
|
|
|
|
storage.save_refresh_token(token)
|
|
|
|
# Revoke
|
|
assert storage.revoke_refresh_token("refresh_token_123")
|
|
|
|
# Should return None
|
|
retrieved = storage.get_refresh_token("refresh_token_123")
|
|
assert retrieved is None
|