@forgehive/task 0.1.13 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +37 -24
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +58 -13
- package/dist/index.js.map +1 -1
- package/dist/test/add-listener-with-boundaries.test.js +186 -181
- package/dist/test/add-listener-with-boundaries.test.js.map +1 -1
- package/dist/test/add-listener.test.js +80 -52
- package/dist/test/add-listener.test.js.map +1 -1
- package/dist/test/safe-replay-complex-boundary.test.js +36 -27
- package/dist/test/safe-replay-complex-boundary.test.js.map +1 -1
- package/dist/test/safe-replay.test.js +23 -14
- package/dist/test/safe-replay.test.js.map +1 -1
- package/dist/test/safe-run.test.js +41 -16
- package/dist/test/safe-run.test.js.map +1 -1
- package/dist/test/task-boundary-mocking.test.js +17 -7
- package/dist/test/task-boundary-mocking.test.js.map +1 -1
- package/dist/test/task-execution-log.test.d.ts +2 -0
- package/dist/test/task-execution-log.test.d.ts.map +1 -0
- package/dist/test/task-execution-log.test.js +207 -0
- package/dist/test/task-execution-log.test.js.map +1 -0
- package/dist/test/task-with-boundaries.test.js +56 -24
- package/dist/test/task-with-boundaries.test.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +109 -40
- package/src/test/add-listener-with-boundaries.test.ts +202 -252
- package/src/test/add-listener.test.ts +90 -64
- package/src/test/safe-replay-complex-boundary.test.ts +18 -10
- package/src/test/safe-replay.test.ts +21 -12
- package/src/test/safe-run.test.ts +20 -15
- package/src/test/task-boundary-mocking.test.ts +8 -6
- package/src/test/task-execution-log.test.ts +246 -0
- package/src/test/task-with-boundaries.test.ts +45 -44
|
@@ -1,230 +1,235 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const index_1 = require("../index");
|
|
4
|
-
describe('Listener with boundaries
|
|
5
|
-
it('Should
|
|
4
|
+
describe('Listener with boundaries', () => {
|
|
5
|
+
it('Should add a listener to the task and capture boundaries', async () => {
|
|
6
6
|
const tape = [];
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
7
|
+
const task = (0, index_1.createTask)({
|
|
8
|
+
name: 'test',
|
|
9
|
+
schema: new index_1.Schema({
|
|
10
|
+
value: index_1.Schema.number()
|
|
11
|
+
}),
|
|
12
|
+
boundaries: {
|
|
13
|
+
getTen: async () => {
|
|
14
|
+
return 10;
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
fn: async (argv, boundaries) => {
|
|
18
|
+
const ten = await boundaries.getTen();
|
|
19
|
+
return { value: argv.value, foo: ten > 5 };
|
|
15
20
|
}
|
|
16
|
-
};
|
|
17
|
-
// Create the task using createTask
|
|
18
|
-
const task = (0, index_1.createTask)(schema, boundaries, async (argv, boundaries) => {
|
|
19
|
-
const externalData = await boundaries.fetchExternalData();
|
|
20
|
-
return Object.assign(Object.assign({}, externalData), argv);
|
|
21
21
|
});
|
|
22
22
|
task.addListener((record) => {
|
|
23
23
|
tape.push(record);
|
|
24
24
|
});
|
|
25
25
|
await task.run({ value: 5 });
|
|
26
|
-
expect(tape
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
26
|
+
expect(tape).toEqual([{
|
|
27
|
+
input: { value: 5 },
|
|
28
|
+
output: { value: 5, foo: true },
|
|
29
|
+
boundaries: {
|
|
30
|
+
getTen: [{
|
|
31
|
+
input: [],
|
|
32
|
+
output: 10
|
|
33
|
+
}]
|
|
34
|
+
},
|
|
35
|
+
taskName: 'test',
|
|
36
|
+
metadata: {},
|
|
37
|
+
type: 'success'
|
|
38
|
+
}]);
|
|
34
39
|
});
|
|
35
|
-
it('Should
|
|
40
|
+
it('Should add a listener to the task and capture boundaries with error', async () => {
|
|
36
41
|
const tape = [];
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
const task = (0, index_1.createTask)({
|
|
43
|
+
name: 'test',
|
|
44
|
+
schema: new index_1.Schema({
|
|
45
|
+
value: index_1.Schema.number()
|
|
46
|
+
}),
|
|
47
|
+
boundaries: {
|
|
48
|
+
getTen: async () => {
|
|
49
|
+
throw new Error('Network error');
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
fn: async (argv, boundaries) => {
|
|
53
|
+
const ten = await boundaries.getTen();
|
|
54
|
+
return { value: argv.value, foo: ten > 5 };
|
|
45
55
|
}
|
|
46
|
-
};
|
|
47
|
-
// Create the task using createTask
|
|
48
|
-
const task = (0, index_1.createTask)(schema, boundaries, async (argv, boundaries) => {
|
|
49
|
-
const externalData = await boundaries.fetchExternalData();
|
|
50
|
-
return Object.assign(Object.assign({}, externalData), argv);
|
|
51
56
|
});
|
|
52
57
|
task.addListener((record) => {
|
|
53
58
|
tape.push(record);
|
|
54
59
|
});
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
60
|
+
try {
|
|
61
|
+
await task.run({ value: 5 });
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
// Expected error
|
|
65
|
+
}
|
|
66
|
+
expect(tape).toEqual([{
|
|
67
|
+
input: { value: 5 },
|
|
68
|
+
error: 'Network error',
|
|
69
|
+
boundaries: {
|
|
70
|
+
getTen: [{
|
|
71
|
+
input: [],
|
|
72
|
+
error: 'Network error'
|
|
73
|
+
}]
|
|
74
|
+
},
|
|
75
|
+
taskName: 'test',
|
|
76
|
+
metadata: {},
|
|
77
|
+
type: 'error'
|
|
78
|
+
}]);
|
|
72
79
|
});
|
|
73
|
-
it('Should
|
|
80
|
+
it('Should add a listener to the task and capture boundaries with dynamic parameters', async () => {
|
|
74
81
|
const tape = [];
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
const task = (0, index_1.createTask)(schema, boundaries, async (argv, boundaries) => {
|
|
87
|
-
const externalData = await boundaries.fetchExternalData();
|
|
88
|
-
if (typeof argv.value === 'undefined') {
|
|
89
|
-
throw new Error('Value is required');
|
|
82
|
+
const task = (0, index_1.createTask)({
|
|
83
|
+
name: 'test',
|
|
84
|
+
schema: new index_1.Schema({}),
|
|
85
|
+
boundaries: {
|
|
86
|
+
addNumbers: async (a, b) => {
|
|
87
|
+
return a + b;
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
fn: async (argv, boundaries) => {
|
|
91
|
+
const sum = await boundaries.addNumbers(3, 7);
|
|
92
|
+
return { value: sum, foo: sum > 5 };
|
|
90
93
|
}
|
|
91
|
-
return Object.assign(Object.assign({}, externalData), argv);
|
|
92
94
|
});
|
|
93
95
|
task.addListener((record) => {
|
|
94
96
|
tape.push(record);
|
|
95
97
|
});
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
98
|
+
await task.run({});
|
|
99
|
+
expect(tape).toEqual([{
|
|
100
|
+
input: {},
|
|
101
|
+
output: { value: 10, foo: true },
|
|
102
|
+
boundaries: {
|
|
103
|
+
addNumbers: [{
|
|
104
|
+
input: [3, 7],
|
|
105
|
+
output: 10
|
|
106
|
+
}]
|
|
107
|
+
},
|
|
108
|
+
taskName: 'test',
|
|
109
|
+
metadata: {},
|
|
110
|
+
type: 'success'
|
|
111
|
+
}]);
|
|
110
112
|
});
|
|
111
|
-
it('Should
|
|
113
|
+
it('Should add a listener to the task and capture boundaries with optional parameters', async () => {
|
|
112
114
|
const tape = [];
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
if (typeof argv.value === 'undefined') {
|
|
127
|
-
throw new Error('Value is required');
|
|
115
|
+
const task = (0, index_1.createTask)({
|
|
116
|
+
name: 'test',
|
|
117
|
+
schema: new index_1.Schema({
|
|
118
|
+
value: index_1.Schema.number().optional()
|
|
119
|
+
}),
|
|
120
|
+
boundaries: {
|
|
121
|
+
processValue: async (val) => {
|
|
122
|
+
return val || 0;
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
fn: async (argv, boundaries) => {
|
|
126
|
+
const processed = await boundaries.processValue(argv.value);
|
|
127
|
+
return { value: processed, foo: processed > 5 };
|
|
128
128
|
}
|
|
129
|
-
return Object.assign(Object.assign({}, externalData), argv);
|
|
130
129
|
});
|
|
131
130
|
task.addListener((record) => {
|
|
132
131
|
tape.push(record);
|
|
133
132
|
});
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
]
|
|
148
|
-
});
|
|
149
|
-
expect(tape[1].input).toEqual({ value: 5 });
|
|
150
|
-
expect(tape[1].output).toEqual({ value: 5, foo: false });
|
|
151
|
-
expect(tape[1].boundaries).toEqual({
|
|
152
|
-
fetchExternalData: [
|
|
153
|
-
{ input: [], output: { foo: false } }
|
|
154
|
-
]
|
|
155
|
-
});
|
|
133
|
+
await task.run({ value: undefined });
|
|
134
|
+
expect(tape).toEqual([{
|
|
135
|
+
input: { value: undefined },
|
|
136
|
+
output: { value: 0, foo: false },
|
|
137
|
+
boundaries: {
|
|
138
|
+
processValue: [{
|
|
139
|
+
input: [undefined],
|
|
140
|
+
output: 0
|
|
141
|
+
}]
|
|
142
|
+
},
|
|
143
|
+
taskName: 'test',
|
|
144
|
+
metadata: {},
|
|
145
|
+
type: 'success'
|
|
146
|
+
}]);
|
|
156
147
|
});
|
|
157
|
-
it('Should
|
|
148
|
+
it('Should add a listener to the task and capture boundaries with multiple calls', async () => {
|
|
158
149
|
const tape = [];
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
150
|
+
const task = (0, index_1.createTask)({
|
|
151
|
+
name: 'test',
|
|
152
|
+
schema: new index_1.Schema({
|
|
153
|
+
value: index_1.Schema.number()
|
|
154
|
+
}),
|
|
155
|
+
boundaries: {
|
|
156
|
+
multiplyByTwo: async (num) => {
|
|
157
|
+
return num * 2;
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
fn: async (argv, boundaries) => {
|
|
161
|
+
const doubled = await boundaries.multiplyByTwo(argv.value);
|
|
162
|
+
const quadrupled = await boundaries.multiplyByTwo(doubled);
|
|
163
|
+
return { foo: quadrupled > 10 };
|
|
167
164
|
}
|
|
168
|
-
};
|
|
169
|
-
// Create the task using createTask
|
|
170
|
-
const task = (0, index_1.createTask)(schema, boundaries, async (argv, boundaries) => {
|
|
171
|
-
await boundaries.fetchExternalData();
|
|
172
|
-
await boundaries.fetchExternalData();
|
|
173
|
-
return { foo: true };
|
|
174
165
|
});
|
|
175
166
|
task.addListener((record) => {
|
|
176
167
|
tape.push(record);
|
|
177
168
|
});
|
|
178
|
-
await task.run({ value:
|
|
179
|
-
expect(tape
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
169
|
+
await task.run({ value: 3 });
|
|
170
|
+
expect(tape).toEqual([{
|
|
171
|
+
input: { value: 3 },
|
|
172
|
+
output: { foo: true },
|
|
173
|
+
boundaries: {
|
|
174
|
+
multiplyByTwo: [
|
|
175
|
+
{
|
|
176
|
+
input: [3],
|
|
177
|
+
output: 6
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
input: [6],
|
|
181
|
+
output: 12
|
|
182
|
+
}
|
|
183
|
+
]
|
|
184
|
+
},
|
|
185
|
+
taskName: 'test',
|
|
186
|
+
metadata: {},
|
|
187
|
+
type: 'success'
|
|
188
|
+
}]);
|
|
188
189
|
});
|
|
189
|
-
it('Should
|
|
190
|
+
it('Should add a listener to the task and capture boundaries with mixed results', async () => {
|
|
190
191
|
const tape = [];
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
192
|
+
const task = (0, index_1.createTask)({
|
|
193
|
+
name: 'test',
|
|
194
|
+
schema: new index_1.Schema({
|
|
195
|
+
value: index_1.Schema.number()
|
|
196
|
+
}),
|
|
197
|
+
boundaries: {
|
|
198
|
+
getResult: async (num) => {
|
|
199
|
+
if (num > 5) {
|
|
200
|
+
return num * 2;
|
|
201
|
+
}
|
|
202
|
+
throw new Error('Number too small');
|
|
203
|
+
}
|
|
199
204
|
},
|
|
200
|
-
|
|
201
|
-
|
|
205
|
+
fn: async (argv, boundaries) => {
|
|
206
|
+
let result = 0;
|
|
207
|
+
try {
|
|
208
|
+
result = await boundaries.getResult(argv.value);
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
// Continue with default
|
|
212
|
+
}
|
|
213
|
+
return result;
|
|
202
214
|
}
|
|
203
|
-
};
|
|
204
|
-
// Create the task using createTask
|
|
205
|
-
const task = (0, index_1.createTask)(schema, boundaries, async (argv, boundaries) => {
|
|
206
|
-
let counter = argv.value;
|
|
207
|
-
counter = await boundaries.add(counter);
|
|
208
|
-
counter = await boundaries.subtract(counter);
|
|
209
|
-
counter = await boundaries.subtract(counter);
|
|
210
|
-
return counter;
|
|
211
215
|
});
|
|
212
216
|
task.addListener((record) => {
|
|
213
217
|
tape.push(record);
|
|
214
218
|
});
|
|
215
|
-
await task.run({ value:
|
|
216
|
-
expect(tape
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
219
|
+
await task.run({ value: 3 });
|
|
220
|
+
expect(tape).toEqual([{
|
|
221
|
+
input: { value: 3 },
|
|
222
|
+
output: 0,
|
|
223
|
+
boundaries: {
|
|
224
|
+
getResult: [{
|
|
225
|
+
input: [3],
|
|
226
|
+
error: 'Number too small'
|
|
227
|
+
}]
|
|
228
|
+
},
|
|
229
|
+
taskName: 'test',
|
|
230
|
+
metadata: {},
|
|
231
|
+
type: 'success'
|
|
232
|
+
}]);
|
|
228
233
|
});
|
|
229
234
|
});
|
|
230
235
|
//# sourceMappingURL=add-listener-with-boundaries.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-listener-with-boundaries.test.js","sourceRoot":"","sources":["../../src/test/add-listener-with-boundaries.test.ts"],"names":[],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"add-listener-with-boundaries.test.js","sourceRoot":"","sources":["../../src/test/add-listener-with-boundaries.test.ts"],"names":[],"mappings":"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"}
|