blob: 8a625bf76fd4d3958652895c510b1377a938c6cc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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
|