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.
94 lines
3.6 KiB
Python
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()
|
|
|