El parser usaba querySelector() que retornaba solo el primer <bpmn:process>. En diagramas de colaboración con múltiples pools, las actividades de los pools 2..N nunca se cargaban en la store, haciendo imposible configurarlas. Ahora itera todos los <bpmn:process> hijos directos de <definitions> y combina sus nodos y flujos en un único grafo. Pools de soporte sin StartEvent propio (SAP, bandeja manual) son válidos — la validación exige al menos un StartEvent entre todos los pools del diagrama. Agrega 3 tests de regresión para el escenario de colaboración. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
43 lines
1.5 KiB
TypeScript
43 lines
1.5 KiB
TypeScript
import { describe, it, expect } from 'vitest'
|
|
import { readFileSync } from 'fs'
|
|
import { resolve } from 'path'
|
|
import { parseBpmnXml, extractActivityElements } from '@/domain/bpmn-parser'
|
|
|
|
describe('Colaboración multi-pool', () => {
|
|
const xml = readFileSync(resolve(__dirname, '../proceso_carga_facturas.bpmn'), 'utf-8')
|
|
|
|
it('parsea sin error', () => {
|
|
expect(() => parseBpmnXml(xml)).not.toThrow()
|
|
})
|
|
|
|
it('extrae actividades de TODOS los pools, no solo el primero', () => {
|
|
const graph = parseBpmnXml(xml)
|
|
const acts = extractActivityElements(graph)
|
|
const ids = acts.map((a) => a.bpmnElementId)
|
|
|
|
// Pool 1 — IKData (OCR)
|
|
expect(ids).toContain('Task_OCR')
|
|
expect(ids).toContain('Task_GenerarPayload')
|
|
|
|
// Pool 2 — Robot RPA (proceso principal)
|
|
expect(ids).toContain('Task_LeerPayload')
|
|
expect(ids).toContain('Task_AbrirSAP')
|
|
expect(ids).toContain('Task_GuardarFactura')
|
|
expect(ids).toContain('Task_DerivarBandeja')
|
|
|
|
// Pool 3 — SAP (pool de soporte sin StartEvent propio)
|
|
expect(ids).toContain('Task_RecibirFactura')
|
|
|
|
// Pool 4 — Bandeja manual (pool de soporte sin StartEvent propio)
|
|
expect(ids).toContain('Task_RevisionManual')
|
|
|
|
expect(acts.length).toBeGreaterThanOrEqual(14)
|
|
})
|
|
|
|
it('tiene StartEvents de los pools principales aunque otros pools no tengan', () => {
|
|
const graph = parseBpmnXml(xml)
|
|
expect(graph.startEventIds).toContain('StartEvent_IKData')
|
|
expect(graph.startEventIds).toContain('StartEvent_Robot')
|
|
})
|
|
})
|