From 9f2d51ec062ba06683b91fbb0f622c2d9cfbbdfa Mon Sep 17 00:00:00 2001 From: Nikolay Shirokov Date: Fri, 9 Oct 2026 18:40:06 +0300 Subject: [PATCH] fix(api tests): check call mocked objects in tests --- backend/tests/test_services/test_auth.py | 1 - .../test_projects/test_project.py | 109 ++++++++++++------ .../test_projects/test_project_pagination.py | 55 +++++++-- .../test_render_generate_handler.py | 28 +++-- backend/tests/test_services/test_tag.py | 89 +++++++++----- backend/tests/test_services/test_user.py | 36 +++--- 6 files changed, 220 insertions(+), 98 deletions(-) diff --git a/backend/tests/test_services/test_auth.py b/backend/tests/test_services/test_auth.py index c69f138..11d250a 100644 --- a/backend/tests/test_services/test_auth.py +++ b/backend/tests/test_services/test_auth.py @@ -41,7 +41,6 @@ async def test_register_not_unique_username( auth_service: AuthService, ) -> None: await auth_service.register(register_user_data) - register_user_data.email = "email2@email.com" with pytest.raises(UserUsernameAlreadyExistsError): await auth_service.register(register_user_data) diff --git a/backend/tests/test_services/test_projects/test_project.py b/backend/tests/test_services/test_projects/test_project.py index a9190b1..d4db07b 100644 --- a/backend/tests/test_services/test_projects/test_project.py +++ b/backend/tests/test_services/test_projects/test_project.py @@ -22,13 +22,13 @@ async def test_get_by_id_valid( minio_client: MinioClient, project_service: ProjectService, ) -> None: - mocker.patch.object( + validator_mock = mocker.patch.object( project_service.project_access_validator, "validate_access_to_get_project", return_value=full_project, autospec=True, ) - mocker.patch( + get_from_database_mock = mocker.patch( "services.projects.project.ProjectWithRenderFileFullResponse.get_from_database", return_value=full_project, autospec=True, @@ -39,6 +39,11 @@ async def test_get_by_id_valid( project_owner.id, minio_client, ) + validator_mock.assert_called_once_with( + project_id=full_project.id, + user_id=project_owner.id, + ) + get_from_database_mock.assert_called_once() async def test_get_by_id_project_not_exists( self, @@ -48,8 +53,8 @@ async def test_get_by_id_project_not_exists( minio_client: MinioClient, project_service: ProjectService, ) -> None: - mocker.patch.object( - project_service.project_repository, + get_project_by_id_mock = mocker.patch.object( + project_service.project_access_validator.project_repository, "get_by_id", return_value=None, autospec=True, @@ -61,6 +66,8 @@ async def test_get_by_id_project_not_exists( minio_client, ) + get_project_by_id_mock.assert_called_once_with(project_id=full_project.id) + async def test_get_private_project_by_id_not_by_owner( self, project_owner: User, @@ -70,13 +77,13 @@ async def test_get_private_project_by_id_not_by_owner( project_service: ProjectService, ) -> None: full_project.visibility = ProjectVisibility.private - mocker.patch.object( + get_project_by_id_mock = mocker.patch.object( project_service.project_access_validator.project_repository, "get_by_id", return_value=full_project, autospec=True, ) - mocker.patch.object( + get_project_owner_mock = mocker.patch.object( project_service.project_access_validator.project_repository, "get_project_owner", return_value=project_owner, @@ -89,6 +96,9 @@ async def test_get_private_project_by_id_not_by_owner( minio_client, ) + get_project_by_id_mock.assert_called_once_with(project_id=full_project.id) + get_project_owner_mock.assert_called_once_with(project_id=full_project.id) + async def test_create_project_valid( self, create_project_request: ProjectWithRenderCreate, @@ -99,36 +109,42 @@ async def test_create_project_valid( mocker: MockerFixture, project_service: ProjectService, ) -> None: - mocker.patch.object( + get_file_by_id_mock = mocker.patch.object( project_service.file_repository, "get_by_id", return_value=source_file, autospec=True, ) - mocker.patch.object( + create_render_mock = mocker.patch.object( project_service.render_repository, "create_render", return_value=render, autospec=True, ) - mocker.patch.object( + create_project_mock = mocker.patch.object( project_service.project_repository, "create_project", return_value=full_project, autospec=True, ) - mocker.patch.object( + create_event_mock = mocker.patch.object( project_service.outbox_repository, "create_event", return_value=None, autospec=True, ) - await project_service.create_project( user_id=project_owner.id, create_project=create_project_request, ) + get_file_by_id_mock.assert_called_once_with( + file_id=create_project_request.project.source_file_id, + ) + create_render_mock.assert_called_once() + create_project_mock.assert_called_once() + create_event_mock.assert_called_once() + async def test_create_project_file_not_exists( self, create_project_request: ProjectWithRenderCreate, @@ -136,7 +152,7 @@ async def test_create_project_file_not_exists( mocker: MockerFixture, project_service: ProjectService, ) -> None: - mocker.patch.object( + get_file_by_id_mock = mocker.patch.object( project_service.file_repository, "get_by_id", return_value=None, @@ -148,6 +164,10 @@ async def test_create_project_file_not_exists( create_project=create_project_request, ) + get_file_by_id_mock.assert_called_once_with( + file_id=create_project_request.project.source_file_id, + ) + async def test_partial_update_project_valid( self, project_owner: User, @@ -155,25 +175,19 @@ async def test_partial_update_project_valid( mocker: MockerFixture, project_service: ProjectService, ) -> None: - mocker.patch.object( + get_project_by_id_mock = mocker.patch.object( project_service.project_access_validator.project_repository, "get_by_id", return_value=full_project, autospec=True, ) - mocker.patch.object( + get_project_owner_mock = mocker.patch.object( project_service.project_access_validator.project_repository, "get_project_owner", return_value=project_owner, autospec=True, ) - mocker.patch.object( - project_service.project_repository, - "get_project_owner", - return_value=project_owner, - autospec=True, - ) - mocker.patch.object( + partial_update_project_mock = mocker.patch.object( project_service.project_repository, "partial_update_project", return_value=full_project, @@ -188,6 +202,13 @@ async def test_partial_update_project_valid( partial_update_project_data, ) + get_project_by_id_mock.assert_called_once_with(project_id=full_project.id) + get_project_owner_mock.assert_called_once_with(project_id=full_project.id) + partial_update_project_mock.assert_called_once_with( + project_id=full_project.id, + partial_update_project_data=partial_update_project_data, + ) + async def test_partial_update_project_not_exists( self, project_owner: User, @@ -195,8 +216,8 @@ async def test_partial_update_project_not_exists( mocker: MockerFixture, project_service: ProjectService, ) -> None: - mocker.patch.object( - project_service.project_repository, + get_project_by_id_mock = mocker.patch.object( + project_service.project_access_validator.project_repository, "get_by_id", return_value=None, autospec=True, @@ -211,6 +232,8 @@ async def test_partial_update_project_not_exists( partial_update_project_data, ) + get_project_by_id_mock.assert_called_once_with(full_project.id) + async def test_partial_update_project_not_by_owner( self, project_owner: User, @@ -218,13 +241,13 @@ async def test_partial_update_project_not_by_owner( mocker: MockerFixture, project_service: ProjectService, ) -> None: - mocker.patch.object( + get_project_by_id_mock = mocker.patch.object( project_service.project_access_validator.project_repository, "get_by_id", return_value=full_project, autospec=True, ) - mocker.patch.object( + get_project_owner_mock = mocker.patch.object( project_service.project_access_validator.project_repository, "get_project_owner", return_value=project_owner, @@ -240,6 +263,9 @@ async def test_partial_update_project_not_by_owner( partial_update_project_data, ) + get_project_by_id_mock.assert_called_once_with(project_id=full_project.id) + get_project_owner_mock.assert_called_once_with(project_id=full_project.id) + async def test_delete_by_id_valid( self, project_owner: User, @@ -247,17 +273,25 @@ async def test_delete_by_id_valid( mocker: MockerFixture, project_service: ProjectService, ) -> None: - mocker.patch.object( + get_project_by_id_mock = mocker.patch.object( project_service.project_access_validator.project_repository, "get_by_id", return_value=full_project, ) - mocker.patch.object( + get_project_owner_mock = mocker.patch.object( project_service.project_access_validator.project_repository, "get_project_owner", return_value=project_owner, ) + delete_project_by_id_mock = mocker.patch.object( + project_service.project_repository, + "delete_by_id", + return_value=None, + ) await project_service.delete_by_id(full_project.id, project_owner.id) + get_project_by_id_mock.assert_called_once_with(full_project.id) + get_project_owner_mock.assert_called_once_with(full_project.id) + delete_project_by_id_mock.assert_called_once_with(full_project.id) async def test_delete_by_id_project_not_exists( self, @@ -266,14 +300,16 @@ async def test_delete_by_id_project_not_exists( mocker: MockerFixture, project_service: ProjectService, ) -> None: - mocker.patch.object( - project_service.project_repository, + get_project_by_id_mock = mocker.patch.object( + project_service.project_access_validator.project_repository, "get_by_id", return_value=None, ) with pytest.raises(ProjectIdNotFoundError): await project_service.delete_by_id(full_project.id, project_owner.id) + get_project_by_id_mock.assert_called_once_with(full_project.id) + async def test_delete_by_id_not_by_owner( self, project_owner: User, @@ -281,15 +317,18 @@ async def test_delete_by_id_not_by_owner( mocker: MockerFixture, project_service: ProjectService, ) -> None: - mocker.patch.object( - project_service.project_repository, + get_project_by_id_mock = mocker.patch.object( + project_service.project_access_validator.project_repository, "get_by_id", - return_value=None, + return_value=full_project, ) - mocker.patch.object( - project_service.project_repository, + get_project_owner_mock = mocker.patch.object( + project_service.project_access_validator.project_repository, "get_project_owner", return_value=project_owner, ) - with pytest.raises(ProjectIdNotFoundError): + with pytest.raises(PermissionDeniedError): await project_service.delete_by_id(full_project.id, project_owner.id + 1) + + get_project_by_id_mock.assert_called_once_with(full_project.id) + get_project_owner_mock.assert_called_once_with(full_project.id) diff --git a/backend/tests/test_services/test_projects/test_project_pagination.py b/backend/tests/test_services/test_projects/test_project_pagination.py index a11626e..9be5176 100644 --- a/backend/tests/test_services/test_projects/test_project_pagination.py +++ b/backend/tests/test_services/test_projects/test_project_pagination.py @@ -2,6 +2,7 @@ from core.exceptions.user import UserIdNotFoundError from infrastructure.database.models import Project, User from pytest_mock import MockerFixture +from schemas.project import ProjectFullResponse from services.projects.project_pagination import ProjectPaginationService @@ -13,21 +14,29 @@ async def test_get_user_projects_valid( mocker: MockerFixture, project_pagination_service: ProjectPaginationService, ) -> None: - mocker.patch.object( + get_user_mock = mocker.patch.object( project_pagination_service.user_repository, "get_by_id", return_value=project_owner, ) - mocker.patch.object( + get_user_projects_mock = mocker.patch.object( project_pagination_service.project_repository, "get_user_projects", return_value=[full_project], autospec=True, ) + size, page = 10, 1 await project_pagination_service.get_user_projects( project_owner.id, - size=10, - page=1, + size=size, + page=page, + ) + + get_user_mock.assert_called_once_with(project_owner.id) + get_user_projects_mock.assert_called_once_with( + project_owner.id, + size, + page, ) async def test_get_user_projects_user_not_exists( @@ -36,7 +45,7 @@ async def test_get_user_projects_user_not_exists( mocker: MockerFixture, project_pagination_service: ProjectPaginationService, ) -> None: - mocker.patch.object( + get_user_mock = mocker.patch.object( project_pagination_service.user_repository, "get_by_id", return_value=None, @@ -49,38 +58,58 @@ async def test_get_user_projects_user_not_exists( page=1, ) + get_user_mock.assert_called_once_with(project_owner.id) + async def test_get_public_projects_valid( self, full_project: Project, mocker: MockerFixture, project_pagination_service: ProjectPaginationService, ) -> None: - mocker.patch.object( + get_public_projects_mock = mocker.patch.object( project_pagination_service.project_repository, "get_public_projects", return_value=[full_project], autospec=True, ) + size, page = 10, 1 await project_pagination_service.get_public_projects( - size=10, - page=1, + size=size, + page=page, ) + get_public_projects_mock.assert_called_once_with(size, page) + async def test_get_user_public_projects_valid( self, project_owner: User, + full_project: ProjectFullResponse, mocker: MockerFixture, project_pagination_service: ProjectPaginationService, ) -> None: - mocker.patch.object( + get_user_mock = mocker.patch.object( project_pagination_service.user_repository, "get_by_id", return_value=project_owner, ) + get_user_public_projects_mock = mocker.patch.object( + project_pagination_service.project_repository, + "get_user_public_projects", + return_value=[full_project], + autospec=True, + ) + size, page = 10, 1 await project_pagination_service.get_user_public_projects( user_id=project_owner.id, - size=10, - page=1, + size=size, + page=page, + ) + + get_user_mock.assert_called_once_with(project_owner.id) + get_user_public_projects_mock.assert_called_once_with( + project_owner.id, + size, + page, ) async def test_get_user_public_projects_user_not_exists( @@ -89,7 +118,7 @@ async def test_get_user_public_projects_user_not_exists( mocker: MockerFixture, project_pagination_service: ProjectPaginationService, ) -> None: - mocker.patch.object( + get_user_mock = mocker.patch.object( project_pagination_service.user_repository, "get_by_id", return_value=None, @@ -100,3 +129,5 @@ async def test_get_user_public_projects_user_not_exists( size=10, page=1, ) + + get_user_mock.assert_called_once_with(project_owner.id) diff --git a/backend/tests/test_services/test_projects/test_render_generate_handler.py b/backend/tests/test_services/test_projects/test_render_generate_handler.py index f2b521f..3ea0cf6 100644 --- a/backend/tests/test_services/test_projects/test_render_generate_handler.py +++ b/backend/tests/test_services/test_projects/test_render_generate_handler.py @@ -17,22 +17,22 @@ async def test_handle_render_generated_valid( minio_client: MinioClient, render_generate_handler: RenderGenerateHandlerService, ) -> None: - mocker.patch.object( + get_project_by_id_mock = mocker.patch.object( render_generate_handler.project_repository, "get_by_id", return_value=full_project, ) - mocker.patch.object( + get_file_size_mock = mocker.patch.object( minio_client, "get_file_size", return_value=1000, ) - mocker.patch.object( + create_file_mock = mocker.patch.object( render_generate_handler.file_repository, "create_file", return_value=render_file, ) - mocker.patch.object( + add_render_file_mock = mocker.patch.object( render_generate_handler.render_repository, "add_render_file", return_value=None, @@ -42,6 +42,14 @@ async def test_handle_render_generated_valid( minio_client, ) + get_project_by_id_mock.assert_called_once_with(full_project.id) + get_file_size_mock.assert_called_once() + create_file_mock.assert_called_once() + add_render_file_mock.assert_called_once_with( + render_id=full_project.render_id, + file_id=render_file.id, + ) + async def test_handle_render_generated_project_not_exists( self, render_generated_event: RenderGeneratedEvent, @@ -49,7 +57,7 @@ async def test_handle_render_generated_project_not_exists( minio_client: MinioClient, render_generate_handler: RenderGenerateHandlerService, ) -> None: - mocker.patch.object( + get_project_by_id_mock = mocker.patch.object( render_generate_handler.project_repository, "get_by_id", return_value=None, @@ -60,18 +68,23 @@ async def test_handle_render_generated_project_not_exists( minio_client, ) + get_project_by_id_mock.assert_called_once_with( + render_generated_event.project_id, + ) + async def test_update_project_status_valid( self, full_project: Project, mocker: MockerFixture, render_generate_handler: RenderGenerateHandlerService, ) -> None: - mocker.patch.object( + update_project_status_mock = mocker.patch.object( render_generate_handler.project_repository, "update_project_status", return_value=full_project, ) await render_generate_handler.update_project_status(full_project.id) + update_project_status_mock.assert_called_once_with(full_project.id) async def test_update_not_exists_project( self, @@ -79,10 +92,11 @@ async def test_update_not_exists_project( mocker: MockerFixture, render_generate_handler: RenderGenerateHandlerService, ) -> None: - mocker.patch.object( + update_project_status_mock = mocker.patch.object( render_generate_handler.project_repository, "update_project_status", return_value=None, ) with pytest.raises(ProjectIdNotFoundError): await render_generate_handler.update_project_status(full_project.id) + update_project_status_mock.assert_called_once_with(full_project.id) diff --git a/backend/tests/test_services/test_tag.py b/backend/tests/test_services/test_tag.py index 85db3a0..485949c 100644 --- a/backend/tests/test_services/test_tag.py +++ b/backend/tests/test_services/test_tag.py @@ -19,19 +19,19 @@ async def test_get_project_tags_valid( mocker: MockerFixture, tag_service: TagService, ) -> None: - mocker.patch.object( + get_project_by_id_mock = mocker.patch.object( tag_service.project_repository, "get_by_id", return_value=project, autospec=True, ) - mocker.patch.object( + get_project_owner_mock = mocker.patch.object( tag_service.project_repository, "get_project_owner", return_value=project_owner, autospec=True, ) - mocker.patch.object( + get_project_tags_mock = mocker.patch.object( tag_service.tag_repository, "get_project_tags", return_value=[tag], @@ -42,6 +42,9 @@ async def test_get_project_tags_valid( project_id=project.id, user_id=project_owner.id + 1, ) + get_project_by_id_mock.assert_called_once_with(project.id) + get_project_owner_mock.assert_called_once_with(project.id) + get_project_tags_mock.assert_called_once_with(project.id) assert len(tags.tag_list) == 1 selected_tag = tags.tag_list[0] @@ -54,14 +57,16 @@ async def test_get_project_tags_project_not_exists( mocker: MockerFixture, tag_service: TagService, ) -> None: - mocker.patch.object( + get_project_by_id_mock = mocker.patch.object( tag_service.project_repository, "get_by_id", return_value=None, autospec=True, ) + project_id, user_id = 1, 1 with pytest.raises(ProjectIdNotFoundError): - await tag_service.get_project_tags(project_id=1, user_id=1) + await tag_service.get_project_tags(project_id=project_id, user_id=user_id) + get_project_by_id_mock.assert_called_once_with(project_id) async def test_get_project_tags_user_not_exists( self, @@ -69,20 +74,23 @@ async def test_get_project_tags_user_not_exists( mocker: MockerFixture, tag_service: TagService, ) -> None: - mocker.patch.object( + get_project_by_id_mock = mocker.patch.object( tag_service.project_repository, "get_by_id", return_value=project, autospec=True, ) - mocker.patch.object( + get_project_owner_mock = mocker.patch.object( tag_service.project_repository, "get_project_owner", return_value=None, autospec=True, ) + project_id, user_id = 1, 1 with pytest.raises(UserIdNotFoundError): - await tag_service.get_project_tags(project_id=1, user_id=1) + await tag_service.get_project_tags(project_id=project_id, user_id=user_id) + get_project_by_id_mock.assert_called_once_with(project.id) + get_project_owner_mock.assert_called_once_with(project.id) async def test_get_private_project_tags_not_by_owner( self, @@ -92,13 +100,13 @@ async def test_get_private_project_tags_not_by_owner( tag_service: TagService, ) -> None: project.visibility = ProjectVisibility.private - mocker.patch.object( + get_project_by_id_mock = mocker.patch.object( tag_service.project_repository, "get_by_id", return_value=project, autospec=True, ) - mocker.patch.object( + get_project_owner_mock = mocker.patch.object( tag_service.project_repository, "get_project_owner", return_value=project_owner, @@ -109,6 +117,8 @@ async def test_get_private_project_tags_not_by_owner( project_id=project.id, user_id=project_owner.id + 1, ) + get_project_by_id_mock.assert_called_once_with(project.id) + get_project_owner_mock.assert_called_once_with(project.id) async def test_create_tag_valid( self, @@ -119,27 +129,29 @@ async def test_create_tag_valid( mocker: MockerFixture, tag_service: TagService, ) -> None: - mocker.patch.object( + get_project_by_id_mock = mocker.patch.object( tag_service.project_repository, "get_by_id", return_value=project, autospec=True, ) - - mocker.patch.object( + get_project_owner_mock = mocker.patch.object( tag_service.project_repository, "get_project_owner", return_value=project_owner, autospec=True, ) - - mocker.patch.object( + create_tag_mock = mocker.patch.object( tag_service.tag_repository, "create_tag", return_value=created_tag, autospec=True, ) created_tag = await tag_service.create_tag(create_tag_data, project_owner.id) + get_project_by_id_mock.assert_called_once_with(project.id) + get_project_owner_mock.assert_called_once_with(project.id) + create_tag_mock.assert_called_once_with(create_tag_data) + assert created_tag.name == create_tag_data.name assert created_tag.project_id == create_tag_data.project_id @@ -150,7 +162,7 @@ async def test_create_tag_project_not_exists( create_tag_data: TagCreate, tag_service: TagService, ) -> None: - mocker.patch.object( + get_project_by_id_mock = mocker.patch.object( tag_service.project_repository, "get_by_id", return_value=None, @@ -158,6 +170,7 @@ async def test_create_tag_project_not_exists( ) with pytest.raises(ProjectIdNotFoundError): await tag_service.create_tag(create_tag_data, project_owner.id) + get_project_by_id_mock.assert_called_once_with(create_tag_data.project_id) async def test_create_tag_user_not_exists( self, @@ -166,13 +179,13 @@ async def test_create_tag_user_not_exists( create_tag_data: TagCreate, tag_service: TagService, ) -> None: - mocker.patch.object( + get_project_by_id_mock = mocker.patch.object( tag_service.project_repository, "get_by_id", return_value=project, autospec=True, ) - mocker.patch.object( + get_project_owner_mock = mocker.patch.object( tag_service.project_repository, "get_project_owner", return_value=None, @@ -181,6 +194,9 @@ async def test_create_tag_user_not_exists( with pytest.raises(UserIdNotFoundError): await tag_service.create_tag(create_tag_data, user_id=-1) + get_project_by_id_mock.assert_called_once_with(project.id) + get_project_owner_mock.assert_called_once_with(project.id) + async def test_create_tag_by_not_project_owner( self, mocker: MockerFixture, @@ -189,13 +205,13 @@ async def test_create_tag_by_not_project_owner( create_tag_data: TagCreate, tag_service: TagService, ) -> None: - mocker.patch.object( + get_project_by_id_mock = mocker.patch.object( tag_service.project_repository, "get_by_id", return_value=project, autospec=True, ) - mocker.patch.object( + get_project_owner_mock = mocker.patch.object( tag_service.project_repository, "get_project_owner", return_value=project_owner, @@ -203,6 +219,8 @@ async def test_create_tag_by_not_project_owner( ) with pytest.raises(PermissionDeniedError): await tag_service.create_tag(create_tag_data, project_owner.id + 1) + get_project_by_id_mock.assert_called_once_with(project.id) + get_project_owner_mock.assert_called_once_with(project.id) async def test_delete_by_id_valid( self, @@ -211,39 +229,44 @@ async def test_delete_by_id_valid( tag_with_project: Tag, tag_service: TagService, ) -> None: - mocker.patch.object( + get_tag_by_id_mock = mocker.patch.object( tag_service.tag_repository, "get_by_id", return_value=tag_with_project, autospec=True, ) - mocker.patch.object( + get_project_owner_mock = mocker.patch.object( tag_service.project_repository, "get_project_owner", return_value=project_owner, autospec=True, ) - mocker.patch.object( + delete_tag_by_id_mock = mocker.patch.object( tag_service.tag_repository, "delete_by_id", return_value=None, autospec=True, ) await tag_service.delete_by_id(tag_with_project.id, project_owner.id) + get_tag_by_id_mock.assert_called_once_with(tag_with_project.id) + get_project_owner_mock.assert_called_once_with(project_owner.id) + delete_tag_by_id_mock.assert_called_once_with(tag_with_project.id) async def test_delete_by_id_tag_not_exists( self, mocker: MockerFixture, tag_service: TagService, ) -> None: - mocker.patch.object( + get_tag_by_id_mock = mocker.patch.object( tag_service.tag_repository, "get_by_id", return_value=None, autospec=True, ) + tag_id = 1 with pytest.raises(TagIdNotFoundError): - await tag_service.delete_by_id(tag_id=1, user_id=1) + await tag_service.delete_by_id(tag_id=tag_id, user_id=1) + get_tag_by_id_mock.assert_called_once_with(tag_id) async def test_delete_by_id_user_not_exists( self, @@ -251,20 +274,23 @@ async def test_delete_by_id_user_not_exists( tag_with_project: Tag, tag_service: TagService, ) -> None: - mocker.patch.object( + get_tag_by_id_mock = mocker.patch.object( tag_service.tag_repository, "get_by_id", return_value=tag_with_project, autospec=True, ) - mocker.patch.object( + get_project_owner_mock = mocker.patch.object( tag_service.project_repository, "get_project_owner", return_value=None, autospec=True, ) + user_id = 1 with pytest.raises(UserIdNotFoundError): - await tag_service.delete_by_id(tag_id=tag_with_project.id, user_id=1) + await tag_service.delete_by_id(tag_id=tag_with_project.id, user_id=user_id) + get_tag_by_id_mock.assert_called_once_with(tag_with_project.id) + get_project_owner_mock.assert_called_once_with(user_id) async def test_delete_by_id_not_by_project_owner( self, @@ -273,13 +299,13 @@ async def test_delete_by_id_not_by_project_owner( tag_with_project: Tag, tag_service: TagService, ) -> None: - mocker.patch.object( + get_tag_by_id_mock = mocker.patch.object( tag_service.tag_repository, "get_by_id", return_value=tag_with_project, autospec=True, ) - mocker.patch.object( + get_project_owner_mock = mocker.patch.object( tag_service.project_repository, "get_project_owner", return_value=project_owner, @@ -290,3 +316,6 @@ async def test_delete_by_id_not_by_project_owner( tag_id=tag_with_project.id, user_id=project_owner.id + 1, ) + + get_tag_by_id_mock.assert_called_once_with(tag_with_project.id) + get_project_owner_mock.assert_called_once_with(project_owner.id) diff --git a/backend/tests/test_services/test_user.py b/backend/tests/test_services/test_user.py index 023b197..a2f2898 100644 --- a/backend/tests/test_services/test_user.py +++ b/backend/tests/test_services/test_user.py @@ -29,13 +29,15 @@ async def test_get_profile_by_id_valid( mocker: MockerFixture, user_service: UserService, ) -> None: - mocker.patch.object( + get_user_by_id_mock = mocker.patch.object( user_service.user_repository, "get_by_id", autospec=True, return_value=user, ) user_full_response = await user_service.get_profile_by_id(user.id) + get_user_by_id_mock.assert_called_once_with(user.id) + assert user_full_response.id == user.id assert user_full_response.surname == user.surname assert user_full_response.name == user.name @@ -48,14 +50,16 @@ async def test_get_profile_by_id_user_not_exist( mocker: MockerFixture, user_service: UserService, ) -> None: - mocker.patch.object( + get_user_by_id_mock = mocker.patch.object( user_service.user_repository, "get_by_id", autospec=True, return_value=None, ) + user_id = -1 with pytest.raises(UserIdNotFoundError): - await user_service.get_profile_by_id(-1) + await user_service.get_profile_by_id(user_id) + get_user_by_id_mock.assert_called_once_with(user_id) async def test_get_by_id_valid( self, @@ -63,13 +67,14 @@ async def test_get_by_id_valid( mocker: MockerFixture, user_service: UserService, ) -> None: - mocker.patch.object( + get_user_by_id_mock = mocker.patch.object( user_service.user_repository, "get_by_id", autospec=True, return_value=user, ) user_response = await user_service.get_by_id(user.id) + get_user_by_id_mock.assert_called_once_with(user.id) assert user_response.id == user.id assert user_response.surname == user.surname assert user_response.name == user.name @@ -82,46 +87,51 @@ async def test_get_by_id_user_not_exist( mocker: MockerFixture, user_service: UserService, ) -> None: - mocker.patch.object( + get_user_by_id_mock = mocker.patch.object( user_service.user_repository, "get_by_id", autospec=True, return_value=None, ) + user_id = -1 with pytest.raises(UserIdNotFoundError): - await user_service.get_by_id(-1) + await user_service.get_by_id(user_id) + get_user_by_id_mock.assert_called_once_with(user_id) async def test_update_user_not_exist( self, mocker: MockerFixture, user_service: UserService, ) -> None: - mocker.patch.object( - user_service, + get_user_by_id_mock = mocker.patch.object( + user_service.user_repository, "get_by_id", autospec=True, return_value=None, ) - update_user_data = UserUpdate( surname="updated_surname", name="updated_name", username="updated_username", email="updated_email@email.com", ) + user_id = -1 with pytest.raises(UserIdNotFoundError): - await user_service.update_user(-1, update_user_data) + await user_service.update_user(user_id, update_user_data) + get_user_by_id_mock.assert_called_once_with(user_id) async def test_delete_not_exist( self, mocker: MockerFixture, user_service: UserService, ) -> None: - mocker.patch.object( - user_service, + get_user_by_id_mock = mocker.patch.object( + user_service.user_repository, "get_by_id", autospec=True, return_value=None, ) + user_id = -1 with pytest.raises(UserIdNotFoundError): - await user_service.delete_by_id(-1) + await user_service.delete_by_id(user_id) + get_user_by_id_mock.assert_called_once_with(user_id)