fix: ruff lint + format fixes in tests, ESLint fixes in frontend
This commit is contained in:
+52
-32
@@ -53,13 +53,16 @@ async def test_list_users_pagination(admin_client: AsyncClient, admin_user: User
|
||||
@pytest.mark.asyncio
|
||||
async def test_create_user_as_admin(admin_client: AsyncClient):
|
||||
"""POST /api/v1/users as admin creates a new user, returns 201."""
|
||||
response = await admin_client.post("/api/v1/users/", json={
|
||||
"email": "newuser@test.com",
|
||||
"password": "NewUser123!",
|
||||
"full_name": "New User",
|
||||
"role": "verkaeufer",
|
||||
"language": "de",
|
||||
})
|
||||
response = await admin_client.post(
|
||||
"/api/v1/users/",
|
||||
json={
|
||||
"email": "newuser@test.com",
|
||||
"password": "NewUser123!",
|
||||
"full_name": "New User",
|
||||
"role": "verkaeufer",
|
||||
"language": "de",
|
||||
},
|
||||
)
|
||||
assert response.status_code == 201
|
||||
data = response.json()
|
||||
assert data["email"] == "newuser@test.com"
|
||||
@@ -73,44 +76,55 @@ async def test_create_user_as_admin(admin_client: AsyncClient):
|
||||
@pytest.mark.asyncio
|
||||
async def test_create_user_as_non_admin(verkaeufer_client: AsyncClient):
|
||||
"""POST /api/v1/users as verkaeufer returns 403."""
|
||||
response = await verkaeufer_client.post("/api/v1/users/", json={
|
||||
"email": "forbidden@test.com",
|
||||
"password": "Forbidden123!",
|
||||
"full_name": "Forbidden",
|
||||
"role": "admin",
|
||||
"language": "de",
|
||||
})
|
||||
response = await verkaeufer_client.post(
|
||||
"/api/v1/users/",
|
||||
json={
|
||||
"email": "forbidden@test.com",
|
||||
"password": "Forbidden123!",
|
||||
"full_name": "Forbidden",
|
||||
"role": "admin",
|
||||
"language": "de",
|
||||
},
|
||||
)
|
||||
assert response.status_code == 403
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_create_user_duplicate_email(admin_client: AsyncClient, admin_user: User):
|
||||
"""POST /api/v1/users with existing email returns 409."""
|
||||
response = await admin_client.post("/api/v1/users/", json={
|
||||
"email": "admin@test.com",
|
||||
"password": "SomePassword123!",
|
||||
"full_name": "Duplicate",
|
||||
"role": "verkaeufer",
|
||||
"language": "de",
|
||||
})
|
||||
response = await admin_client.post(
|
||||
"/api/v1/users/",
|
||||
json={
|
||||
"email": "admin@test.com",
|
||||
"password": "SomePassword123!",
|
||||
"full_name": "Duplicate",
|
||||
"role": "verkaeufer",
|
||||
"language": "de",
|
||||
},
|
||||
)
|
||||
assert response.status_code == 409
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_create_user_short_password(admin_client: AsyncClient):
|
||||
"""POST /api/v1/users with password < 8 chars returns 422."""
|
||||
response = await admin_client.post("/api/v1/users/", json={
|
||||
"email": "shortpw@test.com",
|
||||
"password": "short",
|
||||
"full_name": "Short PW",
|
||||
"role": "verkaeufer",
|
||||
"language": "de",
|
||||
})
|
||||
response = await admin_client.post(
|
||||
"/api/v1/users/",
|
||||
json={
|
||||
"email": "shortpw@test.com",
|
||||
"password": "short",
|
||||
"full_name": "Short PW",
|
||||
"role": "verkaeufer",
|
||||
"language": "de",
|
||||
},
|
||||
)
|
||||
assert response.status_code == 422
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_update_user_as_admin(admin_client: AsyncClient, admin_user: User, verkaeufer_user: User):
|
||||
async def test_update_user_as_admin(
|
||||
admin_client: AsyncClient, admin_user: User, verkaeufer_user: User
|
||||
):
|
||||
"""PUT /api/v1/users/:id as admin updates user fields, returns 200."""
|
||||
response = await admin_client.put(
|
||||
f"/api/v1/users/{verkaeufer_user.id}",
|
||||
@@ -134,7 +148,9 @@ async def test_update_user_nonexistent(admin_client: AsyncClient):
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_delete_user_soft_deactivate(admin_client: AsyncClient, verkaeufer_user: User):
|
||||
async def test_delete_user_soft_deactivate(
|
||||
admin_client: AsyncClient, verkaeufer_user: User
|
||||
):
|
||||
"""DELETE /api/v1/users/:id soft-deletes (is_active=false), returns 200."""
|
||||
response = await admin_client.delete(f"/api/v1/users/{verkaeufer_user.id}")
|
||||
assert response.status_code == 200
|
||||
@@ -152,14 +168,18 @@ async def test_delete_user_nonexistent(admin_client: AsyncClient):
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_delete_user_as_non_admin(verkaeufer_client: AsyncClient, admin_user: User):
|
||||
async def test_delete_user_as_non_admin(
|
||||
verkaeufer_client: AsyncClient, admin_user: User
|
||||
):
|
||||
"""DELETE /api/v1/users/:id as verkaeufer returns 403."""
|
||||
response = await verkaeufer_client.delete(f"/api/v1/users/{admin_user.id}")
|
||||
assert response.status_code == 403
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_user_response_excludes_password_hash(admin_client: AsyncClient, admin_user: User):
|
||||
async def test_user_response_excludes_password_hash(
|
||||
admin_client: AsyncClient, admin_user: User
|
||||
):
|
||||
"""User response never includes password_hash or password fields."""
|
||||
response = await admin_client.get("/api/v1/users/")
|
||||
assert response.status_code == 200
|
||||
|
||||
Reference in New Issue
Block a user