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.
66 lines
2.3 KiB
Python
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))
|
|
|