feat(crm): catálogos Clientes/Prospectos (enriquecido) y Proveedores + direcciones/documentos
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>
This commit is contained in:
51
backend/tests/test_suppliers.py
Normal file
51
backend/tests/test_suppliers.py
Normal file
@@ -0,0 +1,51 @@
|
||||
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) == []
|
||||
Reference in New Issue
Block a user