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_mock_seed.py

94 lines
3.6 KiB
Python

import unittest
from unittest.mock import patch
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from app.db import mock_seed as mock_seed_module
from app.db.mock_database import MockBase
from app.db.mock_models import Customer, Order, Vehicle
from app.services.orchestration.technical_normalizer import is_valid_cpf
class MockSeedDataTests(unittest.TestCase):
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
def test_seed_mock_data_populates_target_volume_with_affordable_inventory(self):
SessionLocal = self._build_session_local()
with patch.object(mock_seed_module, "SessionMockLocal", SessionLocal), patch.object(
mock_seed_module.settings,
"mock_seed_enabled",
True,
):
mock_seed_module.seed_mock_data()
db = SessionLocal()
try:
self.assertEqual(db.query(Vehicle).count(), mock_seed_module.TARGET_VEHICLE_COUNT)
self.assertEqual(db.query(Customer).count(), mock_seed_module.TARGET_CUSTOMER_COUNT)
self.assertEqual(db.query(Order).count(), mock_seed_module.TARGET_ORDER_COUNT)
self.assertGreaterEqual(
db.query(Vehicle).filter(Vehicle.preco <= 70000).count(),
50,
)
sample_cpfs = [row.cpf for row in db.query(Customer).order_by(Customer.id).limit(5).all()]
self.assertTrue(sample_cpfs)
self.assertTrue(all(is_valid_cpf(cpf) for cpf in sample_cpfs))
finally:
db.close()
def test_seed_mock_data_tops_up_existing_partial_database(self):
SessionLocal = self._build_session_local()
db = SessionLocal()
try:
db.add_all(
[
Vehicle(modelo="Base Hatch 2020", categoria="hatch", preco=45990.0),
Vehicle(modelo="Base Sedan 2021", categoria="sedan", preco=58990.0),
Customer(
cpf=mock_seed_module._cpf_from_index(0),
nome="Cliente Base 1",
score=650,
limite_credito=75000.0,
possui_restricao=False,
),
Order(
numero_pedido="PED-LEGADO-00001",
cpf=mock_seed_module._cpf_from_index(0),
status="Ativo",
),
]
)
db.commit()
finally:
db.close()
with patch.object(mock_seed_module, "SessionMockLocal", SessionLocal), patch.object(
mock_seed_module.settings,
"mock_seed_enabled",
True,
):
mock_seed_module.seed_mock_data()
mock_seed_module.seed_mock_data()
db = SessionLocal()
try:
self.assertEqual(db.query(Vehicle).count(), mock_seed_module.TARGET_VEHICLE_COUNT)
self.assertEqual(db.query(Customer).count(), mock_seed_module.TARGET_CUSTOMER_COUNT)
self.assertEqual(db.query(Order).count(), mock_seed_module.TARGET_ORDER_COUNT)
self.assertEqual(db.query(Order).filter(Order.numero_pedido == "PED-LEGADO-00001").count(), 1)
self.assertEqual(db.query(Vehicle).filter(Vehicle.modelo == "Base Hatch 2020").count(), 1)
finally:
db.close()
if __name__ == "__main__":
unittest.main()