83 lines
2.2 KiB
Python
83 lines
2.2 KiB
Python
|
|
"""Tests for auth endpoints."""
|
||
|
|
|
||
|
|
import sys, os
|
||
|
|
sys.path.insert(0, os.path.dirname(__file__))
|
||
|
|
|
||
|
|
import pytest
|
||
|
|
import pytest_asyncio
|
||
|
|
from httpx import AsyncClient
|
||
|
|
from helpers import auth_header, register_and_login
|
||
|
|
|
||
|
|
|
||
|
|
@pytest.mark.asyncio
|
||
|
|
async def test_register(client: AsyncClient):
|
||
|
|
resp = await client.post(
|
||
|
|
"/api/auth/register",
|
||
|
|
json={"username": "newuser", "password": "password123"},
|
||
|
|
)
|
||
|
|
assert resp.status_code == 201
|
||
|
|
data = resp.json()
|
||
|
|
assert "token" in data
|
||
|
|
assert "user_id" in data
|
||
|
|
|
||
|
|
|
||
|
|
@pytest.mark.asyncio
|
||
|
|
async def test_register_duplicate(client: AsyncClient):
|
||
|
|
await client.post(
|
||
|
|
"/api/auth/register",
|
||
|
|
json={"username": "dupuser", "password": "password123"},
|
||
|
|
)
|
||
|
|
resp = await client.post(
|
||
|
|
"/api/auth/register",
|
||
|
|
json={"username": "dupuser", "password": "password123"},
|
||
|
|
)
|
||
|
|
assert resp.status_code == 409
|
||
|
|
|
||
|
|
|
||
|
|
@pytest.mark.asyncio
|
||
|
|
async def test_login(client: AsyncClient):
|
||
|
|
await client.post(
|
||
|
|
"/api/auth/register",
|
||
|
|
json={"username": "loginuser", "password": "mypassword"},
|
||
|
|
)
|
||
|
|
resp = await client.post(
|
||
|
|
"/api/auth/login",
|
||
|
|
json={"username": "loginuser", "password": "mypassword"},
|
||
|
|
)
|
||
|
|
assert resp.status_code == 200
|
||
|
|
data = resp.json()
|
||
|
|
assert "token" in data
|
||
|
|
assert "user_id" in data
|
||
|
|
|
||
|
|
|
||
|
|
@pytest.mark.asyncio
|
||
|
|
async def test_login_wrong_password(client: AsyncClient):
|
||
|
|
await client.post(
|
||
|
|
"/api/auth/register",
|
||
|
|
json={"username": "wrongpw", "password": "correct"},
|
||
|
|
)
|
||
|
|
resp = await client.post(
|
||
|
|
"/api/auth/login",
|
||
|
|
json={"username": "wrongpw", "password": "incorrect"},
|
||
|
|
)
|
||
|
|
assert resp.status_code == 401
|
||
|
|
|
||
|
|
|
||
|
|
@pytest.mark.asyncio
|
||
|
|
async def test_refresh(client: AsyncClient):
|
||
|
|
token, user_id = await register_and_login(client)
|
||
|
|
resp = await client.post(
|
||
|
|
"/api/auth/refresh",
|
||
|
|
headers=auth_header(token),
|
||
|
|
)
|
||
|
|
assert resp.status_code == 200
|
||
|
|
data = resp.json()
|
||
|
|
assert "token" in data
|
||
|
|
assert data["user_id"] == user_id
|
||
|
|
|
||
|
|
|
||
|
|
@pytest.mark.asyncio
|
||
|
|
async def test_refresh_no_token(client: AsyncClient):
|
||
|
|
resp = await client.post("/api/auth/refresh")
|
||
|
|
assert resp.status_code in (401, 403)
|