refactor tests for src.db.models... and for new code, message, field error response

This commit is contained in:
Raykov-MS 2026-05-14 16:22:59 +03:00
parent 312c8db04f
commit 13db21c4af
5 changed files with 34 additions and 33 deletions

View File

@ -5,7 +5,8 @@ from sqlalchemy.ext.asyncio import AsyncSession
from src.core.config import settings from src.core.config import settings
from src.core.security import verify_token from src.core.security import verify_token
from src.db.session import get_db from src.db.session import get_db
from src.domain.models import UserRole, Users from src.db.models.app_user import AppUser
from src.db.models.role import UserRoleEnum
from src.repository.user_repository import UserRepository from src.repository.user_repository import UserRepository
security = HTTPBearer() security = HTTPBearer()
@ -16,7 +17,7 @@ if settings.DEBUG:
async def get_current_user( async def get_current_user(
credentials: HTTPAuthorizationCredentials = Depends(security), credentials: HTTPAuthorizationCredentials = Depends(security),
db: AsyncSession = Depends(get_db), db: AsyncSession = Depends(get_db),
) -> Users: ) -> AppUser:
token = credentials.credentials token = credentials.credentials
payload = verify_token(token) payload = verify_token(token)
if payload is None: if payload is None:
@ -52,7 +53,7 @@ else:
async def get_current_user( async def get_current_user(
user: UserInfo = Depends(get_user_dependency), user: UserInfo = Depends(get_user_dependency),
db: AsyncSession = Depends(get_db), db: AsyncSession = Depends(get_db),
) -> Users: ) -> AppUser:
user_repo = UserRepository(db) user_repo = UserRepository(db)
db_user = await user_repo.get_by_email(user.email) db_user = await user_repo.get_by_email(user.email)
if db_user is None: if db_user is None:
@ -64,22 +65,22 @@ else:
return db_user return db_user
async def get_current_active_user(current_user: Users = Depends(get_current_user)) -> Users: async def get_current_active_user(current_user: AppUser = Depends(get_current_user)) -> AppUser:
return current_user return current_user
async def get_current_active_user_with_set_db( async def get_current_active_user_with_set_db(
current_user: Users = Depends(get_current_user), current_user: AppUser = Depends(get_current_user),
db: AsyncSession = Depends(get_db), db: AsyncSession = Depends(get_db),
) -> Users: ) -> AppUser:
user_repo = UserRepository(db) user_repo = UserRepository(db)
await user_repo.set_app_user_id(current_user.id) await user_repo.set_app_user_id(current_user.id)
return current_user return current_user
def require_admin(current_user: Users = Depends(get_current_active_user)) -> Users: def require_admin(current_user: AppUser = Depends(get_current_active_user)) -> AppUser:
if current_user.role_id != UserRole.ADMIN: if current_user.role_id != UserRoleEnum.ADMIN:
raise HTTPException( raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN, status_code=status.HTTP_403_FORBIDDEN,
detail="Недостаточно прав", detail="Недостаточно прав",
@ -87,11 +88,11 @@ def require_admin(current_user: Users = Depends(get_current_active_user)) -> Use
return current_user return current_user
def require_executor(current_user: Users = Depends(get_current_active_user)) -> Users: def require_executor(current_user: AppUser = Depends(get_current_active_user)) -> AppUser:
if current_user.role_id not in [ if current_user.role_id not in [
UserRole.ADMIN, UserRoleEnum.ADMIN,
UserRole.EXECUTOR_DFIP, UserRoleEnum.EXECUTOR_DFIP,
UserRole.EXECUTOR_RF, UserRoleEnum.EXECUTOR_RF,
]: ]:
raise HTTPException( raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN, status_code=status.HTTP_403_FORBIDDEN,
@ -100,8 +101,8 @@ def require_executor(current_user: Users = Depends(get_current_active_user)) ->
return current_user return current_user
def require_executor_dfip(current_user: Users = Depends(get_current_active_user)) -> Users: def require_executor_dfip(current_user: AppUser = Depends(get_current_active_user)) -> AppUser:
if current_user.role_id not in [UserRole.ADMIN, UserRole.EXECUTOR_DFIP]: if current_user.role_id not in [UserRoleEnum.ADMIN, UserRoleEnum.EXECUTOR_DFIP]:
raise HTTPException( raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN, status_code=status.HTTP_403_FORBIDDEN,
detail="Недостаточно прав", detail="Недостаточно прав",

View File

@ -3,7 +3,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
from src.api.v1.deps import get_current_active_user, require_admin, require_executor_dfip from src.api.v1.deps import get_current_active_user, require_admin, require_executor_dfip
from src.db.session import get_db from src.db.session import get_db
from src.domain.models import Users from src.db.models.app_user import AppUser
from src.domain.schemas import User as UserSchema from src.domain.schemas import User as UserSchema
from src.domain.schemas import ( from src.domain.schemas import (
SSPIDList, SSPIDList,
@ -21,7 +21,7 @@ router = APIRouter(prefix="/users", tags=["users"])
@router.get("/me", response_model=UserSchema) @router.get("/me", response_model=UserSchema)
async def get_current_user_info(current_user: Users = Depends(get_current_active_user)): async def get_current_user_info(current_user: AppUser = Depends(get_current_active_user)):
return current_user return current_user
@ -30,7 +30,7 @@ async def get_users(
skip: int = 0, skip: int = 0,
limit: int = 100, limit: int = 100,
db: AsyncSession = Depends(get_db), db: AsyncSession = Depends(get_db),
current_user: Users = Depends(require_admin), current_user: AppUser = Depends(require_admin),
): ):
user_service = UserService(db) user_service = UserService(db)
users = await user_service.get_all(current_user, skip=skip, limit=limit) users = await user_service.get_all(current_user, skip=skip, limit=limit)
@ -41,7 +41,7 @@ async def get_users(
async def get_many_ssp( async def get_many_ssp(
user_id: int, user_id: int,
db: AsyncSession = Depends(get_db), db: AsyncSession = Depends(get_db),
current_user: Users = Depends(require_executor_dfip), current_user: AppUser = Depends(require_executor_dfip),
): ):
user_service = UserService(db) user_service = UserService(db)
ssp_list = await user_service.get_many_ssp(user_id, current_user) ssp_list = await user_service.get_many_ssp(user_id, current_user)
@ -57,7 +57,7 @@ async def set_many_ssp(
user_id: int, user_id: int,
ssp_ids_data: SSPIDList, ssp_ids_data: SSPIDList,
db: AsyncSession = Depends(get_db), db: AsyncSession = Depends(get_db),
current_user: Users = Depends(require_admin), current_user: AppUser = Depends(require_admin),
): ):
user_service = UserService(db) user_service = UserService(db)
success = await user_service.set_many_ssp(user_id, ssp_ids_data.ssp_ids, current_user) success = await user_service.set_many_ssp(user_id, ssp_ids_data.ssp_ids, current_user)
@ -72,7 +72,7 @@ async def unset_many_ssp(
user_id: int, user_id: int,
ssp_ids_data: SSPIDList, ssp_ids_data: SSPIDList,
db: AsyncSession = Depends(get_db), db: AsyncSession = Depends(get_db),
current_user: Users = Depends(require_admin), current_user: AppUser = Depends(require_admin),
): ):
user_service = UserService(db) user_service = UserService(db)
success = await user_service.unset_many_ssp( success = await user_service.unset_many_ssp(
@ -88,7 +88,7 @@ async def unset_many_ssp(
async def get_user( async def get_user(
user_id: int, user_id: int,
db: AsyncSession = Depends(get_db), db: AsyncSession = Depends(get_db),
current_user: Users = Depends(require_admin), current_user: AppUser = Depends(require_admin),
): ):
user_service = UserService(db) user_service = UserService(db)
user = await user_service.get(user_id, current_user) user = await user_service.get(user_id, current_user)
@ -104,7 +104,7 @@ async def get_user(
async def create_user( async def create_user(
user_data: UserCreate, user_data: UserCreate,
db: AsyncSession = Depends(get_db), db: AsyncSession = Depends(get_db),
current_user: Users = Depends(require_admin), current_user: AppUser = Depends(require_admin),
): ):
user_service = UserService(db) user_service = UserService(db)
user = await user_service.create_user(user_data=user_data, creator=current_user) user = await user_service.create_user(user_data=user_data, creator=current_user)
@ -116,7 +116,7 @@ async def update_user(
user_id: int, user_id: int,
user_data: UserUpdate, user_data: UserUpdate,
db: AsyncSession = Depends(get_db), db: AsyncSession = Depends(get_db),
current_user: Users = Depends(require_admin), current_user: AppUser = Depends(require_admin),
): ):
user_service = UserService(db) user_service = UserService(db)
user = await user_service.update_user( user = await user_service.update_user(
@ -131,7 +131,7 @@ async def update_user(
async def delete_user( async def delete_user(
user_id: int, user_id: int,
db: AsyncSession = Depends(get_db), db: AsyncSession = Depends(get_db),
current_user: Users = Depends(require_admin), current_user: AppUser = Depends(require_admin),
): ):
user_service = UserService(db) user_service = UserService(db)
await user_service.delete_user(user_id=user_id, user=current_user) await user_service.delete_user(user_id=user_id, user=current_user)

View File

@ -10,7 +10,7 @@ from src.db.models.role import Role
from src.db.models.user_org import UserOrg from src.db.models.user_org import UserOrg
from src.db.models.app_user import AppUser from src.db.models.app_user import AppUser
from src.core.security import get_password_hash, verify_password from src.core.security import get_password_hash, verify_password
# from src.domain.models import Role, OrgUnit, UserOrg, AppUser
class UserRepository: class UserRepository:

View File

@ -32,7 +32,7 @@ def test_forms_sheet_get_not_found_error_shape(client, admin_tokens):
assert response.status_code == 404 assert response.status_code == 404
payload = response.json() payload = response.json()
assert isinstance(payload, dict) assert isinstance(payload, dict)
assert "detail" in payload assert "message" in payload
def test_forms_cell_update_not_found_error_shape(client, admin_tokens): def test_forms_cell_update_not_found_error_shape(client, admin_tokens):
@ -44,7 +44,7 @@ def test_forms_cell_update_not_found_error_shape(client, admin_tokens):
assert response.status_code == 404 assert response.status_code == 404
payload = response.json() payload = response.json()
assert isinstance(payload, dict) assert isinstance(payload, dict)
assert "detail" in payload assert "message" in payload
def test_forms_cell_update(client, admin_tokens): def test_forms_cell_update(client, admin_tokens):
@ -72,7 +72,7 @@ def test_forms_cells_update_not_found_error_shape(client, admin_tokens):
assert response.status_code == 404 assert response.status_code == 404
payload = response.json() payload = response.json()
assert isinstance(payload, dict) assert isinstance(payload, dict)
assert "detail" in payload assert "message" in payload
def test_forms_cells_update(client, admin_tokens): def test_forms_cells_update(client, admin_tokens):
@ -104,7 +104,7 @@ def test_forms_add_line_not_found_error_shape(client, admin_tokens):
assert response.status_code == 404 assert response.status_code == 404
payload = response.json() payload = response.json()
assert isinstance(payload, dict) assert isinstance(payload, dict)
assert "detail" in payload assert "message" in payload
def test_forms_add_line(client, admin_tokens): def test_forms_add_line(client, admin_tokens):
@ -130,4 +130,4 @@ def test_forms_delete_line_not_found_error_shape(client, admin_tokens):
assert response.status_code == 404 assert response.status_code == 404
payload = response.json() payload = response.json()
assert isinstance(payload, dict) assert isinstance(payload, dict)
assert "detail" in payload assert "message" in payload

View File

@ -104,8 +104,8 @@ def test_projects_write_invalid_report_type_error_shape(client, admin_tokens):
assert response.status_code == 400 assert response.status_code == 400
payload = response.json() payload = response.json()
assert isinstance(payload, dict) assert isinstance(payload, dict)
assert "detail" in payload assert "message" in payload
assert isinstance(payload["detail"], str) assert isinstance(payload["message"], str)
def test_projects_write_report_not_found_error_shape(client, admin_tokens): def test_projects_write_report_not_found_error_shape(client, admin_tokens):
@ -120,4 +120,4 @@ def test_projects_write_report_not_found_error_shape(client, admin_tokens):
assert response.status_code == 400 assert response.status_code == 400
payload = response.json() payload = response.json()
assert isinstance(payload, dict) assert isinstance(payload, dict)
assert payload.get("detail") == "Отчёт не найден" assert payload.get("message") == "Отчёт не найден"