Skip to content

Commit

Permalink
feat(PurchaseRepo): Adding the purchase realted repo
Browse files Browse the repository at this point in the history
  • Loading branch information
gabszs committed Jul 5, 2024
1 parent 6718f5a commit e103218
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 25 deletions.
4 changes: 2 additions & 2 deletions app/models/api_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
2 changes: 1 addition & 1 deletion app/repository/base_repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down
13 changes: 13 additions & 0 deletions app/repository/purchase_repository.py
Original file line number Diff line number Diff line change
@@ -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)
27 changes: 5 additions & 22 deletions tests/routes/v1/test_user_route.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down Expand Up @@ -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])

Expand All @@ -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"]])
Expand All @@ -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"]
Expand Down

0 comments on commit e103218

Please sign in to comment.