Files
eryao/backend/tests/unit/test_auth_gateway_dev_session.py
T

84 lines
2.6 KiB
Python

from __future__ import annotations
from types import SimpleNamespace
import pytest
import v1.auth.gateway as gateway_module
from v1.auth.gateway import SupabaseAuthGateway
from v1.auth.schemas import AuthUser, EmailSessionCreateRequest, SessionResponse
@pytest.mark.asyncio
async def test_create_email_session_uses_dev_bypass(
monkeypatch: pytest.MonkeyPatch,
) -> None:
gateway = SupabaseAuthGateway()
request = EmailSessionCreateRequest(email="test@example.com", token="123456")
expected = SessionResponse(
access_token="access",
refresh_token="refresh",
expires_in=3600,
token_type="bearer",
user=AuthUser(id="user-1", email="test@example.com"),
)
calls: dict[str, object] = {}
async def _fake_create_dev_email_session(**kwargs: object) -> SessionResponse:
calls.update(kwargs)
return expected
monkeypatch.setattr(gateway_module.config.runtime, "environment", "dev")
monkeypatch.setattr(
gateway_module, "create_dev_email_session", _fake_create_dev_email_session
)
monkeypatch.setattr(gateway, "_get_client", lambda: SimpleNamespace(name="anon"))
monkeypatch.setattr(
gateway,
"_get_admin_client",
lambda: SimpleNamespace(name="service-role"),
)
response = await gateway.create_email_session(request)
assert response == expected
assert calls["request"] == request
assert calls["auth_unavailable_detail"] == gateway_module.AUTH_UNAVAILABLE_DETAIL
@pytest.mark.asyncio
async def test_create_email_session_uses_verify_otp_in_non_dev(
monkeypatch: pytest.MonkeyPatch,
) -> None:
gateway = SupabaseAuthGateway()
request = EmailSessionCreateRequest(email="test@example.com", token="123456")
captured_payload: dict[str, str] = {}
def _verify_otp(payload: dict[str, str]) -> SimpleNamespace:
captured_payload.update(payload)
return SimpleNamespace(
session=SimpleNamespace(
access_token="access",
refresh_token="refresh",
expires_in=3600,
token_type="bearer",
),
user=SimpleNamespace(id="user-2", email="test@example.com"),
)
monkeypatch.setattr(gateway_module.config.runtime, "environment", "prod")
monkeypatch.setattr(
gateway,
"_get_client",
lambda: SimpleNamespace(auth=SimpleNamespace(verify_otp=_verify_otp)),
)
response = await gateway.create_email_session(request)
assert captured_payload == {
"type": "email",
"email": "test@example.com",
"token": "123456",
}
assert response.user.email == "test@example.com"