Files
The_DisExcel_project/tests/integrated/test_users_crud.py
T
2026-08-21 14:12:45 +03:00

68 lines
3.5 KiB
Python

from types import SimpleNamespace
from unittest.mock import AsyncMock
import allure
import pytest
from fastapi import HTTPException
from src.models.pydantic_models.model import UserCreate, UserUpdate
from src.service.users_crud.users_crud import CrudService
@pytest.mark.integra
class TestCrud:
@pytest.mark.parametrize("user_data", [
pytest.param(SimpleNamespace(first_name="test",last_name="test",middle_name="test",email="d@d.d",direct_permissions=[],group=[], plain_password="Test1234!"),id="Create_user_positive")
])
async def test_create_user_positive(self, crud_service:CrudService, monkeypatch, user_data:SimpleNamespace)->None:
with allure.step("Patching functions"):
monkeypatch.setattr(crud_service.crud_db_actions, "create_user", AsyncMock(return_value=user_data))
with allure.step("Test Create User"):
await crud_service.create_user(UserCreate.model_validate(user_data))
@pytest.mark.parametrize("user_data,expected_exception,expected_status ", [
pytest.param(SimpleNamespace(first_name="test",last_name="test",middle_name="test",email="d@d.d",direct_permissions=[],group=[], plain_password="Test1234!"),HTTPException,422,id="Create_user_None")
])
async def test_create_user_negative(self, crud_service:CrudService, monkeypatch, user_data:SimpleNamespace, expected_exception, expected_status:int)->None:
with allure.step("Patching functions"):
monkeypatch.setattr(crud_service.crud_db_actions, "create_user", AsyncMock(return_value=None))
with allure.step("Test Create User"), pytest.raises(expected_exception) as exc_info:
await crud_service.create_user(UserCreate.model_validate(user_data))
if expected_exception is HTTPException:
assert exc_info.value.status_code == expected_status
@pytest.mark.parametrize("user_data", [
pytest.param(SimpleNamespace(first_name="test",last_name="test",middle_name="test",email="d@d.d",direct_permissions=[],group=[], plain_password="Test1234!"),id="Create_user_positive")
])
async def test_update_user_positive(self, crud_service:CrudService, monkeypatch, user_data:SimpleNamespace)->None:
with allure.step("Patching functions"):
monkeypatch.setattr(crud_service.crud_db_actions, "update_user_partially", AsyncMock(return_value=user_data))
with allure.step("Test Update User"):
await crud_service.update_user(user_data.email,UserUpdate.model_validate(user_data))
@pytest.mark.parametrize("user_data,expected_exception,expected_status ", [
pytest.param(SimpleNamespace(first_name="test",last_name="test",middle_name="test",email="d@d.d",direct_permissions=[],group=[], plain_password="Test1234!"),HTTPException,404,id="Update_user_None"),
pytest.param(SimpleNamespace(),HTTPException,400,id="Empty_user_data")
])
async def test_update_user_negative(self, crud_service:CrudService, monkeypatch, user_data:SimpleNamespace, expected_exception, expected_status:int)->None:
with allure.step("Patching functions"):
monkeypatch.setattr(crud_service.crud_db_actions, "update_user_partially", AsyncMock(return_value=None))
with allure.step("Test Update User"), pytest.raises(expected_exception) as exc_info:
await crud_service.update_user("d@d.d",UserUpdate.model_validate(user_data))
if expected_exception is HTTPException:
assert exc_info.value.status_code == expected_status