fix(plugin-workflow): dispatch when server start (#1183)
This commit is contained in:
parent
c64e32945e
commit
eee4cabd64
@ -100,6 +100,9 @@ export default class WorkflowPlugin extends Plugin {
|
|||||||
workflows.forEach((workflow: WorkflowModel) => {
|
workflows.forEach((workflow: WorkflowModel) => {
|
||||||
this.toggle(workflow);
|
this.toggle(workflow);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// check for not started executions
|
||||||
|
await this.dispatch();
|
||||||
});
|
});
|
||||||
|
|
||||||
this.app.on('beforeStop', async () => {
|
this.app.on('beforeStop', async () => {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { MockServer } from '@nocobase/test';
|
import { MockServer } from '@nocobase/test';
|
||||||
import Database from '@nocobase/database';
|
import Database from '@nocobase/database';
|
||||||
import { getApp, sleep } from '.';
|
import { getApp, sleep } from '.';
|
||||||
|
import { EXECUTION_STATUS } from '../constants';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -181,4 +182,70 @@ describe('workflow > Plugin', () => {
|
|||||||
expect(c2).toBe(1);
|
expect(c2).toBe(1);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('dispatcher', () => {
|
||||||
|
it('multiple triggers in same event', async () => {
|
||||||
|
const w1 = await WorkflowModel.create({
|
||||||
|
enabled: true,
|
||||||
|
type: 'collection',
|
||||||
|
config: {
|
||||||
|
mode: 1,
|
||||||
|
collection: 'posts'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const w2 = await WorkflowModel.create({
|
||||||
|
enabled: true,
|
||||||
|
type: 'collection',
|
||||||
|
config: {
|
||||||
|
mode: 1,
|
||||||
|
collection: 'posts'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const p1 = await PostRepo.create({ values: { title: 't1' } });
|
||||||
|
|
||||||
|
await sleep(500);
|
||||||
|
|
||||||
|
const [e1] = await w1.getExecutions();
|
||||||
|
expect(e1.status).toBe(EXECUTION_STATUS.RESOLVED);
|
||||||
|
|
||||||
|
const [e2] = await w2.getExecutions();
|
||||||
|
expect(e2.status).toBe(EXECUTION_STATUS.RESOLVED);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('when server starts, process all created executions', async () => {
|
||||||
|
const w1 = await WorkflowModel.create({
|
||||||
|
enabled: true,
|
||||||
|
type: 'collection',
|
||||||
|
config: {
|
||||||
|
mode: 1,
|
||||||
|
collection: 'posts'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
await app.stop();
|
||||||
|
|
||||||
|
await db.reconnect();
|
||||||
|
|
||||||
|
const p1 = await PostRepo.create({ values: { title: 't1' } });
|
||||||
|
|
||||||
|
const ExecutionModel = db.getCollection('executions').model;
|
||||||
|
const e1 = await ExecutionModel.create({
|
||||||
|
workflowId: w1.id,
|
||||||
|
key: w1.key,
|
||||||
|
useTransaction: w1.useTransaction,
|
||||||
|
context: {
|
||||||
|
data: p1.get()
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
await app.start();
|
||||||
|
|
||||||
|
await sleep(500);
|
||||||
|
|
||||||
|
const [e2] = await w1.getExecutions();
|
||||||
|
expect(e2.status).toBe(EXECUTION_STATUS.RESOLVED);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -16,6 +16,7 @@ export default {
|
|||||||
name: 'useTransaction',
|
name: 'useTransaction',
|
||||||
defaultValue: false
|
defaultValue: false
|
||||||
},
|
},
|
||||||
|
// @deprecated
|
||||||
{
|
{
|
||||||
type: 'uuid',
|
type: 'uuid',
|
||||||
name: 'transaction',
|
name: 'transaction',
|
||||||
|
Loading…
Reference in New Issue
Block a user