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))