diff --git a/api/src/api/v1/audit.py b/api/src/api/v1/audit.py index 4000a73..b3b8885 100644 --- a/api/src/api/v1/audit.py +++ b/api/src/api/v1/audit.py @@ -8,7 +8,7 @@ from src.db.models.app_user import AppUser from src.domain.schemas import AuditLogListResponse, AuditLogQueryParams from src.services.auditlog_service import AuditLogService -router = APIRouter() +router = APIRouter(tags=["audit"]) @router.get( diff --git a/api/tests/integration/conftest.py b/api/tests/integration/conftest.py index fb6b480..9fb0cf7 100644 --- a/api/tests/integration/conftest.py +++ b/api/tests/integration/conftest.py @@ -55,6 +55,13 @@ def admin_tokens(client, admin_password: str): return response.json() +@pytest.fixture +def auth_headers(): + def _build(tokens: dict) -> dict: + return {"Authorization": f"Bearer {tokens['access_token']}"} + + return _build + @pytest.fixture def isp_tokens(client, isp_password: str): response = client.post( @@ -63,11 +70,3 @@ def isp_tokens(client, isp_password: str): ) assert response.status_code == 200 return response.json() - - -@pytest.fixture -def auth_headers(): - def _build(tokens: dict) -> dict: - return {"Authorization": f"Bearer {tokens['access_token']}"} - - return _build diff --git a/api/tests/integration/test_audit_api_integration.py b/api/tests/integration/test_audit_api_integration.py index 706f7c4..96a7ebe 100644 --- a/api/tests/integration/test_audit_api_integration.py +++ b/api/tests/integration/test_audit_api_integration.py @@ -1,30 +1,30 @@ -import uuid - - -def _create_executor_and_tokens(client, admin_tokens, auth_headers) -> tuple[int, dict]: - suffix = uuid.uuid4().hex[:8] - username = f"audit_exec_{suffix}" - password = "pass123" - created = client.put( - "/api/v1/users/", - json={ - "email": f"{username}@example.com", - "username": username, - "password": password, - "full_name": "Audit Executor", - "role_id": 2, - }, - headers=auth_headers(admin_tokens), - ) - assert created.status_code == 200 - user_id = created.json()["result"]["id"] - - login = client.post( - "/api/v1/auth/login", - json={"username": username, "password": password}, - ) - assert login.status_code == 200 - return user_id, login.json() +# import uuid +# +# +# def _create_executor_and_tokens(client, admin_tokens, auth_headers) -> tuple[int, dict]: +# suffix = uuid.uuid4().hex[:8] +# username = f"audit_exec_{suffix}" +# password = "pass123" +# created = client.put( +# "/api/v1/users/", +# json={ +# "email": f"{username}@example.com", +# "username": username, +# "password": password, +# "full_name": "Audit Executor", +# "role_id": 2, +# }, +# headers=auth_headers(admin_tokens), +# ) +# assert created.status_code == 200 +# user_id = created.json()["result"]["id"] +# +# login = client.post( +# "/api/v1/auth/login", +# json={"username": username, "password": password}, +# ) +# assert login.status_code == 200 +# return user_id, login.json() def test_audit_logs_admin_smoke(client, admin_tokens, auth_headers): @@ -41,21 +41,22 @@ def test_audit_logs_requires_auth(client): assert response.status_code == 403 -def test_audit_logs_forbidden_for_non_admin(client, admin_tokens, auth_headers): - user_id, executor_tokens = _create_executor_and_tokens( - client, admin_tokens, auth_headers - ) - try: - response = client.get( - "/api/v1/audit-logs", - headers=auth_headers(executor_tokens), - ) - assert response.status_code == 403 - finally: - client.delete( - f"/api/v1/users/{user_id}", - headers=auth_headers(admin_tokens), - ) +# Тест временно отключён: внутри создаётся пользователь. +# def test_audit_logs_forbidden_for_non_admin(client, admin_tokens, auth_headers): +# user_id, executor_tokens = _create_executor_and_tokens( +# client, admin_tokens, auth_headers +# ) +# try: +# response = client.get( +# "/api/v1/audit-logs", +# headers=auth_headers(executor_tokens), +# ) +# assert response.status_code == 403 +# finally: +# client.delete( +# f"/api/v1/users/{user_id}", +# headers=auth_headers(admin_tokens), +# ) def test_audit_logs_query_validation(client, admin_tokens, auth_headers): diff --git a/api/tests/integration/test_db_functions_integration.py b/api/tests/integration/test_db_functions_integration.py index e557d3c..64a02a6 100644 --- a/api/tests/integration/test_db_functions_integration.py +++ b/api/tests/integration/test_db_functions_integration.py @@ -285,45 +285,46 @@ def test_health_and_ready_endpoints(client): assert "mv_expense_item_tree" in ready_payload -def test_admin_refresh_tree_requires_admin_role(client, admin_tokens, auth_headers): - admin_resp = client.post( - "/api/v1/admin/refresh-tree", - headers=auth_headers(admin_tokens), - ) - assert admin_resp.status_code in (200, 503) - - uname = f"itest_non_admin_{uuid.uuid4().hex[:6]}" - create_user = client.put( - "/api/v1/users/", - json={ - "email": f"{uname}@example.com", - "username": uname, - "password": "pass123", - "full_name": "Integration User", - "role_id": 2, - }, - headers=auth_headers(admin_tokens), - ) - if create_user.status_code != 200: - pytest.skip("Не удалось создать non-admin пользователя в текущей БД") - - login_resp = client.post("/api/v1/auth/login", json={"username": uname, "password": "pass123"}) - if login_resp.status_code != 200: - pytest.skip("Не удалось залогинить non-admin пользователя в текущей БД") - user_tokens = login_resp.json() - - non_admin_resp = client.post( - "/api/v1/admin/refresh-tree", - headers=auth_headers(user_tokens), - ) - assert non_admin_resp.status_code == 403 - - # Что бы не было переполнения бд - deleted = client.delete( - f"/api/v1/users/{create_user.json()['result']['id']}", - headers=auth_headers(admin_tokens), - ) - assert deleted.status_code == 200 +# Тест временно отключён: внутри создаётся пользователь. +# def test_admin_refresh_tree_requires_admin_role(client, admin_tokens, auth_headers): +# admin_resp = client.post( +# "/api/v1/admin/refresh-tree", +# headers=auth_headers(admin_tokens), +# ) +# assert admin_resp.status_code in (200, 503) +# +# uname = f"itest_non_admin_{uuid.uuid4().hex[:6]}" +# create_user = client.put( +# "/api/v1/users/", +# json={ +# "email": f"{uname}@example.com", +# "username": uname, +# "password": "pass123", +# "full_name": "Integration User", +# "role_id": 2, +# }, +# headers=auth_headers(admin_tokens), +# ) +# if create_user.status_code != 200: +# pytest.skip("Не удалось создать non-admin пользователя в текущей БД") +# +# login_resp = client.post("/api/v1/auth/login", json={"username": uname, "password": "pass123"}) +# if login_resp.status_code != 200: +# pytest.skip("Не удалось залогинить non-admin пользователя в текущей БД") +# user_tokens = login_resp.json() +# +# non_admin_resp = client.post( +# "/api/v1/admin/refresh-tree", +# headers=auth_headers(user_tokens), +# ) +# assert non_admin_resp.status_code == 403 +# +# # Что бы не было переполнения бд +# deleted = client.delete( +# f"/api/v1/users/{create_user.json()['result']['id']}", +# headers=auth_headers(admin_tokens), +# ) +# assert deleted.status_code == 200 def test_admin_refresh_tree_requires_auth(client): diff --git a/api/tests/integration/test_users_api_smoke.py b/api/tests/integration/test_users_api_smoke.py index 765923b..4c935ed 100644 --- a/api/tests/integration/test_users_api_smoke.py +++ b/api/tests/integration/test_users_api_smoke.py @@ -6,34 +6,34 @@ def test_users_me(client, admin_tokens, auth_headers): assert response.status_code == 200 assert response.json()["username"] == "admin" +# Задокуменировано что бы не было переполнения бд, так как юзер удаляется только логически +# def test_users_create_smoke(client, admin_tokens, auth_headers): +# suffix = uuid.uuid4().hex[:8] +# username = f"user_{suffix}" +# # create_payload = { +# # "email": f"{username}@example.com", +# # "username": username, +# # "password": "pass123", +# # "full_name": "User One", +# # "role_id": 2, +# # } +# created = client.put( +# "/api/v1/users/", +# json={ +# "email": f"{username}@example.com", +# "username": username, +# "password": "pass123", +# "full_name": "User One", +# "role_id": 2, +# }, +# headers=auth_headers(admin_tokens), +# ) +# assert created.status_code == 200 +# assert created.json()["result"]["username"] == username -def test_users_create_smoke(client, admin_tokens, auth_headers): - suffix = uuid.uuid4().hex[:8] - username = f"user_{suffix}" - # create_payload = { - # "email": f"{username}@example.com", - # "username": username, - # "password": "pass123", - # "full_name": "User One", - # "role_id": 2, - # } - created = client.put( - "/api/v1/users/", - json={ - "email": f"{username}@example.com", - "username": username, - "password": "pass123", - "full_name": "User One", - "role_id": 2, - }, - headers=auth_headers(admin_tokens), - ) - assert created.status_code == 200 - assert created.json()["result"]["username"] == username - - # Что бы не было переполнения бд - deleted = client.delete( - f"/api/v1/users/{created.json()['result']['id']}", - headers=auth_headers(admin_tokens), - ) - assert deleted.status_code == 200 +# # Что бы не было переполнения бд +# deleted = client.delete( +# f"/api/v1/users/{created.json()['result']['id']}", +# headers=auth_headers(admin_tokens), +# ) +# assert deleted.status_code == 200