diff --git a/app/modules/amap/cruds_amap.py b/app/modules/amap/cruds_amap.py index f0a13b1732..014a6e30d2 100644 --- a/app/modules/amap/cruds_amap.py +++ b/app/modules/amap/cruds_amap.py @@ -2,7 +2,7 @@ import logging from collections.abc import Sequence -from datetime import date +from datetime import datetime from sqlalchemy import delete, select, update from sqlalchemy.ext.asyncio import AsyncSession @@ -118,16 +118,6 @@ async def get_delivery_by_id( return result.scalars().first() -async def is_there_a_delivery_on(db: AsyncSession, delivery_date: date) -> bool: - result = await db.execute( - select(models_amap.Delivery).where( - models_amap.Delivery.delivery_date == delivery_date, - models_amap.Delivery.status != DeliveryStatusType.archived, - ), - ) - return result.scalars().all() != [] - - async def create_delivery( delivery: schemas_amap.DeliveryComplete, db: AsyncSession, @@ -248,6 +238,7 @@ async def get_products_of_order( async def add_order_to_delivery( db: AsyncSession, order: schemas_amap.OrderComplete, + delivery: models_amap.Delivery, ): db.add( models_amap.Order( @@ -358,7 +349,7 @@ async def add_cash(db: AsyncSession, user_id: str, amount: float): await db.execute( update(models_amap.Cash) .where(models_amap.Cash.user_id == user_id) - .values(user_id=balance.user_id, balance=balance.balance + amount), + .values(balance=balance.balance + amount), ) await db.flush() @@ -372,7 +363,21 @@ async def remove_cash(db: AsyncSession, user_id: str, amount: float): await db.execute( update(models_amap.Cash) .where(models_amap.Cash.user_id == user_id) - .values(user_id=balance.user_id, balance=balance.balance - amount), + .values(balance=balance.balance - amount), + ) + await db.flush() + + +async def update_last_ordering_date(db: AsyncSession, user_id: str, date: datetime): + result = await db.execute( + select(models_amap.Cash).where(models_amap.Cash.user_id == user_id), + ) + balance = result.scalars().first() + if balance is not None: + await db.execute( + update(models_amap.Cash) + .where(models_amap.Cash.user_id == user_id) + .values(last_order_date=date), ) await db.flush() diff --git a/app/modules/amap/endpoints_amap.py b/app/modules/amap/endpoints_amap.py index 957bae2141..4d2f34af7f 100644 --- a/app/modules/amap/endpoints_amap.py +++ b/app/modules/amap/endpoints_amap.py @@ -217,14 +217,6 @@ async def create_delivery( status=DeliveryStatusType.creation, **delivery.model_dump(), ) - if await cruds_amap.is_there_a_delivery_on( - db=db, - delivery_date=db_delivery.delivery_date, - ): - raise HTTPException( - status_code=400, - detail="There is already a delivery planned that day.", - ) return await cruds_amap.create_delivery(delivery=db_delivery, db=db) @@ -390,7 +382,14 @@ async def get_orders_from_delivery( schemas_amap.ProductQuantity(**product.__dict__) for product in order_content ] - res.append(schemas_amap.OrderReturn(productsdetail=products, **order.__dict__)) + res.append( + schemas_amap.OrderReturn( + productsdetail=products, + delivery_date=delivery.delivery_date, + delivery_name=delivery.name, + **order.__dict__, + ), + ) return res @@ -417,7 +416,12 @@ async def get_order_by_id( raise HTTPException(status_code=404, detail="Delivery not found") products = await cruds_amap.get_products_of_order(db=db, order_id=order_id) - return schemas_amap.OrderReturn(productsdetail=products, **order.__dict__) + return schemas_amap.OrderReturn( + productsdetail=products, + delivery_name=order.delivery.name, + delivery_date=order.delivery.delivery_date, + **order.__dict__, + ) @module.router.post( @@ -479,7 +483,6 @@ async def add_order_to_delievery( order_id=order_id, amount=amount, ordering_date=ordering_date, - delivery_date=delivery.delivery_date, **order.model_dump(), ) balance: models_amap.Cash | None = await cruds_amap.get_cash_by_id( @@ -489,12 +492,10 @@ async def add_order_to_delievery( # If the balance does not exist, we create a new one with a balance of 0 if not balance: - new_cash_db = schemas_amap.CashDB( + balance = models_amap.Cash( balance=0, user_id=order.user_id, - ) - balance = models_amap.Cash( - **new_cash_db.model_dump(), + last_order_date=ordering_date, ) await cruds_amap.create_cash_of_user( cash=balance, @@ -505,7 +506,6 @@ async def add_order_to_delievery( raise HTTPException(status_code=400, detail="You can't order nothing") redis_key = "amap_" + order.user_id - if not isinstance(redis_client, Redis) or locker_get( redis_client=redis_client, key=redis_key, @@ -517,6 +517,7 @@ async def add_order_to_delievery( await cruds_amap.add_order_to_delivery( order=db_order, db=db, + delivery=delivery, ) await cruds_amap.remove_cash( db=db, @@ -524,14 +525,28 @@ async def add_order_to_delievery( amount=amount, ) + await cruds_amap.update_last_ordering_date( + db=db, + user_id=order.user_id, + date=ordering_date, + ) + orderret = await cruds_amap.get_order_by_id(order_id=db_order.order_id, db=db) productsret = await cruds_amap.get_products_of_order(db=db, order_id=order_id) hyperion_amap_logger.info( f"Add_order_to_delivery: An order has been created for user {order.user_id} for an amount of {amount}€. ({request_id})", ) - return schemas_amap.OrderReturn(productsdetail=productsret, **orderret.__dict__) + if orderret is None: + raise HTTPException(status_code=404, detail="added order not found") + + return schemas_amap.OrderReturn( + productsdetail=productsret, + delivery_name=orderret.delivery.name, + delivery_date=orderret.delivery.delivery_date, + **orderret.__dict__, + ) finally: locker_set(redis_client=redis_client, key=redis_key, lock=False) @@ -622,7 +637,6 @@ async def edit_order_from_delivery( raise HTTPException(status_code=404, detail="No cash found") redis_key = "amap_" + previous_order.user_id - if not isinstance(redis_client, Redis) or locker_get( redis_client=redis_client, key=redis_key, @@ -645,6 +659,12 @@ async def edit_order_from_delivery( user_id=previous_order.user_id, amount=previous_amount, ) + date = datetime.now(UTC) + await cruds_amap.update_last_ordering_date( + db=db, + user_id=previous_order.user_id, + date=date, + ) hyperion_amap_logger.info( f"Edit_order: Order {order_id} has been edited for user {db_order.user_id}. Amount was {previous_amount}€, is now {amount}€. ({request_id})", ) @@ -890,6 +910,7 @@ async def get_cash_by_id( balance=0, user_id=user_id, user=schemas_users.CoreUserSimple(**user_db.__dict__), + last_order_date=datetime.now(UTC), ) return cash @@ -927,7 +948,11 @@ async def create_cash_of_user( detail="This user already has a cash.", ) - cash_db = models_amap.Cash(user_id=user_id, balance=cash.balance) + cash_db = models_amap.Cash( + user_id=user_id, + balance=cash.balance, + last_order_date=datetime.now(UTC), + ) await cruds_amap.create_cash_of_user( cash=cash_db, @@ -947,7 +972,7 @@ async def create_cash_of_user( message = Message( title="AMAP - Solde mis à jour", - content=f"Votre nouveau solde est de {cash} €.", + content=f"Votre nouveau solde est de {cash.balance // 100}€{cash.balance % 100}.", action_module="amap", ) await notification_tool.send_notification_to_user( @@ -1030,7 +1055,16 @@ async def get_orders_of_user( db=db, order_id=order.order_id, ) - res.append(schemas_amap.OrderReturn(productsdetail=products, **order.__dict__)) + if order is None: + raise HTTPException(status_code=404, detail="at least one order not found") + res.append( + schemas_amap.OrderReturn( + productsdetail=products, + delivery_date=order.delivery.delivery_date, + delivery_name=order.delivery.name, + **order.__dict__, + ), + ) return res diff --git a/app/modules/amap/factory_amap.py b/app/modules/amap/factory_amap.py index bde9f78eef..e771acacf1 100644 --- a/app/modules/amap/factory_amap.py +++ b/app/modules/amap/factory_amap.py @@ -16,14 +16,14 @@ class AmapFactory(Factory): @classmethod async def create_products(cls, db: AsyncSession): # Generates sample products - products: dict[str, tuple[float, str]] = { - "banane": (5.0, "Fruits"), - "pomme": (6.0, "Fruits"), - "poire": (4.0, "Fruits"), - "kiwi": (3.0, "Fruits"), - "orange": (2.0, "Fruits"), - "carotte": (1.0, "Légumes"), - "tomate": (2.0, "Légumes"), + products: dict[str, tuple[int, str]] = { + "banane": (500, "Fruits"), + "pomme": (600, "Fruits"), + "poire": (400, "Fruits"), + "kiwi": (300, "Fruits"), + "orange": (200, "Fruits"), + "carotte": (100, "Légumes"), + "tomate": (200, "Légumes"), } for product_name, product_data in products.items(): @@ -45,6 +45,7 @@ async def create_delivery(cls, db: AsyncSession): db=db, delivery=schemas_amap.DeliveryComplete( id=str(uuid.uuid4()), + name="Première livraison", status=DeliveryStatusType.orderable, delivery_date=(datetime.now(UTC) + timedelta(days=8)).date(), products_ids=[product.id for product in products], @@ -55,6 +56,7 @@ async def create_delivery(cls, db: AsyncSession): db=db, delivery=schemas_amap.DeliveryComplete( id=str(uuid.uuid4()), + name="Deuxième livraison", status=DeliveryStatusType.orderable, delivery_date=(datetime.now(UTC) + timedelta(days=1)).date(), products_ids=[product.id for product in products], @@ -67,7 +69,8 @@ async def create_cash_of_user(cls, db: AsyncSession): db=db, cash=models_amap.Cash( user_id=CoreUsersFactory.demo_users_id[0], - balance=100, + balance=10000, + last_order_date=datetime.now(UTC), ), ) diff --git a/app/modules/amap/models_amap.py b/app/modules/amap/models_amap.py index 855e75d2e0..0524e3a2d0 100644 --- a/app/modules/amap/models_amap.py +++ b/app/modules/amap/models_amap.py @@ -44,7 +44,7 @@ class Product(Base): index=True, unique=True, ) - price: Mapped[float] + price: Mapped[int] category: Mapped[str] = mapped_column(index=True) @@ -52,12 +52,17 @@ class Delivery(Base): __tablename__ = "amap_delivery" id: Mapped[str] = mapped_column(primary_key=True, index=True) + name: Mapped[str] = mapped_column(unique=False) delivery_date: Mapped[date] = mapped_column( unique=False, index=True, ) status: Mapped[DeliveryStatusType] = mapped_column(String) - orders: Mapped[list["Order"]] = relationship("Order", init=False) + orders: Mapped[list["Order"]] = relationship( + "Order", + init=False, + back_populates="delivery", + ) products: Mapped[list[Product]] = relationship( "Product", secondary="amap_delivery_content", @@ -76,10 +81,15 @@ class Order(Base): index=True, ) order_id: Mapped[str] = mapped_column(primary_key=True, index=True) - amount: Mapped[float] + amount: Mapped[int] collection_slot: Mapped[AmapSlotType] ordering_date: Mapped[datetime] - delivery_date: Mapped[date] + delivery: Mapped["Delivery"] = relationship( + "Delivery", + lazy="joined", + init=False, + back_populates="orders", + ) user: Mapped[CoreUser] = relationship( "CoreUser", init=False, @@ -88,7 +98,7 @@ class Order(Base): "Product", secondary="amap_order_content", viewonly=True, - default_factory=list, + init=False, ) @@ -99,7 +109,8 @@ class Cash(Base): ForeignKey("core_user.id"), primary_key=True, ) - balance: Mapped[float] + balance: Mapped[int] + last_order_date: Mapped[datetime] user: Mapped[CoreUser] = relationship("CoreUser", init=False) diff --git a/app/modules/amap/schemas_amap.py b/app/modules/amap/schemas_amap.py index 26224ffd51..bc77de2265 100644 --- a/app/modules/amap/schemas_amap.py +++ b/app/modules/amap/schemas_amap.py @@ -20,7 +20,7 @@ class ProductBase(BaseModel): """Base schema for AMAP products""" name: str - price: float + price: int class ProductSimple(ProductBase): @@ -30,7 +30,7 @@ class ProductSimple(ProductBase): class ProductEdit(BaseModel): category: str | None = None name: str | None = None - price: float | None = None + price: int | None = None class ProductComplete(ProductSimple): @@ -47,6 +47,7 @@ class ProductQuantity(BaseModel): class DeliveryBase(BaseModel): """Base schema for AMAP deliveries""" + name: str delivery_date: date products_ids: list[str] = [] @@ -58,6 +59,7 @@ class DeliveryComplete(DeliveryBase): class DeliveryUpdate(BaseModel): + name: str | None = None delivery_date: date | None = None @@ -75,19 +77,19 @@ class OrderBase(BaseModel): class OrderComplete(OrderBase): order_id: str - amount: float + amount: int ordering_date: datetime - delivery_date: date model_config = ConfigDict(from_attributes=True) class OrderReturn(BaseModel): user: CoreUserSimple delivery_id: str + delivery_name: str productsdetail: Sequence[ProductQuantity] collection_slot: AmapSlotType order_id: str - amount: float + amount: int ordering_date: datetime delivery_date: date model_config = ConfigDict(from_attributes=True) @@ -101,6 +103,7 @@ class OrderEdit(BaseModel): class DeliveryReturn(BaseModel): + name: str delivery_date: date products: list[ProductComplete] = [] id: str @@ -114,21 +117,18 @@ class AddProductDelivery(BaseModel): class CashBase(BaseModel): - balance: float + balance: int user_id: str model_config = ConfigDict(from_attributes=True) class CashComplete(CashBase): user: CoreUserSimple - - -class CashDB(CashBase): - user_id: str + last_order_date: datetime class CashEdit(BaseModel): - balance: float + balance: int class Information(BaseModel): diff --git a/app/modules/raffle/endpoints_raffle.py b/app/modules/raffle/endpoints_raffle.py index abe5c287f2..0e087158c0 100644 --- a/app/modules/raffle/endpoints_raffle.py +++ b/app/modules/raffle/endpoints_raffle.py @@ -500,7 +500,7 @@ async def buy_ticket( user_id=user.id, ) balance = models_raffle.Cash( - **new_cash_db.dict(), + **new_cash_db.model_dump(), ) await cruds_raffle.create_cash_of_user( cash=balance, diff --git a/app/modules/raffle/models_raffle.py b/app/modules/raffle/models_raffle.py index 92c05a33e8..68bd193eb3 100644 --- a/app/modules/raffle/models_raffle.py +++ b/app/modules/raffle/models_raffle.py @@ -36,7 +36,7 @@ class PackTicket(Base): primary_key=True, index=True, ) - price: Mapped[float] + price: Mapped[int] pack_size: Mapped[int] raffle_id: Mapped[str] = mapped_column( ForeignKey("raffle.id"), @@ -93,6 +93,6 @@ class Cash(Base): ForeignKey("core_user.id"), primary_key=True, ) - balance: Mapped[float] + balance: Mapped[int] user: Mapped[CoreUser] = relationship("CoreUser", init=False) diff --git a/app/modules/raffle/schemas_raffle.py b/app/modules/raffle/schemas_raffle.py index 71d6d987ad..da27511a99 100644 --- a/app/modules/raffle/schemas_raffle.py +++ b/app/modules/raffle/schemas_raffle.py @@ -25,7 +25,7 @@ class RaffleComplete(RaffleBase): class RaffleStats(BaseModel): tickets_sold: int - amount_raised: float + amount_raised: int class PrizeBase(BaseModel): @@ -55,7 +55,7 @@ class PrizeComplete(PrizeBase): class PackTicketBase(BaseModel): - price: float + price: int pack_size: int raffle_id: str model_config = ConfigDict(from_attributes=True) @@ -63,7 +63,7 @@ class PackTicketBase(BaseModel): class PackTicketEdit(BaseModel): raffle_id: str | None = None - price: float | None = None + price: int | None = None pack_size: int | None = None model_config = ConfigDict(from_attributes=True) @@ -97,7 +97,7 @@ class TicketComplete(TicketSimple): class CashBase(BaseModel): - balance: float + balance: int user_id: str model_config = ConfigDict(from_attributes=True) @@ -111,4 +111,4 @@ class CashDB(CashBase): class CashEdit(BaseModel): - balance: float + balance: int diff --git a/migrations/versions/52-price_in_cents.py b/migrations/versions/52-price_in_cents.py new file mode 100644 index 0000000000..f563ccd3f9 --- /dev/null +++ b/migrations/versions/52-price_in_cents.py @@ -0,0 +1,216 @@ +"""empty message + +Create Date: 2025-02-25 13:45:05.381491 +""" + +from collections.abc import Sequence +from typing import TYPE_CHECKING +from uuid import uuid4 + +from app.core.schools.schools_type import SchoolType +from app.modules.raffle.types_raffle import RaffleStatusType + +if TYPE_CHECKING: + from pytest_alembic import MigrationContext + +import sqlalchemy as sa +from alembic import op + +# revision identifiers, used by Alembic. +revision: str = "4ae072a7e867" +down_revision: str | None = "b04f76f4198f" +branch_labels: str | Sequence[str] | None = None +depends_on: str | Sequence[str] | None = None + + +def upgrade() -> None: + op.execute("UPDATE amap_cash SET balance = balance * 100") + op.execute("UPDATE amap_order SET amount = amount * 100") + op.execute("UPDATE amap_product SET price = price * 100") + op.execute("UPDATE raffle_cash SET balance = balance * 100") + op.execute("UPDATE raffle_pack_ticket SET price = price * 100") + + op.alter_column( + "amap_cash", + "balance", + existing_type=sa.FLOAT(), + type_=sa.Integer(), + existing_nullable=False, + ) + op.alter_column( + "amap_order", + "amount", + existing_type=sa.FLOAT(), + type_=sa.Integer(), + existing_nullable=False, + ) + op.alter_column( + "amap_product", + "price", + existing_type=sa.FLOAT(), + type_=sa.Integer(), + existing_nullable=False, + ) + op.alter_column( + "raffle_cash", + "balance", + existing_type=sa.FLOAT(), + type_=sa.Integer(), + existing_nullable=False, + ) + op.alter_column( + "raffle_pack_ticket", + "price", + existing_type=sa.FLOAT(), + type_=sa.Integer(), + existing_nullable=False, + ) + + +def downgrade() -> None: + op.alter_column( + "raffle_pack_ticket", + "price", + existing_type=sa.Integer(), + type_=sa.FLOAT(), + existing_nullable=False, + ) + op.alter_column( + "raffle_cash", + "balance", + existing_type=sa.Integer(), + type_=sa.FLOAT(), + existing_nullable=False, + ) + op.alter_column( + "amap_product", + "price", + existing_type=sa.Integer(), + type_=sa.FLOAT(), + existing_nullable=False, + ) + op.alter_column( + "amap_order", + "amount", + existing_type=sa.Integer(), + type_=sa.FLOAT(), + existing_nullable=False, + ) + op.alter_column( + "amap_cash", + "balance", + existing_type=sa.Integer(), + type_=sa.FLOAT(), + existing_nullable=False, + ) + + op.execute("UPDATE amap_cash SET balance = balance / 100") + op.execute("UPDATE amap_order SET amount = amount / 100") + op.execute("UPDATE amap_product SET price = price / 100") + op.execute("UPDATE raffle_cash SET balance = balance / 100") + op.execute("UPDATE raffle_pack_ticket SET price = price / 100") + + +user_id = uuid4() +group_id = uuid4() +raffle_id = uuid4() + + +def pre_test_upgrade( + alembic_runner: "MigrationContext", + alembic_connection: sa.Connection, +) -> None: + alembic_runner.insert_into( + "core_group", + { + "id": group_id, + "name": "external", + }, + ) + + alembic_runner.insert_into( + "core_user", + { + "id": user_id, + "email": "dedftyugimo@myecl.fr", + "account_type": "external", + "school_id": SchoolType.no_school.value, + "password_hash": "password_hash", + "name": "name", + "firstname": "firstname", + "nickname": "nickname", + "birthday": None, + "promo": 21, + "phone": "phone", + "floor": "Autre", + "created_on": None, + }, + ) + alembic_runner.insert_into( + "amap_cash", + { + "user_id": user_id, + "balance": 3.3999999999999964, + }, + ) + alembic_runner.insert_into( + "amap_product", + { + "id": uuid4(), + "name": "name", + "price": 1.1000000000000014, + "category": "category", + }, + ) + alembic_runner.insert_into( + "raffle_cash", + { + "user_id": user_id, + "balance": 1.4210854715202004e-14, + }, + ) + alembic_runner.insert_into( + "raffle", + { + "id": raffle_id, + "name": "name", + "group_id": group_id, + "status": RaffleStatusType.creation, + }, + ) + alembic_runner.insert_into( + "raffle_pack_ticket", + { + "id": uuid4(), + "price": -3.552713678800501e-15, + "pack_size": 5, + "raffle_id": raffle_id, + }, + ) + + +def test_upgrade( + alembic_runner: "MigrationContext", + alembic_connection: sa.Connection, +) -> None: + amap_cash = alembic_connection.execute( + sa.text(f"SELECT balance FROM amap_cash WHERE user_id = '{user_id}'"), + ).fetchall() + assert amap_cash[0][0] == 340 + + amap_product = alembic_connection.execute( + sa.text("SELECT price FROM amap_product WHERE name = 'name'"), + ).fetchall() + assert amap_product[0][0] == 110 + + raffle_cash = alembic_connection.execute( + sa.text(f"SELECT balance FROM raffle_cash WHERE user_id = '{user_id}'"), + ).fetchall() + assert raffle_cash[0][0] == 0 + + raffle_pack_ticket = alembic_connection.execute( + sa.text( + f"SELECT price FROM raffle_pack_ticket WHERE raffle_id = '{raffle_id}'", + ), + ).fetchall() + assert raffle_pack_ticket[0][0] == 0 diff --git a/migrations/versions/53-amap_delivery_names.py b/migrations/versions/53-amap_delivery_names.py new file mode 100644 index 0000000000..89b56665d6 --- /dev/null +++ b/migrations/versions/53-amap_delivery_names.py @@ -0,0 +1,72 @@ +"""empty message + +Create Date: 2025-10-21 19:53:38.521697 +""" + +from collections.abc import Sequence +from datetime import UTC, datetime +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from pytest_alembic import MigrationContext + +import sqlalchemy as sa +from alembic import op + +from app.types.sqlalchemy import TZDateTime + +# revision identifiers, used by Alembic. +revision: str = "9fc3dc926600" +down_revision: str | None = "4ae072a7e867" +branch_labels: str | Sequence[str] | None = None +depends_on: str | Sequence[str] | None = None + + +def upgrade() -> None: + op.add_column("amap_delivery", sa.Column("name", sa.String(), nullable=True)) + op.execute("UPDATE amap_delivery SET name = ''") + op.alter_column("amap_delivery", "name", nullable=False) + + op.add_column( + "amap_cash", + sa.Column("last_order_date", TZDateTime(), nullable=True), + ) + default_time = datetime(2025, 1, 1, tzinfo=UTC) + op.execute( + sa.text("UPDATE amap_cash SET last_order_date = :last_order_date").bindparams( + sa.bindparam("last_order_date", value=default_time), + ), + ) + op.alter_column("amap_cash", "last_order_date", nullable=False) + + op.drop_column("amap_order", "delivery_date") + + +def downgrade() -> None: + op.drop_column("amap_cash", "last_order_date") + op.drop_column("amap_delivery", "name") + op.add_column( + "amap_order", + sa.Column("delivery_date", TZDateTime(), nullable=True), + ) + default_time = datetime(2025, 1, 1, tzinfo=UTC) + op.execute( + sa.text("UPDATE amap_order SET delivery_date = :delivery_date").bindparams( + sa.bindparam("delivery_date", value=default_time), + ), + ) + op.alter_column("amap_order", "delivery_date", nullable=False) + + +def pre_test_upgrade( + alembic_runner: "MigrationContext", + alembic_connection: sa.Connection, +) -> None: + pass + + +def test_upgrade( + alembic_runner: "MigrationContext", + alembic_connection: sa.Connection, +) -> None: + pass diff --git a/tests/modules/test_amap.py b/tests/modules/test_amap.py index 4109e8257d..cd0c237a94 100644 --- a/tests/modules/test_amap.py +++ b/tests/modules/test_amap.py @@ -55,29 +55,30 @@ async def init_objects() -> None: product = models_amap.Product( id=str(uuid.uuid4()), name="Tomato", - price=1.5, + price=150, category="Test", ) await add_object_to_db(product) deletable_product = models_amap.Product( id=str(uuid.uuid4()), name="Deletable Tomato", - price=1.5, + price=150, category="Test", ) await add_object_to_db(deletable_product) - # We can not create two deliveries with the same date delivery = models_amap.Delivery( id=str(uuid.uuid4()), delivery_date=datetime(2022, 8, 15, tzinfo=UTC), status=DeliveryStatusType.creation, + name="Livraison 1", ) await add_object_to_db(delivery) deletable_delivery = models_amap.Delivery( id=str(uuid.uuid4()), delivery_date=datetime(2022, 8, 16, tzinfo=UTC), status=DeliveryStatusType.creation, + name="Livraison supprimable", ) await add_object_to_db(deletable_delivery) @@ -85,6 +86,7 @@ async def init_objects() -> None: id=str(uuid.uuid4()), delivery_date=datetime(2022, 8, 17, tzinfo=UTC), status=DeliveryStatusType.locked, + name="Livraison verrouillée", ) await add_object_to_db(locked_delivery) @@ -92,10 +94,9 @@ async def init_objects() -> None: order_id=str(uuid.uuid4()), user_id=student_user.id, delivery_id=delivery.id, - amount=0.0, + amount=0, collection_slot=AmapSlotType.midi, ordering_date=datetime(2022, 8, 10, 12, 16, 26, tzinfo=UTC), - delivery_date=delivery.delivery_date, ) await add_object_to_db(order) @@ -103,14 +104,17 @@ async def init_objects() -> None: order_id=str(uuid.uuid4()), user_id=student_user.id, delivery_id=locked_delivery.id, - amount=0.0, + amount=0, collection_slot=AmapSlotType.midi, ordering_date=datetime(2022, 8, 18, 12, 16, 26, tzinfo=UTC), - delivery_date=locked_delivery.delivery_date, ) await add_object_to_db(deletable_order_by_admin) - cash = models_amap.Cash(user_id=student_user.id, balance=666) + cash = models_amap.Cash( + user_id=student_user.id, + balance=666, + last_order_date=datetime.now(UTC), + ) await add_object_to_db(cash) @@ -129,7 +133,7 @@ def test_create_product(client: TestClient) -> None: response = client.post( "/amap/products", - json={"name": "test", "price": 0.1, "category": "test"}, + json={"name": "test", "price": 10, "category": "test"}, headers={"Authorization": f"Bearer {token}"}, ) assert response.status_code == 201 @@ -151,7 +155,7 @@ def test_edit_product(client: TestClient) -> None: response = client.patch( f"/amap/products/{product.id}", - json={"name": "testupdate", "price": 0.1, "category": "test"}, + json={"name": "testupdate", "price": 10, "category": "test"}, headers={"Authorization": f"Bearer {token}"}, ) assert response.status_code == 204 @@ -168,7 +172,7 @@ def test_delete_product(client: TestClient) -> None: def test_get_deliveries(client: TestClient) -> None: - # The user don't need to be part of group amap to get a product + # The user don't need to be part of group amap to get a delivery student_token = create_api_access_token(student_user) response = client.get( @@ -184,6 +188,7 @@ def test_create_delivery(client: TestClient) -> None: response = client.post( "/amap/deliveries", json={ + "name": "Livraison", "delivery_date": "2022-08-18", "products_ids": [product.id], "locked": False, @@ -208,7 +213,11 @@ def test_edit_delivery(client: TestClient) -> None: response = client.patch( f"/amap/deliveries/{delivery.id}", - json={"delivery_date": "2022-08-18", "locked": False}, + json={ + "name": "Livraison editee", + "delivery_date": "2022-08-18", + "locked": False, + }, headers={"Authorization": f"Bearer {token}"}, ) assert response.status_code == 204 diff --git a/tests/modules/test_raffle.py b/tests/modules/test_raffle.py index 4f9a574971..43b7ef902f 100644 --- a/tests/modules/test_raffle.py +++ b/tests/modules/test_raffle.py @@ -98,7 +98,7 @@ async def init_objects() -> None: packticket = models_raffle.PackTicket( id=str(uuid.uuid4()), - price=1.0, + price=100, pack_size=1, raffle_id=raffle.id, ) @@ -106,7 +106,7 @@ async def init_objects() -> None: packticket_to_draw = models_raffle.PackTicket( id=str(uuid.uuid4()), - price=1.0, + price=100, pack_size=1, raffle_id=raffle_to_draw.id, ) @@ -114,7 +114,7 @@ async def init_objects() -> None: packticket_to_delete = models_raffle.PackTicket( id=str(uuid.uuid4()), - price=1.0, + price=100, pack_size=1, raffle_id=raffle_to_delete.id, ) @@ -152,7 +152,7 @@ async def init_objects() -> None: ) await add_object_to_db(prize_to_draw) - cash = models_raffle.Cash(user_id=student_user.id, balance=66) + cash = models_raffle.Cash(user_id=student_user.id, balance=6600) await add_object_to_db(cash) @@ -295,7 +295,7 @@ def test_get_raffle_stats(client: TestClient) -> None: headers={"Authorization": f"Bearer {token}"}, ) assert response.status_code == 200 - assert response.json()["amount_raised"] == 1.0 + assert response.json()["amount_raised"] == 100 # # tickets @@ -397,7 +397,7 @@ def test_create_packtickets(client: TestClient) -> None: "/tombola/pack_tickets", json={ "raffle_id": raffle.id, - "price": 1.23, + "price": 123, "pack_size": 5, }, headers={"Authorization": f"Bearer {token}"}, @@ -412,7 +412,7 @@ def test_edit_packtickets(client: TestClient) -> None: f"/tombola/pack_tickets/{packticket.id}", json={ "raffle_id": raffle.id, - "price": 10.0, + "price": 1000, "pack_size": 5, }, headers={"Authorization": f"Bearer {token}"},