From e103218c7c6660a20f6a39142fcd9146b592c252 Mon Sep 17 00:00:00 2001 From: GabrielCarvalho Date: Fri, 5 Jul 2024 18:19:58 -0300 Subject: [PATCH] feat(PurchaseRepo): Adding the purchase realted repo --- app/models/api_models.py | 4 ++-- app/repository/base_repository.py | 2 +- app/repository/purchase_repository.py | 13 +++++++++++++ tests/routes/v1/test_user_route.py | 27 +++++---------------------- 4 files changed, 21 insertions(+), 25 deletions(-) create mode 100644 app/repository/purchase_repository.py diff --git a/app/models/api_models.py b/app/models/api_models.py index e0e2b8b..62a10ce 100644 --- a/app/models/api_models.py +++ b/app/models/api_models.py @@ -65,8 +65,8 @@ class Purchase(Base): unit_price: Mapped[float] total_price: Mapped[float] - buyer: Mapped[User] = relationship(back_populates="purchases") - product: Mapped[Product] = relationship(back_populates="purchases") + buyer: Mapped[User] = relationship(back_populates="purchases", init=False) + product: Mapped[Product] = relationship(back_populates="purchases", init=False) class Inventory(Base): diff --git a/app/repository/base_repository.py b/app/repository/base_repository.py index 8659822..cb589fb 100644 --- a/app/repository/base_repository.py +++ b/app/repository/base_repository.py @@ -97,7 +97,7 @@ async def create(self, schema): except IntegrityError as _: if "Cannot add or update a child row" in str(_): - raise ValidationError("Wrong FK ID, please use correct model id") + raise ValidationError("Wrong FK ID, please use correct model FK") raise DuplicatedError(detail=f"{self.model.__tablename__.capitalize()[:-1]} already registered") except Exception as error: raise BadRequestError(str(error)) diff --git a/app/repository/purchase_repository.py b/app/repository/purchase_repository.py new file mode 100644 index 0000000..aca3c38 --- /dev/null +++ b/app/repository/purchase_repository.py @@ -0,0 +1,13 @@ +from contextlib import AbstractAsyncContextManager +from typing import Callable + +from sqlalchemy.ext.asyncio import AsyncSession + +from app.models import Purchase +from app.repository.base_repository import BaseRepository + + +class PurchaseRepository(BaseRepository): + def __init__(self, session_factory: Callable[..., AbstractAsyncContextManager[AsyncSession]]): + self.session_factory = session_factory + super().__init__(session_factory, Purchase) diff --git a/tests/routes/v1/test_user_route.py b/tests/routes/v1/test_user_route.py index 28f1962..6b0ec05 100644 --- a/tests/routes/v1/test_user_route.py +++ b/tests/routes/v1/test_user_route.py @@ -11,6 +11,7 @@ from tests.helpers import get_user_token from tests.helpers import setup_users_data from tests.helpers import validate_datetime +from tests.helpers import validate_users_output_models from tests.schemas import UserSchemaWithHashedPassword @@ -40,18 +41,12 @@ async def test_get_all_users_should_return_200_OK_GET( f"{settings.base_users_url}/?{urlencode(default_username_search_options)}", headers=moderator_user_token ) response_json = response.json() - users_json = response_json["founds"] + assert response.status_code == 200 assert len(users_json) == expected_lenght assert response_json["search_options"] == default_username_search_options | {"total_count": expected_lenght} - assert all( - [ - user.username == users_json[count].get("username") and user.email == users_json[count].get("email") - for count, user in enumerate(setup_users) - ] - ) - + validate_users_output_models(setup_users, response_json["founds"], ["username", "email"]) assert all([validate_datetime(user["created_at"]) for user in users_json]) assert all([validate_datetime(user["updated_at"]) for user in users_json]) @@ -71,13 +66,7 @@ async def test_get_all_users_with_page_size_should_return_200_OK_GET( response_json = response.json() assert response.status_code == 200 - assert all( - [ - user.username == response_json["founds"][count].get("username") - and user.email == response_json["founds"][count].get("email") - for count, user in enumerate(setup_users[: query_find_parameters["page_size"]]) - ] - ) + validate_users_output_models(setup_users, response_json["founds"], ["username", "email"]) assert len(response_json["founds"]) == 5 assert response_json["search_options"] == query_find_parameters | {"total_count": 5} assert all([validate_datetime(user["created_at"]) for user in response_json["founds"]]) @@ -102,13 +91,7 @@ async def test_get_all_users_with_pagination_should_return_200_OK_GET( response_json = response.json() assert response.status_code == 200 - assert all( - [ - user.username == response_json["founds"][count].get("username") - and user.email == response_json["founds"][count].get("email") - for count, user in enumerate(setup_users[page_size : page_size * page]) - ] - ) + validate_users_output_models(setup_users, response_json["founds"], ["username", "email"]) assert len(response_json["founds"]) == query_find_parameters["page_size"] assert response_json["search_options"] == query_find_parameters | { "total_count": query_find_parameters["page_size"]