""" LinkSyncServer - Authentication Tests """ import pytest from fastapi.testclient import TestClient class TestAuth: def test_login_admin(self, client: TestClient): response = client.post( "/api/auth/login", data={"username": "admin", "password": "admin123"}, ) assert response.status_code == 200 data = response.json() assert "access_token" in data assert data["token_type"] == "bearer" assert data["user"]["role"] == "admin" def test_login_invalid(self, client: TestClient): response = client.post( "/api/auth/login", data={"username": "invalid", "password": "wrong"}, ) assert response.status_code == 401 def test_register_user(self, client: TestClient): import uuid unique = str(uuid.uuid4())[:8] response = client.post( "/api/auth/register", json={ "username": f"testuser_{unique}", "email": f"test_{unique}@example.com", "password": "testpass123", }, ) assert response.status_code == 200 data = response.json() assert data["user"]["username"] == f"testuser_{unique}" assert data["user"]["role"] == "user" def test_register_duplicate(self, client: TestClient): import uuid unique = str(uuid.uuid4())[:8] client.post( "/api/auth/register", json={ "username": f"dupuser_{unique}", "email": f"dup_{unique}@example.com", "password": "testpass123", }, ) response = client.post( "/api/auth/register", json={ "username": f"dupuser_{unique}", "email": f"dup2_{unique}@example.com", "password": "testpass123", }, ) assert response.status_code == 400 def test_logout(self, client: TestClient): response = client.post("/api/auth/logout") assert response.status_code == 200 def test_get_me_unauthenticated(self, client: TestClient): response = client.get("/api/auth/me") assert response.status_code == 401 def test_get_me_authenticated(self, client: TestClient, admin_token: str): response = client.get( "/api/auth/me", headers={"Authorization": f"Bearer {admin_token}"}, ) assert response.status_code == 200 assert response.json()["username"] == "admin" def test_create_api_key(self, client: TestClient, admin_token: str): response = client.post( "/api/auth/api-key", params={"name": "test-key"}, headers={"Authorization": f"Bearer {admin_token}"}, ) assert response.status_code == 200 data = response.json() assert "api_key" in data assert "key_id" in data