/** * Workflow Runner — workflow/lifecycle suite * * Tests workflow definitions, instance creation, and stage progression. * Requires the content-approval workflow package to be installed. */ (function () { 'use strict'; var API = window.WR.api; sw.testing.suite('workflow/lifecycle', async function (s) { var defId, instanceId; s.test('list workflow definitions', async function (t) { var r = await sw.api.get(API); var list = Array.isArray(r) ? r : (r.data || []); t.assert.ok(Array.isArray(list), 'definitions is array'); // Find content-approval definition var def = list.find(function (d) { return d.slug === 'content-approval' || d.name === 'Content Approval'; }); if (!def) { t.warn('content-approval definition not found — package may need activation'); // Try to find any definition if (list.length > 0) { def = list[0]; t.warn('Using first available definition: ' + (def.name || def.slug)); } else { t.skip('No workflow definitions available'); return; } } t.assert.ok(def.id, 'definition has id'); defId = def.id; }); s.test('create workflow instance', async function (t) { if (!defId) { t.skip('No definition from previous test'); return; } var r = await sw.api.post(API + '/' + defId + '/instances', { data: { title: 'Runner test submission', body: 'Test content from workflow-runner', category: 'blog' } }); t.assert.ok(r.id, 'instance has id'); t.assert.ok(r.status || r.current_stage !== undefined, 'instance has status/stage'); instanceId = r.id; s.track('workflow', instanceId); }); s.test('get workflow instance', async function (t) { if (!defId || !instanceId) { t.skip('No instance from previous test'); return; } var r = await sw.api.get(API + '/' + defId + '/instances/' + instanceId); t.assert.eq(r.id, instanceId, 'instance id matches'); }); s.test('advance stage', async function (t) { if (!defId || !instanceId) { t.skip('No instance from previous test'); return; } try { var r = await sw.api.post(API + '/' + defId + '/instances/' + instanceId + '/advance', { data: { title: 'Runner test submission', body: 'Test content from workflow-runner', category: 'blog' } }); t.assert.ok(true, 'advance succeeded'); } catch (e) { // Stage advance may fail if form validation requires specific fields t.warn('Stage advance failed: ' + e.message); } }); s.test('list instances', async function (t) { if (!defId) { t.skip('No definition from previous test'); return; } var r = await sw.api.get(API + '/' + defId + '/instances'); var list = Array.isArray(r) ? r : (r.data || []); t.assert.ok(Array.isArray(list), 'instances is array'); if (instanceId) { var found = list.some(function (i) { return i.id === instanceId; }); t.assert.ok(found, 'created instance appears in list'); } }); }); })();