🧪 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