You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
orquestrador/tests/test_inventory_service.py

66 lines
2.3 KiB
Python

import unittest
from unittest.mock import patch
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from app.db.mock_database import MockBase
from app.db.mock_models import Order, RentalVehicle, Vehicle
from app.services.domain.inventory_service import consultar_estoque
class InventoryServiceIsolationTests(unittest.IsolatedAsyncioTestCase):
def _build_session_local(self):
engine = create_engine("sqlite:///:memory:")
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
MockBase.metadata.create_all(bind=engine)
self.addCleanup(engine.dispose)
return SessionLocal
async def test_consultar_estoque_uses_only_sales_fleet(self):
SessionLocal = self._build_session_local()
db = SessionLocal()
try:
reserved_sale_vehicle = Vehicle(
modelo="Toyota Corolla 2024",
categoria="sedan",
preco=76087.0,
)
available_sale_vehicle = Vehicle(
modelo="Renault Duster 2022",
categoria="suv",
preco=73666.0,
)
rental_vehicle = RentalVehicle(
placa="RAA1A01",
modelo="Chevrolet Tracker",
categoria="suv",
ano=2024,
valor_diaria=219.90,
status="disponivel",
)
db.add_all([reserved_sale_vehicle, available_sale_vehicle, rental_vehicle])
db.flush()
db.add(
Order(
numero_pedido="PED-TESTE-0001",
cpf="12345678909",
vehicle_id=reserved_sale_vehicle.id,
modelo_veiculo=reserved_sale_vehicle.modelo,
valor_veiculo=reserved_sale_vehicle.preco,
status="Ativo",
)
)
db.commit()
finally:
db.close()
with patch("app.services.domain.inventory_service.SessionMockLocal", SessionLocal):
result = await consultar_estoque(preco_max=80000)
self.assertEqual(len(result), 1)
self.assertEqual(result[0]["modelo"], "Renault Duster 2022")
self.assertEqual(result[0]["categoria"], "suv")
self.assertTrue(all(item["modelo"] != "Chevrolet Tracker" for item in result))