clinical_laboratory/test/run_cancel_tests.py
Luis Ernesto Portillo Zaldivar 39318f9073 feat(#54): Cancelar automáticamente muestras y pruebas al cancelar orden
- Agregar estado 'cancelled' a stock.lot para muestras
- Implementar método action_cancel() en stock.lot
- Override action_cancel() en sale.order para:
  * Cancelar muestras en estados: pending_collection, collected, received, in_process
  * Cancelar pruebas asociadas que no estén validadas
  * Registrar mensajes en el chatter de cada elemento cancelado
  * Mostrar resumen de elementos cancelados en la orden
- Agregar tests unitarios completos para verificar:
  * Cancelación correcta de muestras y pruebas
  * No cancelación de elementos en estados finales
  * Generación de mensajes en chatter
  * Órdenes normales no afectadas

La funcionalidad asegura que no queden muestras o pruebas "huérfanas"
cuando se cancela una orden de laboratorio.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-15 18:53:19 -06:00

53 lines
1.5 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Ejecutar tests de cancelación en cascada
"""
import odoo
import sys
def run_tests(cr):
"""Ejecutar los tests"""
env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, {})
# Importar y ejecutar tests
from odoo.addons.lims_management.tests.test_order_cancel_cascade import TestOrderCancelCascade
suite = odoo.tests.loader.make_suite(TestOrderCancelCascade)
result = odoo.tests.runner.run(suite)
print(f"\n📊 Resultados de los tests:")
print(f" Tests ejecutados: {result.testsRun}")
print(f" Errores: {len(result.errors)}")
print(f" Fallos: {len(result.failures)}")
if result.errors:
print("\n❌ Errores:")
for test, error in result.errors:
print(f" - {test}: {error}")
if result.failures:
print("\n❌ Fallos:")
for test, failure in result.failures:
print(f" - {test}: {failure}")
if result.wasSuccessful():
print("\n✅ Todos los tests pasaron exitosamente!")
else:
print("\n❌ Algunos tests fallaron")
return result.wasSuccessful()
if __name__ == '__main__':
db_name = 'lims_demo'
try:
registry = odoo.modules.registry.Registry(db_name)
with registry.cursor() as cr:
success = run_tests(cr)
sys.exit(0 if success else 1)
except Exception as e:
print(f"Error: {e}")
import traceback
traceback.print_exc()
sys.exit(1)