fix(audit): corrige errores criticos y mayores, mejora UX/accesibilidad y optimiza rendimiento
Some checks failed
CI / lint-and-test (3.11) (push) Has been cancelled
CI / lint-and-test (3.13) (push) Has been cancelled

- Arregla @require_auth, permisos, race conditions, locks de caja/stock
- Elimina N+1 en layaway, flotilla, dashboard y global_invoice
- Asegura folios atomicos para CFDI, ordenes de servicio y polizas
- Protege client_secret de MercadoLibre en backend
- Conecta botones/filtros de config, customers, accounting e invoicing
- Mejora accesibilidad (labels/aria-label) y estados de carga/vacio
- Limpia accounting.js obsoleto y consolida accounting.v9.js
- Actualiza cache busting a v32 y Service Worker a v32
- Documenta todo en docs/AUDIT_Y_MEJORAS_2026-06-15.md

Tests: 35 passed
This commit is contained in:
2026-06-29 23:54:58 +00:00
parent 59a4893e84
commit 2bdeb2973a
61 changed files with 2879 additions and 706 deletions

View File

@@ -64,17 +64,20 @@ def conn():
return MockConn(MockCursor())
def test_generate_order_number_first_of_year(conn):
def test_generate_order_number_first_of_day(conn):
conn._cursor.responses = [(None,)]
number = engine._generate_order_number(conn)
assert number.startswith("SO-")
assert number.endswith("-0001")
# Format DDMMYYYY-N
assert len(number.split("-")) == 2
assert number.split("-")[1] == "1"
def test_generate_order_number_increments(conn):
conn._cursor.responses = [("SO-2026-0042",)]
from datetime import datetime
today = datetime.utcnow().strftime('%d%m%Y')
conn._cursor.responses = [(f"{today}-42",)]
number = engine._generate_order_number(conn)
assert number.endswith("-0043")
assert number == f"{today}-43"
@mock.patch("services.inventory_engine.get_stock", return_value=10)
@@ -82,11 +85,11 @@ def test_generate_order_number_increments(conn):
def test_reserve_item_inserts_so_reserve_and_updates_quantity(mock_record, mock_stock, conn):
conn._cursor.responses = [
(1, 5, 3, "pending", "SO-2026-0001"), # item lookup
(1, 5, 3, "pending", "SO-2026-0001", 2), # item lookup (branch_id=2)
None, # update
]
result = engine.reserve_item(conn, 7, branch_id=2, employee_id=9)
result = engine.reserve_item(conn, 7, branch_id=99, employee_id=9)
assert result["reserved"] == 3
mock_stock.assert_called_once_with(conn, 5, 2)
@@ -99,11 +102,11 @@ def test_reserve_item_inserts_so_reserve_and_updates_quantity(mock_record, mock_
@mock.patch("services.inventory_engine.get_stock", return_value=1)
def test_reserve_item_raises_when_insufficient_stock(mock_stock, conn):
conn._cursor.responses = [
(1, 5, 3, "pending", "SO-2026-0001"),
(1, 5, 3, "pending", "SO-2026-0001", 2),
]
with pytest.raises(ValueError, match="Insufficient stock"):
engine.reserve_item(conn, 7, branch_id=2)
engine.reserve_item(conn, 7, branch_id=99)
@mock.patch("services.inventory_engine.record_operation", return_value=124)