Skip to content

Commit

Permalink
Merge pull request #16 from danielgerlag/additional-primitives
Browse files Browse the repository at this point in the history
Additional primitives
  • Loading branch information
danielgerlag committed Mar 25, 2018
2 parents cb131dc + a2487a4 commit c462c7b
Show file tree
Hide file tree
Showing 44 changed files with 951 additions and 455 deletions.
6 changes: 3 additions & 3 deletions core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "workflow-es",
"version": "2.0.2",
"version": "2.1.0",
"description": "A lightweight workflow engine for Node.js",
"main": "./build/src/index.js",
"typings": "./build/src/index.d.ts",
Expand Down Expand Up @@ -30,7 +30,7 @@
},
"dependencies": {
"inversify": "^4.1.0",
"reflect-metadata": "^0.1.10",
"underscore": "^1.8.3"
"moment": "^2.21.0",
"reflect-metadata": "^0.1.10"
}
}
45 changes: 45 additions & 0 deletions core/spec/helpers/spin-wait.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@

export async function spinWaitCallback(until: () => Promise<boolean>, done: DoneFn) {
let counter = 0;
let callback = async () => {

try {
let result = await until();

if ((!result) && (counter < 60)) {
counter++;
setTimeout(callback, 500);
}
else {
done();
}
}
catch (err) {
done.fail(err);
}
};
setTimeout(callback, 500);
}

export function spinWait(until: () => Promise<boolean>): Promise<void> {
return new Promise<void>((resolve, reject) => {
let counter = 0;
let callback = async () => {
try {
let result = await until();

if ((!result) && (counter < 60)) {
counter++;
setTimeout(callback, 500);
}
else {
resolve();
}
}
catch (err) {
reject(err);
}
};
setTimeout(callback, 500);
});
}
10 changes: 5 additions & 5 deletions core/spec/memory-persistence-provider.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ import { MemoryPersistenceProvider } from "../src/services/memory-persistence-pr

describe("memory-persistence-provider", () => {

var persistence: IPersistenceProvider = new MemoryPersistenceProvider();
var wf1: WorkflowInstance;
let persistence: IPersistenceProvider = new MemoryPersistenceProvider();
let wf1: WorkflowInstance;

beforeEach(() => {
});

describe("createNewWorkflow", () => {
var returnedId: string;
let returnedId: string;

beforeEach((done) => {
wf1 = new WorkflowInstance();
Expand All @@ -33,7 +33,7 @@ describe("memory-persistence-provider", () => {
});

describe("getWorkflowInstance", () => {
var wf2: WorkflowInstance;
let wf2: WorkflowInstance;
beforeEach((done) => {
persistence.getWorkflowInstance(wf1.id)
.then(wf => {
Expand All @@ -49,7 +49,7 @@ describe("memory-persistence-provider", () => {
});

describe("persistWorkflow", () => {
var modified: WorkflowInstance;
let modified: WorkflowInstance;

beforeEach((done) => {
modified = JSON.parse(JSON.stringify(wf1));
Expand Down
46 changes: 15 additions & 31 deletions core/spec/scenarios/basic-workflow.spec.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { configureWorkflow, WorkflowHost, WorkflowBuilder, WorkflowStatus, WorkflowBase, StepBody, StepExecutionContext, ExecutionResult, WorkflowInstance, ConsoleLogger } from "../../src";
import { MemoryPersistenceProvider } from "../../src/services/memory-persistence-provider";
import { spinWaitCallback } from "../helpers/spin-wait";

var basicWorkflowScope = {
let basicWorkflowScope = {
step1Ticker: 0,
step2Ticker: 0
}
Expand Down Expand Up @@ -33,42 +34,25 @@ import { MemoryPersistenceProvider } from "../../src/services/memory-persistence
}
}

var workflowId = null;
var instance = null;
let workflowId = null;
let instance = null;

var persistence = new MemoryPersistenceProvider();
var config = configureWorkflow();
let persistence = new MemoryPersistenceProvider();
let config = configureWorkflow();
config.useLogger(new ConsoleLogger());
config.usePersistence(persistence);
var host = config.getHost();
let host = config.getHost();

jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000;

beforeAll((done) => {
host.registerWorkflow(Basic_Workflow);
host.start()
.then(() => {
host.startWorkflow("basic-workflow", 1, null)
.then(id => {
workflowId = id;
var counter = 0;
var callback = () => {
persistence.getWorkflowInstance(workflowId)
.then(result => {
instance = result;
if ((instance.status == WorkflowStatus.Runnable) && (counter < 60)) {
counter++;
setTimeout(callback, 500);
}
else {
done();
}
})
.catch(done.fail);
};
setTimeout(callback, 500);
});
});
beforeAll(async (done) => {
host.registerWorkflow(Basic_Workflow);
await host.start();
workflowId = await host.startWorkflow("basic-workflow", 1, null);
spinWaitCallback(async () => {
instance = await persistence.getWorkflowInstance(workflowId);
return (instance.status != WorkflowStatus.Runnable);
}, done);
});

afterAll(() => {
Expand Down
50 changes: 17 additions & 33 deletions core/spec/scenarios/data-io.spec.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { WorkflowHost, WorkflowBuilder, WorkflowStatus, WorkflowBase, StepBody, StepExecutionContext, ExecutionResult, WorkflowInstance, configureWorkflow, ConsoleLogger } from "../../src";
import { MemoryPersistenceProvider } from "../../src/services/memory-persistence-provider";
import { WorkflowHost, WorkflowBuilder, WorkflowStatus, WorkflowBase, StepBody, StepExecutionContext, ExecutionResult, WorkflowInstance, configureWorkflow, ConsoleLogger } from "../../src";
import { MemoryPersistenceProvider } from "../../src/services/memory-persistence-provider";
import { spinWaitCallback } from "../helpers/spin-wait";

describe("data io", () => {

Expand Down Expand Up @@ -33,44 +34,27 @@
}
}

var workflowId = null;
var instance = null;
var persistence = new MemoryPersistenceProvider();
var config = configureWorkflow();
let workflowId = null;
let instance = null;
let persistence = new MemoryPersistenceProvider();
let config = configureWorkflow();
config.useLogger(new ConsoleLogger());
config.usePersistence(persistence);
var host = config.getHost();
let host = config.getHost();
jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000;

beforeAll((done) => {
host.registerWorkflow(Data_Workflow);
host.start()
.then(() => {
host.startWorkflow("data-workflow", 1, { value1: 2, value2: 3 })
.then(id => {
workflowId = id;
var counter = 0;
var callback = () => {
persistence.getWorkflowInstance(workflowId)
.then(result => {
instance = result;
if ((instance.status == WorkflowStatus.Runnable) && (counter < 60)) {
counter++;
setTimeout(callback, 500);
}
else {
done();
}
})
.catch(done.fail);
};
setTimeout(callback, 500);
});
});
beforeAll(async (done) => {
host.registerWorkflow(Data_Workflow);
await host.start();
workflowId = await host.startWorkflow("data-workflow", 1, { value1: 2, value2: 3 });
spinWaitCallback(async () => {
instance = await persistence.getWorkflowInstance(workflowId);
return (instance.status != WorkflowStatus.Runnable);
}, done);
});

afterAll(() => {
host.stop();
host.stop();
});

it("should be marked as complete", function() {
Expand Down
72 changes: 25 additions & 47 deletions core/spec/scenarios/external-events.spec.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { WorkflowHost, WorkflowBuilder, WorkflowStatus, WorkflowBase, StepBody, StepExecutionContext, ExecutionResult, WorkflowInstance, configureWorkflow, ConsoleLogger } from "../../src";
import { MemoryPersistenceProvider } from "../../src/services/memory-persistence-provider";
import { WorkflowHost, WorkflowBuilder, WorkflowStatus, WorkflowBase, StepBody, StepExecutionContext, ExecutionResult, WorkflowInstance, configureWorkflow, ConsoleLogger } from "../../src";
import { MemoryPersistenceProvider } from "../../src/services/memory-persistence-provider";
import { spinWaitCallback, spinWait } from "../helpers/spin-wait";

describe("external events", () => {

Expand All @@ -25,55 +26,32 @@
}
}

var workflowId = null;
var instance = null;
var persistence = new MemoryPersistenceProvider();
var config = configureWorkflow();
let workflowId = null;
let instance = null;
let persistence = new MemoryPersistenceProvider();
let config = configureWorkflow();
config.useLogger(new ConsoleLogger());
config.usePersistence(persistence);
var host = config.getHost();
let host = config.getHost();
jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000;

beforeAll((done) => {
host.registerWorkflow(Event_Workflow);
host.start()
.then(() => {
host.startWorkflow("event-workflow", 1, { value1: 2, value2: 3 })
.then(id => {
workflowId = id;
var counter1 = 0;

var callback1 = () => {
persistence.getSubscriptions("my-event", "0", new Date())
.then(subs => {
if ((subs.length == 0) && (counter1 < 60))
setTimeout(callback1, 500);
else
host.publishEvent("my-event", "0", "Pass", new Date());
counter1++;
})
.catch(done.fail);
};

var counter2 = 0;
var callback2 = () => {
persistence.getWorkflowInstance(workflowId)
.then(result => {
instance = result;
if ((instance.status == WorkflowStatus.Runnable) && (counter2 < 60)) {
counter2++;
setTimeout(callback2, 500);
}
else {
done();
}
})
.catch(done.fail);
};
setTimeout(callback1, 500);
setTimeout(callback2, 1000);
});
});
beforeAll(async (done) => {
host.registerWorkflow(Event_Workflow);
await host.start();

workflowId = await host.startWorkflow("event-workflow", 1, { value1: 2, value2: 3 });

await spinWait(async () => {
let subs = await persistence.getSubscriptions("my-event", "0", new Date());
return (subs.length > 0);
});

await host.publishEvent("my-event", "0", "Pass", new Date());

spinWaitCallback(async () => {
instance = await persistence.getWorkflowInstance(workflowId);
return (instance.status != WorkflowStatus.Runnable);
}, done);
});

afterAll(() => {
Expand Down

0 comments on commit c462c7b

Please sign in to comment.