diff --git a/server/testing/tests/first_test.py b/server/testing/tests/JWT_test.py similarity index 100% rename from server/testing/tests/first_test.py rename to server/testing/tests/JWT_test.py diff --git a/server/testing/tests/Permissions_test.py b/server/testing/tests/Permissions_test.py new file mode 100644 index 0000000..03d64ee --- /dev/null +++ b/server/testing/tests/Permissions_test.py @@ -0,0 +1,35 @@ +import pytest +import uuid #для генерации рандомного uuid +from httpx import AsyncClient, ASGITransport +from fastapi import status +from server.backend import JWT # твой JWT модуль +from server.backend.endpoints import api +from server.testing.conftest import client +from server.database import db +@pytest.mark.asyncio +async def test_is_admin(client, monkeypatch): + '''Проверка: Может ли человек без админки менять права''' + + random_email = f"user_{uuid.uuid4().hex[:8]}@test.local" + async def fake_user(): + class FakeUser: + email = random_email + permissions = [{"is_admin": False}] + password = "123qwe!@#" + description = "test_user" + activated = True + return FakeUser() + + async def fake_current_user(): #фейковая зависимость (fake_current_user) — функция, которая имитирует поведение настоящего JWT.current_user, но просто возвращает строку "test_user". + user_email = await fake_user() + return user_email.email + + user = await fake_user() #Создаем экземпляр для добавления в бд + await db.create_user(user) + + api.dependency_overrides[JWT.current_user] = fake_current_user + response = await client.put(f"/user_update/{fake_current_user}", headers={"Authorization": "Bearer faketoken"}, data={"can_edit":True}) + assert response.status_code == status.HTTP_403_FORBIDDEN + + await db.delete_user(user.email) #удаляется юзер из бд после теста + api.dependency_overrides.clear()