diff options
| author | stuppie | 2026-09-01 12:17:32 -0600 |
|---|---|---|
| committer | stuppie | 2026-09-01 12:17:32 -0600 |
| commit | f5a1882de073ea6859c226395daefeb566e9e802 (patch) | |
| tree | 039c0534a4d051eb3c0efc25603bd635457c103e /tests | |
| parent | c991d4f51254b1c81fa6e0e19b0ba94b8c5f61c4 (diff) | |
| download | amt-jb-f5a1882de073ea6859c226395daefeb566e9e802.tar.gz amt-jb-f5a1882de073ea6859c226395daefeb566e9e802.zip | |
add a test_magic_link with a super cool fake_gr_api_manager using fastapi dependency_overrides
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/http/test_auth.py | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/tests/http/test_auth.py b/tests/http/test_auth.py new file mode 100644 index 0000000..8a625bf --- /dev/null +++ b/tests/http/test_auth.py @@ -0,0 +1,66 @@ +import secrets +from urllib.parse import parse_qs, urlparse + +import pytest +from httpx import AsyncClient + +from jb.api.auth import SESSION_COOKIE_NAME +from jb.dependencies import get_gr_api_manager +from jb.main import app +from jb.models.auth import User + + +class FakeGRApiManager: + def __init__(self): + self.users: dict[str, User] = {} + + def ensure_user_exists(self, user: User) -> User: + self.users.setdefault(user.product_user_id, user) + return self.users[user.product_user_id] + + def get_user(self, product_user_id: str) -> User: + return self.users[product_user_id] + + +@pytest.fixture +def email() -> str: + email = secrets.token_urlsafe(16) + "@gmail.com" + return email.lower() + + +@pytest.fixture +def fake_gr_api_manager(): + manager = FakeGRApiManager() + app.dependency_overrides[get_gr_api_manager] = lambda: manager + yield manager + app.dependency_overrides.pop(get_gr_api_manager, None) + + +class TestAuth: + @pytest.mark.anyio + async def test_magic_link( + self, + httpxclient: AsyncClient, + fake_gr_api_manager: FakeGRApiManager, + email: str, + ): + client = httpxclient + + res = await client.post( + "/auth/magic-link/request", json={"email": email} + ) + d = res.json() + assert res.status_code == 200 + assert d["magic_link"] + + token = parse_qs(urlparse(d["magic_link"]).query)["token"][0] + + url = "/auth/magic-link/exchange" + body = {"token": token} + res = await client.post(url, json=body) + assert res.status_code == 204 + assert client.cookies.get(SESSION_COOKIE_NAME) + + res = await client.get("/auth/session") + assert res.status_code == 200 + assert res.json()["email"] == email |
