🧪 feat(mock): ampliar base local e seed incremental do banco
- eleva os alvos do seed local para 180 veiculos, 320 clientes e 80 pedidos, reduzindo o esgotamento precoce do estoque em roteiros manuais - distribui os precos em faixas deterministicas com ruido leve para concentrar mais opcoes em orcamentos comuns como 70 mil - torna o seed idempotente em bases ja populadas com top-up incremental e adiciona regressao para esse comportamentomain
parent
d0c29ca374
commit
8a95e96df3
@ -0,0 +1,88 @@
|
||||
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
|
||||
|
||||
|
||||
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,
|
||||
)
|
||||
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()
|
||||
Loading…
Reference in New Issue