Skip to content

Commit d97bc70

Browse files
authored
Merge pull request #74 from antmendoza/add-booklending-example
Add booklending example, partial implementation
2 parents 3f4c6b1 + 73fd9af commit d97bc70

22 files changed

+313
-85
lines changed

spec/examples/applicantrequest.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@
1616
*/
1717
import {WorkflowBuilder} from "../../src/model/workflow.builder";
1818
import * as fs from "fs";
19-
import {FunctionBuilder} from "../../src/model/function.builder";
19+
import {FunctionDefBuilder} from "../../src/model/function-def.builder";
2020
import {DatabasedSwitchBuilder} from "../../src/model/databased-switch.builder";
2121
import {TransitiondataconditionBuilder} from "../../src/model/transitiondatacondition.builder";
2222
import {OperationStateBuilder} from "../../src/model/operation-state.builder";
2323
import {SubFlowStateBuilder} from "../../src/model/sub-flow-state.builder";
2424
import {ActionBuilder} from "../../src/model/action.builder";
25-
import {ArgumentsBuilder} from "../../src/model/arguments.builder";
2625
import {DefaultTransitionTypeBuilder} from "../../src/model/default-transition-type.builder";
26+
import {FunctionRefBuilder} from '../../src/model/function-ref.builder';
2727

2828

2929
describe("applicationrequest workflow example", () => {
@@ -37,7 +37,7 @@ describe("applicationrequest workflow example", () => {
3737
.withName("Applicant Request Decision Workflow")
3838
.withDescription("Determine if applicant request is valid")
3939
.withStart("CheckApplication")
40-
.withFunctions([new FunctionBuilder()
40+
.withFunctions([new FunctionDefBuilder()
4141
.withName("sendRejectionEmailFunction")
4242
.withOperation("http://myapis.org/applicationapi.json#emailRejection")
4343
.build()])
@@ -68,7 +68,7 @@ describe("applicationrequest workflow example", () => {
6868
.withEnd(true)
6969
.withActions([
7070
new ActionBuilder().withFunctionRef(
71-
new ArgumentsBuilder()
71+
new FunctionRefBuilder()
7272
.withRefName("sendRejectionEmailFunction")
7373
.withArguments({applicant: '${ .applicant }'})
7474
.build(),

spec/examples/booklending.json

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{
2+
"id": "booklending",
3+
"name": "Book Lending Workflow",
4+
"version": "1.0",
5+
"start": "Book Lending Request",
6+
"states": [
7+
{
8+
"name": "Book Lending Request",
9+
"type": "event",
10+
"onEvents": [
11+
{
12+
"eventRefs": [
13+
"Book Lending Request Event"
14+
]
15+
}
16+
],
17+
"transition": "Get Book Status"
18+
},
19+
{
20+
"name": "Get Book Status",
21+
"type": "operation",
22+
"actions": [
23+
{
24+
"functionRef": {
25+
"refName": "Get status for book",
26+
"arguments": {
27+
"bookid": "${ .book.id }"
28+
}
29+
}
30+
}
31+
],
32+
"transition": "Book Status Decision"
33+
}
34+
],
35+
"functions": "file://books/lending/functions.json",
36+
"events": "file://books/lending/events.json"
37+
}

spec/examples/booklending.spec.ts

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/*
2+
* Copyright 2021-Present The Serverless Workflow Specification Authors
3+
* <p>
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
* <p>
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
* <p>
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*
16+
*/
17+
import {ActionBuilder, EventsBuilder, OperationStateBuilder, WorkflowBuilder} from '../../src';
18+
import * as fs from 'fs';
19+
import {StartBuilder} from '../../src/model/start.builder';
20+
import {EventStateBuilder} from '../../src/model/event-state.builder';
21+
import {OnEventBuilder} from '../../src/model/on-event.builder';
22+
import {FunctionRefBuilder} from '../../src/model/function-ref.builder';
23+
import {FunctionsBuilder} from '../../src/model/functions.builder';
24+
25+
26+
describe("booklending workflow example", () => {
27+
28+
29+
it('should generate Workflow object', function () {
30+
31+
const workflow = new WorkflowBuilder()
32+
.withId("booklending")
33+
.withName("Book Lending Workflow")
34+
.withVersion("1.0")
35+
.withStart(new StartBuilder()
36+
.withName("Book Lending Request")
37+
.build())
38+
.withStates([
39+
new EventStateBuilder()
40+
.withName("Book Lending Request")
41+
.withOnEvents([
42+
new OnEventBuilder()
43+
.withEventsRef(["Book Lending Request Event"])
44+
.build(),
45+
])
46+
.withTransition("Get Book Status")
47+
.build(),
48+
new OperationStateBuilder()
49+
.withName("Get Book Status")
50+
.withActions([
51+
new ActionBuilder().withFunctionRef(
52+
new FunctionRefBuilder()
53+
.withRefName("Get status for book")
54+
.withArguments({
55+
"bookid": "${ .book.id }",
56+
})
57+
.build(),
58+
).build(),
59+
])
60+
.withTransition("Book Status Decision")
61+
.build(),
62+
])
63+
.withFunctions(new FunctionsBuilder()
64+
.withURIDefinition("file://books/lending/functions.json")
65+
.build())
66+
.withEvents(new EventsBuilder()
67+
.withURIDefinition("file://books/lending/events.json")
68+
.build())
69+
.build();
70+
71+
const expected = JSON.parse(fs.readFileSync("./spec/examples/booklending.json")
72+
.toLocaleString()) as any;
73+
expect(workflow).toEqual(expected);
74+
75+
});
76+
77+
78+
});

spec/examples/carauctionbids.spec.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,14 @@
1414
* limitations under the License.
1515
*
1616
*/
17-
import {ActionBuilder, FunctionBuilder, ArgumentsBuilder, WorkflowBuilder} from '../../src';
17+
import {ActionBuilder, FunctionDefBuilder, WorkflowBuilder} from '../../src';
1818
import * as fs from 'fs';
1919
import {StartBuilder} from '../../src/model/start.builder';
2020
import {EventsBuilder} from '../../src/model/events.builder';
2121
import {EventBuilder} from '../../src/model/event.builder';
2222
import {EventStateBuilder} from '../../src/model/event-state.builder';
2323
import {OnEventBuilder} from '../../src/model/on-event.builder';
24+
import {FunctionRefBuilder} from '../../src/model/function-ref.builder';
2425

2526
describe("carauctionbids workflow example", () => {
2627

@@ -35,7 +36,7 @@ describe("carauctionbids workflow example", () => {
3536
.withStart(new StartBuilder()
3637
.withName("StoreCarAuctionBid")
3738
.withSchedule("2020-03-20T09:00:00Z/2020-03-20T15:00:00Z").build())
38-
.withFunctions([new FunctionBuilder()
39+
.withFunctions([new FunctionDefBuilder()
3940
.withName("StoreBidFunction")
4041
.withOperation("http://myapis.org/carauctionapi.json#storeBid")
4142
.build()])
@@ -55,7 +56,7 @@ describe("carauctionbids workflow example", () => {
5556
.withEventsRef(["CarBidEvent"])
5657
.withActions([
5758
new ActionBuilder().withFunctionRef(
58-
new ArgumentsBuilder()
59+
new FunctionRefBuilder()
5960
.withRefName("StoreBidFunction")
6061
.withArguments({
6162
"bid": "${ .bid }",

spec/examples/transition.builder.js

Whitespace-only changes.

spec/model/action-builder.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*
1616
*/
1717

18-
import {ActionBuilder, ActionDataFilterType, EventRefType} from '../../src';
18+
import {ActionBuilder, ActionDataFilterType, EventRef} from '../../src';
1919
import {ActionDataFilterBuilder} from '../../src/model/action-data-filter.builder';
2020

2121

@@ -67,6 +67,6 @@ function validActionDataFilter(): ActionDataFilterType {
6767
return {};
6868
}
6969

70-
function validEventRef(): EventRefType {
70+
function validEventRef(): EventRef {
7171
return {resultEventRef: "result"};
7272
}

spec/model/function-builder.spec.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,36 +15,36 @@
1515
*
1616
*/
1717

18-
import {FunctionBuilder} from '../../src';
18+
import {FunctionDefBuilder} from '../../src';
1919

2020

2121
describe("FunctionBuilder", () => {
2222

2323

2424
it("should throws an error if mandatory fields are not set ", () => {
2525

26-
expect(() => new FunctionBuilder().build()).toThrowError();
26+
expect(() => new FunctionDefBuilder().build()).toThrowError();
2727

28-
expect(() => new FunctionBuilder()
28+
expect(() => new FunctionDefBuilder()
2929
.withName("")
3030
.withOperation("")
3131
.build())
3232
.toThrowError();
3333

34-
expect(() => new FunctionBuilder()
34+
expect(() => new FunctionDefBuilder()
3535
.withOperation("http://myapis.org/applicationapi.json#emailRejection")
3636
.build())
3737
.toThrowError();
3838

39-
expect(() => new FunctionBuilder()
39+
expect(() => new FunctionDefBuilder()
4040
.withName("functionName")
4141
.build())
4242
.toThrowError();
4343
});
4444

4545

4646
it("should generate a populated object with default type value", () => {
47-
expect(new FunctionBuilder()
47+
expect(new FunctionDefBuilder()
4848
.withName("functionName")
4949
.withOperation("http://myapis.org/applicationapi.json#emailRejection")
5050
.build()).toEqual(
@@ -58,7 +58,7 @@ describe("FunctionBuilder", () => {
5858
});
5959

6060
it("should generate a populated object with default type value", () => {
61-
expect(new FunctionBuilder()
61+
expect(new FunctionDefBuilder()
6262
.withName("functionName")
6363
.withOperation("file#serviceName#method")
6464
.withType("rpc")

src/index.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,16 @@ export {BaseWorkflow} from "./base-workflow";
1919

2020
export {ActionBuilder} from "./model/action.builder";
2121
export {ActionDataFilterBuilder} from "./model/action-data-filter.builder";
22-
export {ArgumentsBuilder} from "./model/arguments.builder";
2322
export {CronDefBuilder} from "./model/cron-def.builder";
2423
export {DatabasedSwitchBuilder} from "./model/databased-switch.builder";
2524
export {DefaultTransitionTypeBuilder} from "./model/default-transition-type.builder";
2625
export {EventBuilder} from "./model/event.builder";
2726
export {EventRefBuilder} from "./model/event-ref.builder";
2827
export {EventStateBuilder} from "./model/event-state.builder";
2928
export {EventsBuilder} from "./model/events.builder";
30-
export {FunctionBuilder} from "./model/function.builder";
29+
export {FunctionDefBuilder} from "./model/function-def.builder";
30+
export {FunctionRefBuilder} from "./model/function-ref.builder";
31+
export {FunctionsBuilder} from "./model/functions.builder";
3132
export {InjectStateBuilder} from "./model/inject-state.builder";
3233
export {MetadataBuilder} from "./model/metadata.builder";
3334
export {OnEventBuilder} from "./model/on-event.builder";

src/model/action.builder.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,19 @@
1414
* limitations under the License.
1515
*
1616
*/
17-
import {ActionDataFilterType, Action, EventRefType, FunctionRefType} from "./types";
17+
import {ActionDataFilterType, Action, EventRef, FunctionRef} from "./types";
1818

1919
export class ActionBuilder {
2020

2121
private model: Action = {};
2222

2323

24-
withFunctionRef(value: FunctionRefType): ActionBuilder {
24+
withFunctionRef(value: FunctionRef): ActionBuilder {
2525
this.model.functionRef = value;
2626
return this;
2727
}
2828

29-
withEventRef(value: EventRefType): ActionBuilder {
29+
withEventRef(value: EventRef): ActionBuilder {
3030
this.model.eventRef = value;
3131
return this;
3232
}

src/model/event-ref.builder.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414
* limitations under the License.
1515
*
1616
*/
17-
import {EventRefType} from '../index';
17+
import {EventRef} from '../index';
1818

1919
export class EventRefBuilder {
2020

21-
private readonly model: EventRefType = {};
21+
private readonly model: EventRef = {};
2222

2323

2424
withResultEventRef(value: string): EventRefBuilder {
@@ -42,7 +42,7 @@ export class EventRefBuilder {
4242
return this;
4343
}
4444

45-
build(): EventRefType {
45+
build(): EventRef {
4646

4747
if (!this.model.resultEventRef) {
4848
throw new Error("Field resultEventRef can not be undefined");

0 commit comments

Comments
 (0)