@temporalio/testing 1.8.5 → 1.9.0-rc.0
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/lib/index.d.ts +11 -4
- package/lib/index.js +17 -40
- package/lib/index.js.map +1 -1
- package/package.json +9 -9
- package/src/index.ts +27 -21
package/lib/index.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ import events from 'node:events';
|
|
|
13
13
|
import * as activity from '@temporalio/activity';
|
|
14
14
|
import { AsyncCompletionClient, Client, ClientOptions, WorkflowClient, WorkflowClientOptions, WorkflowResultOptions } from '@temporalio/client';
|
|
15
15
|
import { ActivityFunction, Duration } from '@temporalio/common';
|
|
16
|
-
import { NativeConnection } from '@temporalio/worker';
|
|
16
|
+
import { ActivityInterceptorsFactory, NativeConnection } from '@temporalio/worker';
|
|
17
17
|
import { EphemeralServer, EphemeralServerConfig, DevServerConfig, TimeSkippingServerConfig } from '@temporalio/core-bridge';
|
|
18
18
|
import { Connection, TestService } from './connection';
|
|
19
19
|
export { TimeSkippingServerConfig, DevServerConfig, EphemeralServerExecutable } from '@temporalio/core-bridge';
|
|
@@ -214,6 +214,9 @@ export declare class TestWorkflowEnvironment {
|
|
|
214
214
|
*/
|
|
215
215
|
currentTimeMs(): Promise<number>;
|
|
216
216
|
}
|
|
217
|
+
export interface MockActivityEnvironmentOptions {
|
|
218
|
+
interceptors?: ActivityInterceptorsFactory[];
|
|
219
|
+
}
|
|
217
220
|
/**
|
|
218
221
|
* Used as the default activity info for Activities executed in the {@link MockActivityEnvironment}
|
|
219
222
|
*/
|
|
@@ -221,13 +224,17 @@ export declare const defaultActivityInfo: activity.Info;
|
|
|
221
224
|
/**
|
|
222
225
|
* An execution environment for testing Activities.
|
|
223
226
|
*
|
|
224
|
-
* Mocks Activity {@link Context | activity.Context} and exposes hooks for
|
|
225
|
-
*
|
|
227
|
+
* Mocks Activity {@link Context | activity.Context} and exposes hooks for cancellation and heartbeats.
|
|
228
|
+
*
|
|
229
|
+
* Note that the `Context` object used by this environment will be reused for all activities that are run in this
|
|
230
|
+
* environment. Consequently, once `cancel()` is called, any further activity that gets executed in this environment
|
|
231
|
+
* will immediately be in a cancelled state.
|
|
226
232
|
*/
|
|
227
233
|
export declare class MockActivityEnvironment extends events.EventEmitter {
|
|
228
234
|
cancel: (reason?: any) => void;
|
|
229
235
|
readonly context: activity.Context;
|
|
230
|
-
|
|
236
|
+
private readonly activity;
|
|
237
|
+
constructor(info?: Partial<activity.Info>, opts?: MockActivityEnvironmentOptions);
|
|
231
238
|
/**
|
|
232
239
|
* Run a function in Activity Context
|
|
233
240
|
*/
|
package/lib/index.js
CHANGED
|
@@ -8,29 +8,6 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @module
|
|
10
10
|
*/
|
|
11
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
-
if (k2 === undefined) k2 = k;
|
|
13
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
-
}
|
|
17
|
-
Object.defineProperty(o, k2, desc);
|
|
18
|
-
}) : (function(o, m, k, k2) {
|
|
19
|
-
if (k2 === undefined) k2 = k;
|
|
20
|
-
o[k2] = m[k];
|
|
21
|
-
}));
|
|
22
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
-
}) : function(o, v) {
|
|
25
|
-
o["default"] = v;
|
|
26
|
-
});
|
|
27
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
11
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
13
|
};
|
|
@@ -39,11 +16,11 @@ exports.MockActivityEnvironment = exports.defaultActivityInfo = exports.TestWork
|
|
|
39
16
|
require("abort-controller/polyfill"); // eslint-disable-line import/no-unassigned-import
|
|
40
17
|
const node_path_1 = __importDefault(require("node:path"));
|
|
41
18
|
const node_events_1 = __importDefault(require("node:events"));
|
|
42
|
-
const activity = __importStar(require("@temporalio/activity"));
|
|
43
19
|
const client_1 = require("@temporalio/client");
|
|
44
20
|
const common_1 = require("@temporalio/common");
|
|
45
21
|
const time_1 = require("@temporalio/common/lib/time");
|
|
46
22
|
const worker_1 = require("@temporalio/worker");
|
|
23
|
+
const activity_1 = require("@temporalio/worker/lib/activity");
|
|
47
24
|
const core_bridge_1 = require("@temporalio/core-bridge");
|
|
48
25
|
const internal_non_workflow_1 = require("@temporalio/common/lib/internal-non-workflow");
|
|
49
26
|
const connection_1 = require("./connection");
|
|
@@ -299,31 +276,31 @@ exports.defaultActivityInfo = {
|
|
|
299
276
|
/**
|
|
300
277
|
* An execution environment for testing Activities.
|
|
301
278
|
*
|
|
302
|
-
* Mocks Activity {@link Context | activity.Context} and exposes hooks for
|
|
303
|
-
*
|
|
279
|
+
* Mocks Activity {@link Context | activity.Context} and exposes hooks for cancellation and heartbeats.
|
|
280
|
+
*
|
|
281
|
+
* Note that the `Context` object used by this environment will be reused for all activities that are run in this
|
|
282
|
+
* environment. Consequently, once `cancel()` is called, any further activity that gets executed in this environment
|
|
283
|
+
* will immediately be in a cancelled state.
|
|
304
284
|
*/
|
|
305
285
|
class MockActivityEnvironment extends node_events_1.default.EventEmitter {
|
|
306
|
-
constructor(info) {
|
|
286
|
+
constructor(info, opts) {
|
|
307
287
|
super();
|
|
308
288
|
this.cancel = () => undefined;
|
|
309
|
-
const abortController = new AbortController();
|
|
310
|
-
const promise = new Promise((_, reject) => {
|
|
311
|
-
this.cancel = (reason) => {
|
|
312
|
-
abortController.abort();
|
|
313
|
-
reject(new common_1.CancelledFailure(reason));
|
|
314
|
-
};
|
|
315
|
-
});
|
|
316
289
|
const heartbeatCallback = (details) => this.emit('heartbeat', details);
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
290
|
+
const loadedDataConverter = {
|
|
291
|
+
payloadConverter: common_1.defaultPayloadConverter,
|
|
292
|
+
payloadCodecs: [],
|
|
293
|
+
failureConverter: common_1.defaultFailureConverter,
|
|
294
|
+
};
|
|
295
|
+
this.activity = new activity_1.Activity({ ...exports.defaultActivityInfo, ...info }, undefined, loadedDataConverter, heartbeatCallback, opts?.interceptors ?? []);
|
|
296
|
+
this.context = this.activity.context;
|
|
297
|
+
this.cancel = this.activity.cancel;
|
|
321
298
|
}
|
|
322
299
|
/**
|
|
323
300
|
* Run a function in Activity Context
|
|
324
301
|
*/
|
|
325
|
-
run(fn, ...args) {
|
|
326
|
-
return activity.
|
|
302
|
+
async run(fn, ...args) {
|
|
303
|
+
return this.activity.runNoEncoding(fn, { args, headers: {} });
|
|
327
304
|
}
|
|
328
305
|
}
|
|
329
306
|
exports.MockActivityEnvironment = MockActivityEnvironment;
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@temporalio/testing",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.0-rc.0",
|
|
4
4
|
"description": "Temporal.io SDK Testing sub-package",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
@@ -13,13 +13,13 @@
|
|
|
13
13
|
"license": "MIT",
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"@grpc/grpc-js": "~1.7.3",
|
|
16
|
-
"@temporalio/activity": "1.
|
|
17
|
-
"@temporalio/client": "1.
|
|
18
|
-
"@temporalio/common": "1.
|
|
19
|
-
"@temporalio/core-bridge": "1.
|
|
20
|
-
"@temporalio/proto": "1.
|
|
21
|
-
"@temporalio/worker": "1.
|
|
22
|
-
"@temporalio/workflow": "1.
|
|
16
|
+
"@temporalio/activity": "1.9.0-rc.0",
|
|
17
|
+
"@temporalio/client": "1.9.0-rc.0",
|
|
18
|
+
"@temporalio/common": "1.9.0-rc.0",
|
|
19
|
+
"@temporalio/core-bridge": "1.9.0-rc.0",
|
|
20
|
+
"@temporalio/proto": "1.9.0-rc.0",
|
|
21
|
+
"@temporalio/worker": "1.9.0-rc.0",
|
|
22
|
+
"@temporalio/workflow": "1.9.0-rc.0",
|
|
23
23
|
"abort-controller": "^3.0.0"
|
|
24
24
|
},
|
|
25
25
|
"bugs": {
|
|
@@ -38,5 +38,5 @@
|
|
|
38
38
|
"publishConfig": {
|
|
39
39
|
"access": "public"
|
|
40
40
|
},
|
|
41
|
-
"gitHead": "
|
|
41
|
+
"gitHead": "ca3e508e62de02b2c9bb40d0d889003cebba282d"
|
|
42
42
|
}
|
package/src/index.ts
CHANGED
|
@@ -20,9 +20,10 @@ import {
|
|
|
20
20
|
WorkflowClientOptions,
|
|
21
21
|
WorkflowResultOptions,
|
|
22
22
|
} from '@temporalio/client';
|
|
23
|
-
import { ActivityFunction,
|
|
23
|
+
import { ActivityFunction, Duration, defaultFailureConverter, defaultPayloadConverter } from '@temporalio/common';
|
|
24
24
|
import { msToNumber, msToTs, tsToMs } from '@temporalio/common/lib/time';
|
|
25
|
-
import { NativeConnection, Runtime } from '@temporalio/worker';
|
|
25
|
+
import { ActivityInterceptorsFactory, NativeConnection, Runtime } from '@temporalio/worker';
|
|
26
|
+
import { Activity } from '@temporalio/worker/lib/activity';
|
|
26
27
|
import {
|
|
27
28
|
EphemeralServer,
|
|
28
29
|
EphemeralServerConfig,
|
|
@@ -364,6 +365,10 @@ export class TestWorkflowEnvironment {
|
|
|
364
365
|
}
|
|
365
366
|
}
|
|
366
367
|
|
|
368
|
+
export interface MockActivityEnvironmentOptions {
|
|
369
|
+
interceptors?: ActivityInterceptorsFactory[];
|
|
370
|
+
}
|
|
371
|
+
|
|
367
372
|
/**
|
|
368
373
|
* Used as the default activity info for Activities executed in the {@link MockActivityEnvironment}
|
|
369
374
|
*/
|
|
@@ -390,39 +395,40 @@ export const defaultActivityInfo: activity.Info = {
|
|
|
390
395
|
/**
|
|
391
396
|
* An execution environment for testing Activities.
|
|
392
397
|
*
|
|
393
|
-
* Mocks Activity {@link Context | activity.Context} and exposes hooks for
|
|
394
|
-
*
|
|
398
|
+
* Mocks Activity {@link Context | activity.Context} and exposes hooks for cancellation and heartbeats.
|
|
399
|
+
*
|
|
400
|
+
* Note that the `Context` object used by this environment will be reused for all activities that are run in this
|
|
401
|
+
* environment. Consequently, once `cancel()` is called, any further activity that gets executed in this environment
|
|
402
|
+
* will immediately be in a cancelled state.
|
|
395
403
|
*/
|
|
396
404
|
export class MockActivityEnvironment extends events.EventEmitter {
|
|
397
405
|
public cancel: (reason?: any) => void = () => undefined;
|
|
398
406
|
public readonly context: activity.Context;
|
|
407
|
+
private readonly activity: Activity;
|
|
399
408
|
|
|
400
|
-
constructor(info?: Partial<activity.Info
|
|
409
|
+
constructor(info?: Partial<activity.Info>, opts?: MockActivityEnvironmentOptions) {
|
|
401
410
|
super();
|
|
402
|
-
const abortController = new AbortController();
|
|
403
|
-
const promise = new Promise<never>((_, reject) => {
|
|
404
|
-
this.cancel = (reason?: any) => {
|
|
405
|
-
abortController.abort();
|
|
406
|
-
reject(new CancelledFailure(reason));
|
|
407
|
-
};
|
|
408
|
-
});
|
|
409
411
|
const heartbeatCallback = (details?: unknown) => this.emit('heartbeat', details);
|
|
410
|
-
|
|
412
|
+
const loadedDataConverter = {
|
|
413
|
+
payloadConverter: defaultPayloadConverter,
|
|
414
|
+
payloadCodecs: [],
|
|
415
|
+
failureConverter: defaultFailureConverter,
|
|
416
|
+
};
|
|
417
|
+
this.activity = new Activity(
|
|
411
418
|
{ ...defaultActivityInfo, ...info },
|
|
412
|
-
|
|
413
|
-
|
|
419
|
+
undefined,
|
|
420
|
+
loadedDataConverter,
|
|
414
421
|
heartbeatCallback,
|
|
415
|
-
|
|
422
|
+
opts?.interceptors ?? []
|
|
416
423
|
);
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
});
|
|
424
|
+
this.context = this.activity.context;
|
|
425
|
+
this.cancel = this.activity.cancel;
|
|
420
426
|
}
|
|
421
427
|
|
|
422
428
|
/**
|
|
423
429
|
* Run a function in Activity Context
|
|
424
430
|
*/
|
|
425
|
-
public run<P extends any[], R, F extends ActivityFunction<P, R>>(fn: F, ...args: P): Promise<R> {
|
|
426
|
-
return activity.
|
|
431
|
+
public async run<P extends any[], R, F extends ActivityFunction<P, R>>(fn: F, ...args: P): Promise<R> {
|
|
432
|
+
return this.activity.runNoEncoding(fn as ActivityFunction<any, any>, { args, headers: {} }) as Promise<R>;
|
|
427
433
|
}
|
|
428
434
|
}
|