Alinea el dominio al spec de catálogos: - accounts (Clientes/Prospectos): tipo registro/persona, CURP, clasificación comercial, bloque fiscal (régimen, CFDI, pago, crédito), auditoría, notas internas - suppliers (Proveedores): clasificación múltiple, cobertura, países/puertos/ aeropuertos/aduanas (JSON), fiscal - addresses y documents: tablas compartidas con FK a cliente o proveedor - contacts enriquecidos (extensión, whatsapp, área, flags "recibe…", supplier_id) - migración a7b8c9d0e1f2 (ALTER + CREATE) con downgrade completo - permisos supplier/address/document; seed de datos actualizado - 39 tests pytest en verde Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
52 lines
1.9 KiB
Python
52 lines
1.9 KiB
Python
import pytest
|
|
from fastapi import HTTPException
|
|
|
|
from api.v1.modules.crm.suppliers import service
|
|
from api.v1.modules.crm.suppliers.dto import SupplierCreate, SupplierUpdate
|
|
|
|
T, C = 1, 1
|
|
|
|
|
|
def test_create_supplier_with_multivalue_fields(db):
|
|
supplier = service.create_supplier(
|
|
db,
|
|
SupplierCreate(
|
|
name="Naviera del Golfo SA",
|
|
classifications=["naviera", "agente_carga"],
|
|
coverage="internacional",
|
|
countries=["MX", "US", "PA"],
|
|
ports=["Veracruz", "Manzanillo"],
|
|
customs=["Veracruz"],
|
|
quote_currency="USD",
|
|
),
|
|
T, C, user_id="dev",
|
|
)
|
|
assert supplier.id is not None
|
|
assert supplier.status == "active"
|
|
assert supplier.classifications == ["naviera", "agente_carga"]
|
|
assert supplier.countries == ["MX", "US", "PA"]
|
|
assert supplier.created_by == "dev"
|
|
|
|
|
|
def test_list_and_search_supplier(db):
|
|
service.create_supplier(db, SupplierCreate(name="Aerolínea Carga MX", classifications=["aerolinea"]), T, C)
|
|
service.create_supplier(db, SupplierCreate(name="Transportes Terrestres"), T, C)
|
|
assert len(service.get_suppliers(db, T, C)) == 2
|
|
found = service.get_suppliers(db, T, C, search="aero")
|
|
assert len(found) == 1 and found[0].name == "Aerolínea Carga MX"
|
|
|
|
|
|
def test_update_supplier_replaces_lists(db):
|
|
s = service.create_supplier(db, SupplierCreate(name="X", classifications=["naviera"]), T, C)
|
|
upd = service.update_supplier(db, s.id, SupplierUpdate(classifications=["ferrocarril", "almacen"]), T, C)
|
|
assert upd.classifications == ["ferrocarril", "almacen"]
|
|
|
|
|
|
def test_soft_delete_supplier(db):
|
|
s = service.create_supplier(db, SupplierCreate(name="Y"), T, C)
|
|
service.delete_supplier(db, s.id, T, C)
|
|
with pytest.raises(HTTPException) as exc:
|
|
service.get_supplier(db, s.id, T, C)
|
|
assert exc.value.status_code == 404
|
|
assert service.get_suppliers(db, T, C) == []
|