@motiadev/test 0.13.2-beta.163 → 0.13.2-beta.164-562802
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/event-manager.d.mts +12 -0
- package/dist/event-manager.d.mts.map +1 -0
- package/dist/event-manager.mjs +29 -0
- package/dist/event-manager.mjs.map +1 -0
- package/dist/helpers.d.mts +17 -0
- package/dist/helpers.d.mts.map +1 -0
- package/dist/helpers.mjs +64 -0
- package/dist/helpers.mjs.map +1 -0
- package/dist/index.d.mts +5 -0
- package/dist/index.mjs +5 -0
- package/dist/tester.d.mts +7 -0
- package/dist/tester.d.mts.map +1 -0
- package/dist/tester.mjs +58 -0
- package/dist/tester.mjs.map +1 -0
- package/dist/types.d.mts +41 -0
- package/dist/types.d.mts.map +1 -0
- package/package.json +12 -7
- package/tsdown.config.ts +17 -0
- package/dist/index.d.ts +0 -4
- package/dist/index.js +0 -20
- package/dist/src/event-manager.d.ts +0 -8
- package/dist/src/event-manager.js +0 -27
- package/dist/src/helpers.d.ts +0 -12
- package/dist/src/helpers.js +0 -67
- package/dist/src/tester.d.ts +0 -2
- package/dist/src/tester.js +0 -51
- package/dist/src/types.d.ts +0 -36
- package/dist/src/types.js +0 -2
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Event, EventAdapter } from "@motiadev/core";
|
|
2
|
+
|
|
3
|
+
//#region src/event-manager.d.ts
|
|
4
|
+
interface TestEventManager {
|
|
5
|
+
emit: <TData>(event: Event<TData>, file?: string) => Promise<void>;
|
|
6
|
+
waitEvents(): Promise<void>;
|
|
7
|
+
subscribe: <TData>(topic: string, stepName: string, handler: (event: Event<TData>) => void | Promise<void>) => void;
|
|
8
|
+
}
|
|
9
|
+
declare const createEventManager: (eventAdapter: EventAdapter) => TestEventManager;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { createEventManager };
|
|
12
|
+
//# sourceMappingURL=event-manager.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-manager.d.mts","names":[],"sources":["../src/event-manager.ts"],"sourcesContent":[],"mappings":";;;UAGU,gBAAA;uBACa,MAAM,0BAA0B;EAD7C,UAAA,EAAA,EAEM,OAFU,CAAA,IAAA,CAAA;EACG,SAAA,EAAA,CAAA,KAAA,CAAA,CAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,CAAA,KAAA,EAE0C,KAF1C,CAEgD,KAFhD,CAAA,EAAA,GAAA,IAAA,GAEkE,OAFlE,CAAA,IAAA,CAAA,EAAA,GAAA,IAAA;;AAA0B,cAK1C,kBAL0C,EAAA,CAAA,YAAA,EAKN,YALM,EAAA,GAKS,gBALT"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { DefaultQueueEventAdapter } from "@motiadev/core";
|
|
2
|
+
|
|
3
|
+
//#region src/event-manager.ts
|
|
4
|
+
const createEventManager = (eventAdapter) => {
|
|
5
|
+
const waitEvents = async () => {
|
|
6
|
+
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
7
|
+
if (eventAdapter instanceof DefaultQueueEventAdapter) {
|
|
8
|
+
let hasWork = true;
|
|
9
|
+
while (hasWork) {
|
|
10
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
11
|
+
const metrics = eventAdapter.getAllMetrics();
|
|
12
|
+
hasWork = Object.values(metrics).some((m) => m.queueDepth > 0 || m.processingCount > 0);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
16
|
+
};
|
|
17
|
+
const subscribe = (topic, stepName, handler) => {
|
|
18
|
+
eventAdapter.subscribe(topic, stepName, handler);
|
|
19
|
+
};
|
|
20
|
+
return {
|
|
21
|
+
emit: eventAdapter.emit,
|
|
22
|
+
waitEvents,
|
|
23
|
+
subscribe
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
//#endregion
|
|
28
|
+
export { createEventManager };
|
|
29
|
+
//# sourceMappingURL=event-manager.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-manager.mjs","names":["metrics: Record<string, QueueMetrics>"],"sources":["../src/event-manager.ts"],"sourcesContent":["import type { Event, EventAdapter, QueueMetrics } from '@motiadev/core'\nimport { DefaultQueueEventAdapter } from '@motiadev/core'\n\ninterface TestEventManager {\n emit: <TData>(event: Event<TData>, file?: string) => Promise<void>\n waitEvents(): Promise<void>\n subscribe: <TData>(topic: string, stepName: string, handler: (event: Event<TData>) => void | Promise<void>) => void\n}\n\nexport const createEventManager = (eventAdapter: EventAdapter): TestEventManager => {\n const waitEvents = async () => {\n await new Promise((resolve) => setTimeout(resolve, 200))\n\n if (eventAdapter instanceof DefaultQueueEventAdapter) {\n let hasWork = true\n while (hasWork) {\n await new Promise((resolve) => setTimeout(resolve, 100))\n const metrics: Record<string, QueueMetrics> = eventAdapter.getAllMetrics()\n hasWork = Object.values(metrics).some((m) => m.queueDepth > 0 || m.processingCount > 0)\n }\n }\n\n await new Promise((resolve) => setTimeout(resolve, 100))\n }\n\n const subscribe = <TData>(\n topic: string,\n stepName: string,\n handler: (event: Event<TData>) => void | Promise<void>,\n ) => {\n eventAdapter.subscribe(topic, stepName, handler)\n }\n\n return {\n emit: eventAdapter.emit,\n waitEvents,\n subscribe,\n }\n}\n"],"mappings":";;;AASA,MAAa,sBAAsB,iBAAiD;CAClF,MAAM,aAAa,YAAY;AAC7B,QAAM,IAAI,SAAS,YAAY,WAAW,SAAS,IAAI,CAAC;AAExD,MAAI,wBAAwB,0BAA0B;GACpD,IAAI,UAAU;AACd,UAAO,SAAS;AACd,UAAM,IAAI,SAAS,YAAY,WAAW,SAAS,IAAI,CAAC;IACxD,MAAMA,UAAwC,aAAa,eAAe;AAC1E,cAAU,OAAO,OAAO,QAAQ,CAAC,MAAM,MAAM,EAAE,aAAa,KAAK,EAAE,kBAAkB,EAAE;;;AAI3F,QAAM,IAAI,SAAS,YAAY,WAAW,SAAS,IAAI,CAAC;;CAG1D,MAAM,aACJ,OACA,UACA,YACG;AACH,eAAa,UAAU,OAAO,UAAU,QAAQ;;AAGlD,QAAO;EACL,MAAM,aAAa;EACnB;EACA;EACD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { MockFlowContext } from "./types.mjs";
|
|
2
|
+
import { Logger } from "@motiadev/core";
|
|
3
|
+
import { RedisClientType } from "redis";
|
|
4
|
+
|
|
5
|
+
//#region src/helpers.d.ts
|
|
6
|
+
declare const createMockLogger: () => jest.Mocked<Logger>;
|
|
7
|
+
declare const setupLoggerMock: () => void;
|
|
8
|
+
declare const createMockRedisClient: () => RedisClientType;
|
|
9
|
+
declare const createMockContext: (options?: {
|
|
10
|
+
logger?: jest.Mocked<Logger>;
|
|
11
|
+
emit?: jest.Mock;
|
|
12
|
+
traceId?: string;
|
|
13
|
+
state?: Partial<MockFlowContext["state"]>;
|
|
14
|
+
}) => MockFlowContext;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { createMockContext, createMockLogger, createMockRedisClient, setupLoggerMock };
|
|
17
|
+
//# sourceMappingURL=helpers.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.mts","names":[],"sources":["../src/helpers.ts"],"sourcesContent":[],"mappings":";;;;;cAIa,wBAQU,IAAA,CAAK,OAAO;cAGtB;AAXA,cAeA,qBAPU,EAAA,GAAK,GAOa,eAPP;AAGrB,cAkCA,iBAhCZ,EAAA,CAAA,OAkCQ,CAlCR,EAAA;EAEY,MAAA,CAAA,EA+BF,IAAA,CAAK,MA/BH,CA+BU,MAHtB,CAAA;EAEY,IAAA,CAAA,EAEJ,IAAA,CAAK,IAFD;EACU,OAAA,CAAA,EAAA,MAAA;EAAZ,KAAK,CAAA,EAGN,OAHM,CAGE,eAHF,CAAA,OAAA,CAAA,CAAA;CACP,EAAA,GAGL,eAHU"}
|
package/dist/helpers.mjs
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Logger } from "@motiadev/core";
|
|
2
|
+
|
|
3
|
+
//#region src/helpers.ts
|
|
4
|
+
const createMockLogger = () => {
|
|
5
|
+
return {
|
|
6
|
+
info: jest.fn(),
|
|
7
|
+
error: jest.fn(),
|
|
8
|
+
warn: jest.fn(),
|
|
9
|
+
debug: jest.fn(),
|
|
10
|
+
log: jest.fn()
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
const setupLoggerMock = () => {
|
|
14
|
+
Logger.mockImplementation(createMockLogger);
|
|
15
|
+
};
|
|
16
|
+
const createMockRedisClient = () => {
|
|
17
|
+
return {
|
|
18
|
+
connect: jest.fn().mockResolvedValue(void 0),
|
|
19
|
+
quit: jest.fn().mockResolvedValue(void 0),
|
|
20
|
+
disconnect: jest.fn().mockResolvedValue(void 0),
|
|
21
|
+
isOpen: true,
|
|
22
|
+
on: jest.fn(),
|
|
23
|
+
get: jest.fn().mockResolvedValue(null),
|
|
24
|
+
set: jest.fn().mockResolvedValue("OK"),
|
|
25
|
+
del: jest.fn().mockResolvedValue(1),
|
|
26
|
+
exists: jest.fn().mockResolvedValue(1),
|
|
27
|
+
keys: jest.fn().mockResolvedValue([]),
|
|
28
|
+
flushAll: jest.fn().mockResolvedValue("OK"),
|
|
29
|
+
ping: jest.fn().mockResolvedValue("PONG"),
|
|
30
|
+
xAdd: jest.fn().mockResolvedValue(""),
|
|
31
|
+
xRead: jest.fn().mockResolvedValue([]),
|
|
32
|
+
xReadGroup: jest.fn().mockResolvedValue([]),
|
|
33
|
+
xGroupCreate: jest.fn().mockResolvedValue("OK"),
|
|
34
|
+
xAck: jest.fn().mockResolvedValue(1),
|
|
35
|
+
hGet: jest.fn().mockResolvedValue(null),
|
|
36
|
+
hSet: jest.fn().mockResolvedValue(1),
|
|
37
|
+
hGetAll: jest.fn().mockResolvedValue({}),
|
|
38
|
+
hDel: jest.fn().mockResolvedValue(1),
|
|
39
|
+
hExists: jest.fn().mockResolvedValue(0),
|
|
40
|
+
expire: jest.fn().mockResolvedValue(1),
|
|
41
|
+
ttl: jest.fn().mockResolvedValue(-1),
|
|
42
|
+
publish: jest.fn().mockResolvedValue(0)
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
const createMockContext = (options) => {
|
|
46
|
+
const { logger = createMockLogger(), emit = jest.fn(), traceId = "mock-trace-id", state } = options || {};
|
|
47
|
+
return {
|
|
48
|
+
logger,
|
|
49
|
+
emit,
|
|
50
|
+
traceId,
|
|
51
|
+
state: {
|
|
52
|
+
get: jest.fn(),
|
|
53
|
+
set: jest.fn(),
|
|
54
|
+
delete: jest.fn(),
|
|
55
|
+
clear: jest.fn(),
|
|
56
|
+
getGroup: jest.fn(),
|
|
57
|
+
...state
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
//#endregion
|
|
63
|
+
export { createMockContext, createMockLogger, createMockRedisClient, setupLoggerMock };
|
|
64
|
+
//# sourceMappingURL=helpers.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.mjs","names":[],"sources":["../src/helpers.ts"],"sourcesContent":["import { Logger } from '@motiadev/core'\nimport type { RedisClientType } from 'redis'\nimport type { MockFlowContext, MockLogger } from './types'\n\nexport const createMockLogger = () => {\n const mockLogger: MockLogger = {\n info: jest.fn(),\n error: jest.fn(),\n warn: jest.fn(),\n debug: jest.fn(),\n log: jest.fn(),\n }\n return mockLogger as jest.Mocked<Logger>\n}\n\nexport const setupLoggerMock = () => {\n ;(Logger as jest.MockedClass<typeof Logger>).mockImplementation(createMockLogger)\n}\n\nexport const createMockRedisClient = (): RedisClientType => {\n return {\n connect: jest.fn().mockResolvedValue(undefined),\n quit: jest.fn().mockResolvedValue(undefined),\n disconnect: jest.fn().mockResolvedValue(undefined),\n isOpen: true,\n on: jest.fn(),\n get: jest.fn().mockResolvedValue(null),\n set: jest.fn().mockResolvedValue('OK'),\n del: jest.fn().mockResolvedValue(1),\n exists: jest.fn().mockResolvedValue(1),\n keys: jest.fn().mockResolvedValue([]),\n flushAll: jest.fn().mockResolvedValue('OK'),\n ping: jest.fn().mockResolvedValue('PONG'),\n xAdd: jest.fn().mockResolvedValue(''),\n xRead: jest.fn().mockResolvedValue([]),\n xReadGroup: jest.fn().mockResolvedValue([]),\n xGroupCreate: jest.fn().mockResolvedValue('OK'),\n xAck: jest.fn().mockResolvedValue(1),\n hGet: jest.fn().mockResolvedValue(null),\n hSet: jest.fn().mockResolvedValue(1),\n hGetAll: jest.fn().mockResolvedValue({}),\n hDel: jest.fn().mockResolvedValue(1),\n hExists: jest.fn().mockResolvedValue(0),\n expire: jest.fn().mockResolvedValue(1),\n ttl: jest.fn().mockResolvedValue(-1),\n publish: jest.fn().mockResolvedValue(0),\n } as unknown as RedisClientType\n}\n\nexport const createMockContext = (options?: {\n logger?: jest.Mocked<Logger>\n emit?: jest.Mock\n traceId?: string\n state?: Partial<MockFlowContext['state']>\n}): MockFlowContext => {\n const { logger = createMockLogger(), emit = jest.fn(), traceId = 'mock-trace-id', state } = options || {}\n\n return {\n logger,\n emit,\n traceId,\n state: {\n get: jest.fn(),\n set: jest.fn(),\n delete: jest.fn(),\n clear: jest.fn(),\n getGroup: jest.fn(),\n ...state,\n },\n }\n}\n"],"mappings":";;;AAIA,MAAa,yBAAyB;AAQpC,QAP+B;EAC7B,MAAM,KAAK,IAAI;EACf,OAAO,KAAK,IAAI;EAChB,MAAM,KAAK,IAAI;EACf,OAAO,KAAK,IAAI;EAChB,KAAK,KAAK,IAAI;EACf;;AAIH,MAAa,wBAAwB;AAClC,CAAC,OAA2C,mBAAmB,iBAAiB;;AAGnF,MAAa,8BAA+C;AAC1D,QAAO;EACL,SAAS,KAAK,IAAI,CAAC,kBAAkB,OAAU;EAC/C,MAAM,KAAK,IAAI,CAAC,kBAAkB,OAAU;EAC5C,YAAY,KAAK,IAAI,CAAC,kBAAkB,OAAU;EAClD,QAAQ;EACR,IAAI,KAAK,IAAI;EACb,KAAK,KAAK,IAAI,CAAC,kBAAkB,KAAK;EACtC,KAAK,KAAK,IAAI,CAAC,kBAAkB,KAAK;EACtC,KAAK,KAAK,IAAI,CAAC,kBAAkB,EAAE;EACnC,QAAQ,KAAK,IAAI,CAAC,kBAAkB,EAAE;EACtC,MAAM,KAAK,IAAI,CAAC,kBAAkB,EAAE,CAAC;EACrC,UAAU,KAAK,IAAI,CAAC,kBAAkB,KAAK;EAC3C,MAAM,KAAK,IAAI,CAAC,kBAAkB,OAAO;EACzC,MAAM,KAAK,IAAI,CAAC,kBAAkB,GAAG;EACrC,OAAO,KAAK,IAAI,CAAC,kBAAkB,EAAE,CAAC;EACtC,YAAY,KAAK,IAAI,CAAC,kBAAkB,EAAE,CAAC;EAC3C,cAAc,KAAK,IAAI,CAAC,kBAAkB,KAAK;EAC/C,MAAM,KAAK,IAAI,CAAC,kBAAkB,EAAE;EACpC,MAAM,KAAK,IAAI,CAAC,kBAAkB,KAAK;EACvC,MAAM,KAAK,IAAI,CAAC,kBAAkB,EAAE;EACpC,SAAS,KAAK,IAAI,CAAC,kBAAkB,EAAE,CAAC;EACxC,MAAM,KAAK,IAAI,CAAC,kBAAkB,EAAE;EACpC,SAAS,KAAK,IAAI,CAAC,kBAAkB,EAAE;EACvC,QAAQ,KAAK,IAAI,CAAC,kBAAkB,EAAE;EACtC,KAAK,KAAK,IAAI,CAAC,kBAAkB,GAAG;EACpC,SAAS,KAAK,IAAI,CAAC,kBAAkB,EAAE;EACxC;;AAGH,MAAa,qBAAqB,YAKX;CACrB,MAAM,EAAE,SAAS,kBAAkB,EAAE,OAAO,KAAK,IAAI,EAAE,UAAU,iBAAiB,UAAU,WAAW,EAAE;AAEzG,QAAO;EACL;EACA;EACA;EACA,OAAO;GACL,KAAK,KAAK,IAAI;GACd,KAAK,KAAK,IAAI;GACd,QAAQ,KAAK,IAAI;GACjB,OAAO,KAAK,IAAI;GAChB,UAAU,KAAK,IAAI;GACnB,GAAG;GACJ;EACF"}
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { createEventManager } from "./event-manager.mjs";
|
|
2
|
+
import { CapturedEvent, MockFlowContext, MockLogger, MotiaTester, RequestOptions, Watcher } from "./types.mjs";
|
|
3
|
+
import { createMockContext, createMockLogger, createMockRedisClient, setupLoggerMock } from "./helpers.mjs";
|
|
4
|
+
import { createMotiaTester } from "./tester.mjs";
|
|
5
|
+
export { CapturedEvent, MockFlowContext, MockLogger, MotiaTester, RequestOptions, Watcher, createEventManager, createMockContext, createMockLogger, createMockRedisClient, createMotiaTester, setupLoggerMock };
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { createEventManager } from "./event-manager.mjs";
|
|
2
|
+
import { createMockContext, createMockLogger, createMockRedisClient, setupLoggerMock } from "./helpers.mjs";
|
|
3
|
+
import { createMotiaTester } from "./tester.mjs";
|
|
4
|
+
|
|
5
|
+
export { createEventManager, createMockContext, createMockLogger, createMockRedisClient, createMotiaTester, setupLoggerMock };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tester.d.mts","names":[],"sources":["../src/tester.ts"],"sourcesContent":[],"mappings":";;;cAgBa,yBAAwB"}
|
package/dist/tester.mjs
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { createEventManager } from "./event-manager.mjs";
|
|
2
|
+
import { createMockRedisClient } from "./helpers.mjs";
|
|
3
|
+
import { DefaultCronAdapter, DefaultQueueEventAdapter, Logger, MemoryStreamAdapterManager, createServer, createStateAdapter } from "@motiadev/core";
|
|
4
|
+
import { generateLockedData } from "motia";
|
|
5
|
+
import path from "path";
|
|
6
|
+
import request from "supertest";
|
|
7
|
+
|
|
8
|
+
//#region src/tester.ts
|
|
9
|
+
const createMotiaTester = () => {
|
|
10
|
+
const eventAdapter = new DefaultQueueEventAdapter();
|
|
11
|
+
const eventManager = createEventManager(eventAdapter);
|
|
12
|
+
const logger = new Logger();
|
|
13
|
+
const promise = (async () => {
|
|
14
|
+
const lockedData = await generateLockedData({
|
|
15
|
+
projectDir: path.join(process.cwd()),
|
|
16
|
+
streamAdapter: new MemoryStreamAdapterManager(),
|
|
17
|
+
printerType: "disabled",
|
|
18
|
+
redisClient: createMockRedisClient()
|
|
19
|
+
});
|
|
20
|
+
const state = createStateAdapter({ adapter: "memory" });
|
|
21
|
+
const { server, socketServer, close } = createServer(lockedData, state, { isVerbose: false }, {
|
|
22
|
+
eventAdapter,
|
|
23
|
+
cronAdapter: new DefaultCronAdapter()
|
|
24
|
+
});
|
|
25
|
+
return {
|
|
26
|
+
server,
|
|
27
|
+
socketServer,
|
|
28
|
+
eventManager,
|
|
29
|
+
state,
|
|
30
|
+
close
|
|
31
|
+
};
|
|
32
|
+
})();
|
|
33
|
+
return {
|
|
34
|
+
logger,
|
|
35
|
+
waitEvents: async () => promise.then(({ eventManager: eventManager$1 }) => eventManager$1.waitEvents()),
|
|
36
|
+
post: async (path$1, options) => promise.then(({ server }) => request(server).post(path$1).send(options.body)),
|
|
37
|
+
get: async (path$1, options) => promise.then(({ server }) => request(server).get(path$1).send(options.body)),
|
|
38
|
+
emit: async (event) => eventManager.emit(event),
|
|
39
|
+
watch: async (event) => {
|
|
40
|
+
const events = [];
|
|
41
|
+
eventManager.subscribe(event, "$watcher", async (event$1) => {
|
|
42
|
+
const { logger: logger$1, tracer, ...rest } = event$1;
|
|
43
|
+
events.push(rest);
|
|
44
|
+
});
|
|
45
|
+
return {
|
|
46
|
+
getCapturedEvents: () => events,
|
|
47
|
+
getLastCapturedEvent: () => events[events.length - 1],
|
|
48
|
+
getCapturedEvent: (index) => events[index]
|
|
49
|
+
};
|
|
50
|
+
},
|
|
51
|
+
sleep: async (ms) => new Promise((resolve) => setTimeout(resolve, ms)),
|
|
52
|
+
close: async () => promise.then(({ close }) => close())
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
//#endregion
|
|
57
|
+
export { createMotiaTester };
|
|
58
|
+
//# sourceMappingURL=tester.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tester.mjs","names":["eventManager","path","events: CapturedEvent<TData>[]","event"],"sources":["../src/tester.ts"],"sourcesContent":["import {\n createServer,\n createStateAdapter,\n DefaultCronAdapter,\n DefaultQueueEventAdapter,\n type Event,\n Logger,\n MemoryStreamAdapterManager,\n} from '@motiadev/core'\nimport { generateLockedData } from 'motia'\nimport path from 'path'\nimport request from 'supertest'\nimport { createEventManager } from './event-manager'\nimport { createMockRedisClient } from './helpers'\nimport type { CapturedEvent, MotiaTester } from './types'\n\nexport const createMotiaTester = (): MotiaTester => {\n const eventAdapter = new DefaultQueueEventAdapter()\n const eventManager = createEventManager(eventAdapter)\n const logger = new Logger()\n\n const promise = (async () => {\n const lockedData = await generateLockedData({\n projectDir: path.join(process.cwd()),\n streamAdapter: new MemoryStreamAdapterManager(),\n printerType: 'disabled',\n redisClient: createMockRedisClient(),\n })\n const state = createStateAdapter({ adapter: 'memory' })\n const { server, socketServer, close } = createServer(\n lockedData,\n state,\n { isVerbose: false },\n { eventAdapter, cronAdapter: new DefaultCronAdapter() },\n )\n\n return { server, socketServer, eventManager, state, close }\n })()\n\n return {\n logger,\n waitEvents: async () => promise.then(({ eventManager }) => eventManager.waitEvents()),\n post: async (path, options) => promise.then(({ server }) => request(server).post(path).send(options.body)),\n get: async (path, options) => promise.then(({ server }) => request(server).get(path).send(options.body)),\n emit: async (event) => eventManager.emit(event),\n watch: async <TData>(event: string) => {\n const events: CapturedEvent<TData>[] = []\n\n eventManager.subscribe(event, '$watcher', async (event: Event<TData>) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { logger, tracer, ...rest } = event\n events.push(rest)\n })\n\n return {\n getCapturedEvents: () => events,\n getLastCapturedEvent: () => events[events.length - 1],\n getCapturedEvent: (index) => events[index],\n }\n },\n sleep: async (ms) => new Promise((resolve) => setTimeout(resolve, ms)),\n close: async () => promise.then(({ close }) => close()),\n }\n}\n"],"mappings":";;;;;;;;AAgBA,MAAa,0BAAuC;CAClD,MAAM,eAAe,IAAI,0BAA0B;CACnD,MAAM,eAAe,mBAAmB,aAAa;CACrD,MAAM,SAAS,IAAI,QAAQ;CAE3B,MAAM,WAAW,YAAY;EAC3B,MAAM,aAAa,MAAM,mBAAmB;GAC1C,YAAY,KAAK,KAAK,QAAQ,KAAK,CAAC;GACpC,eAAe,IAAI,4BAA4B;GAC/C,aAAa;GACb,aAAa,uBAAuB;GACrC,CAAC;EACF,MAAM,QAAQ,mBAAmB,EAAE,SAAS,UAAU,CAAC;EACvD,MAAM,EAAE,QAAQ,cAAc,UAAU,aACtC,YACA,OACA,EAAE,WAAW,OAAO,EACpB;GAAE;GAAc,aAAa,IAAI,oBAAoB;GAAE,CACxD;AAED,SAAO;GAAE;GAAQ;GAAc;GAAc;GAAO;GAAO;KACzD;AAEJ,QAAO;EACL;EACA,YAAY,YAAY,QAAQ,MAAM,EAAE,mCAAmBA,eAAa,YAAY,CAAC;EACrF,MAAM,OAAO,QAAM,YAAY,QAAQ,MAAM,EAAE,aAAa,QAAQ,OAAO,CAAC,KAAKC,OAAK,CAAC,KAAK,QAAQ,KAAK,CAAC;EAC1G,KAAK,OAAO,QAAM,YAAY,QAAQ,MAAM,EAAE,aAAa,QAAQ,OAAO,CAAC,IAAIA,OAAK,CAAC,KAAK,QAAQ,KAAK,CAAC;EACxG,MAAM,OAAO,UAAU,aAAa,KAAK,MAAM;EAC/C,OAAO,OAAc,UAAkB;GACrC,MAAMC,SAAiC,EAAE;AAEzC,gBAAa,UAAU,OAAO,YAAY,OAAO,YAAwB;IAEvE,MAAM,EAAE,kBAAQ,QAAQ,GAAG,SAASC;AACpC,WAAO,KAAK,KAAK;KACjB;AAEF,UAAO;IACL,yBAAyB;IACzB,4BAA4B,OAAO,OAAO,SAAS;IACnD,mBAAmB,UAAU,OAAO;IACrC;;EAEH,OAAO,OAAO,OAAO,IAAI,SAAS,YAAY,WAAW,SAAS,GAAG,CAAC;EACtE,OAAO,YAAY,QAAQ,MAAM,EAAE,YAAY,OAAO,CAAC;EACxD"}
|
package/dist/types.d.mts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Event, FlowContext, InternalStateManager, Logger } from "@motiadev/core";
|
|
2
|
+
import { Response } from "supertest";
|
|
3
|
+
|
|
4
|
+
//#region src/types.d.ts
|
|
5
|
+
type Watcher<TData = unknown> = {
|
|
6
|
+
getCapturedEvents(): CapturedEvent<TData>[];
|
|
7
|
+
getLastCapturedEvent(): CapturedEvent<TData> | undefined;
|
|
8
|
+
getCapturedEvent(index: number): CapturedEvent<TData> | undefined;
|
|
9
|
+
};
|
|
10
|
+
interface MotiaTester {
|
|
11
|
+
post(path: string, options: RequestOptions): Promise<Response>;
|
|
12
|
+
get(path: string, options: RequestOptions): Promise<Response>;
|
|
13
|
+
emit(event: Event): Promise<void>;
|
|
14
|
+
watch<TData>(event: string): Promise<Watcher<TData>>;
|
|
15
|
+
sleep(ms: number): Promise<void>;
|
|
16
|
+
close(): Promise<void>;
|
|
17
|
+
waitEvents(): Promise<void>;
|
|
18
|
+
logger: Logger;
|
|
19
|
+
}
|
|
20
|
+
type RequestOptions = {
|
|
21
|
+
body?: Record<string, unknown>;
|
|
22
|
+
headers?: Record<string, string>;
|
|
23
|
+
cookies?: Record<string, string>;
|
|
24
|
+
};
|
|
25
|
+
type CapturedEvent<TData = unknown> = Omit<Event<TData>, 'logger' | 'tracer'>;
|
|
26
|
+
type MockFlowContext = {
|
|
27
|
+
logger: jest.Mocked<Logger>;
|
|
28
|
+
emit: jest.Mock | FlowContext<unknown>['emit'];
|
|
29
|
+
traceId: string;
|
|
30
|
+
state: jest.Mocked<InternalStateManager>;
|
|
31
|
+
};
|
|
32
|
+
interface MockLogger {
|
|
33
|
+
info: (message: string) => void;
|
|
34
|
+
debug: (message: string) => void;
|
|
35
|
+
warn: (message: string) => void;
|
|
36
|
+
error: (message: string) => void;
|
|
37
|
+
log: (message: string) => void;
|
|
38
|
+
}
|
|
39
|
+
//#endregion
|
|
40
|
+
export { CapturedEvent, MockFlowContext, MockLogger, MotiaTester, RequestOptions, Watcher };
|
|
41
|
+
//# sourceMappingURL=types.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.mts","names":[],"sources":["../src/types.ts"],"sourcesContent":[],"mappings":";;;;KAGY;uBACW,cAAc;EADzB,oBAAO,EAAA,EAEO,aAFP,CAEqB,KAFrB,CAAA,GAAA,SAAA;EACkB,gBAAA,CAAA,KAAA,EAAA,MAAA,CAAA,EAEF,aAFE,CAEY,KAFZ,CAAA,GAAA,SAAA;CAAd;AACiB,UAIvB,WAAA,CAJuB;EAAd,IAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAKI,cALJ,CAAA,EAKqB,OALrB,CAK6B,QAL7B,CAAA;EACuB,GAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAKpB,cALoB,CAAA,EAKH,OALG,CAKK,QALL,CAAA;EAAd,IAAA,CAAA,KAAA,EAMrB,KANqB,CAAA,EAMb,OANa,CAAA,IAAA,CAAA;EAAa,KAAA,CAAA,KAAA,CAAA,CAAA,KAAA,EAAA,MAAA,CAAA,EAOjB,OAPiB,CAOT,OAPS,CAOD,KAPC,CAAA,CAAA;EAG/B,KAAA,CAAA,EAAA,EAAA,MAAW,CAAA,EAKP,OALO,CAAA,IAAA,CAAA;EACE,KAAA,EAAA,EAKnB,OALmB,CAAA,IAAA,CAAA;EAAyB,UAAA,EAAA,EAMvC,OANuC,CAAA,IAAA,CAAA;EAAR,MAAA,EAOrC,MAPqC;;AACO,KAS1C,cAAA,GAT0C;EAAR,IAAA,CAAA,EAUrC,MAVqC,CAAA,MAAA,EAAA,OAAA,CAAA;EAChC,OAAA,CAAA,EAUF,MAVE,CAAA,MAAA,EAAA,MAAA,CAAA;EAAQ,OAAA,CAAA,EAWV,MAXU,CAAA,MAAA,EAAA,MAAA,CAAA;CACyB;AAAR,KAa3B,aAb2B,CAAA,QAAA,OAAA,CAAA,GAaM,IAbN,CAaW,KAbX,CAaiB,KAbjB,CAAA,EAAA,QAAA,GAAA,QAAA,CAAA;AAAR,KAenB,eAAA,GAfmB;EACV,MAAA,EAeX,IAAA,CAAK,MAfM,CAeC,MAfD,CAAA;EACV,IAAA,EAeH,IAAA,CAAK,IAfF,GAeS,WAfT,CAAA,OAAA,CAAA,CAAA,MAAA,CAAA;EACK,OAAA,EAAA,MAAA;EACN,KAAA,EAeD,IAAA,CAAK,MAfJ,CAeW,oBAfX,CAAA;CAAM;AAGJ,UAeK,UAAA,CAfS;EACjB,IAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,GAAA,IAAA;EACG,KAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,GAAA,IAAA;EACA,IAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,GAAA,IAAA;EAAM,KAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,GAAA,IAAA;EAGN,GAAA,EAAA,CAAA,OAAA,EAAA,MAAa,EAAA,GAAA,IAAA"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@motiadev/test",
|
|
3
3
|
"description": "A testing utility package for Motia workflows that provides tools for mocking, testing, and simulating Motia components.",
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
"
|
|
4
|
+
"type": "module",
|
|
5
|
+
"version": "0.13.2-beta.164-562802",
|
|
6
|
+
"main": "dist/index.mjs",
|
|
7
|
+
"module": "dist/index.mjs",
|
|
8
|
+
"types": "dist/index.d.mts",
|
|
7
9
|
"peerDependencies": {
|
|
8
|
-
"@motiadev/core": "0.13.2-beta.
|
|
9
|
-
"motia": "0.13.2-beta.
|
|
10
|
+
"@motiadev/core": "0.13.2-beta.164-562802",
|
|
11
|
+
"motia": "0.13.2-beta.164-562802"
|
|
10
12
|
},
|
|
11
13
|
"dependencies": {
|
|
12
14
|
"jest": "^29.7.0",
|
|
@@ -18,10 +20,13 @@
|
|
|
18
20
|
"@types/supertest": "^6.0.2",
|
|
19
21
|
"jest": "^29.7.0",
|
|
20
22
|
"ts-jest": "^29.2.5",
|
|
23
|
+
"tsdown": "^0.16.6",
|
|
21
24
|
"typescript": "^5.7.2"
|
|
22
25
|
},
|
|
23
26
|
"scripts": {
|
|
24
|
-
"build": "
|
|
25
|
-
"
|
|
27
|
+
"build": "tsdown",
|
|
28
|
+
"dev": "tsdown --watch",
|
|
29
|
+
"lint": "eslint --config ../../eslint.config.js",
|
|
30
|
+
"clean": "rm -rf dist"
|
|
26
31
|
}
|
|
27
32
|
}
|
package/tsdown.config.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { defineConfig } from 'tsdown'
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
entry: {
|
|
5
|
+
index: './src/index.ts',
|
|
6
|
+
},
|
|
7
|
+
format: 'esm',
|
|
8
|
+
platform: 'node',
|
|
9
|
+
external: ['@motiadev/core', 'motia', 'jest', 'redis', 'supertest'],
|
|
10
|
+
dts: {
|
|
11
|
+
build: true,
|
|
12
|
+
},
|
|
13
|
+
clean: true,
|
|
14
|
+
outDir: 'dist',
|
|
15
|
+
sourcemap: true,
|
|
16
|
+
unbundle: true,
|
|
17
|
+
})
|
package/dist/index.d.ts
DELETED
package/dist/index.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./src/event-manager"), exports);
|
|
18
|
-
__exportStar(require("./src/helpers"), exports);
|
|
19
|
-
__exportStar(require("./src/tester"), exports);
|
|
20
|
-
__exportStar(require("./src/types"), exports);
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { Event, EventAdapter } from '@motiadev/core';
|
|
2
|
-
interface TestEventManager {
|
|
3
|
-
emit: <TData>(event: Event<TData>, file?: string) => Promise<void>;
|
|
4
|
-
waitEvents(): Promise<void>;
|
|
5
|
-
subscribe: <TData>(topic: string, stepName: string, handler: (event: Event<TData>) => void | Promise<void>) => void;
|
|
6
|
-
}
|
|
7
|
-
export declare const createEventManager: (eventAdapter: EventAdapter) => TestEventManager;
|
|
8
|
-
export {};
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createEventManager = void 0;
|
|
4
|
-
const core_1 = require("@motiadev/core");
|
|
5
|
-
const createEventManager = (eventAdapter) => {
|
|
6
|
-
const waitEvents = async () => {
|
|
7
|
-
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
8
|
-
if (eventAdapter instanceof core_1.DefaultQueueEventAdapter) {
|
|
9
|
-
let hasWork = true;
|
|
10
|
-
while (hasWork) {
|
|
11
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
12
|
-
const metrics = eventAdapter.getAllMetrics();
|
|
13
|
-
hasWork = Object.values(metrics).some((m) => m.queueDepth > 0 || m.processingCount > 0);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
17
|
-
};
|
|
18
|
-
const subscribe = (topic, stepName, handler) => {
|
|
19
|
-
eventAdapter.subscribe(topic, stepName, handler);
|
|
20
|
-
};
|
|
21
|
-
return {
|
|
22
|
-
emit: eventAdapter.emit,
|
|
23
|
-
waitEvents,
|
|
24
|
-
subscribe,
|
|
25
|
-
};
|
|
26
|
-
};
|
|
27
|
-
exports.createEventManager = createEventManager;
|
package/dist/src/helpers.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { Logger } from '@motiadev/core';
|
|
2
|
-
import type { RedisClientType } from 'redis';
|
|
3
|
-
import type { MockFlowContext } from './types';
|
|
4
|
-
export declare const createMockLogger: () => jest.Mocked<Logger>;
|
|
5
|
-
export declare const setupLoggerMock: () => void;
|
|
6
|
-
export declare const createMockRedisClient: () => RedisClientType;
|
|
7
|
-
export declare const createMockContext: (options?: {
|
|
8
|
-
logger?: jest.Mocked<Logger>;
|
|
9
|
-
emit?: jest.Mock;
|
|
10
|
-
traceId?: string;
|
|
11
|
-
state?: Partial<MockFlowContext["state"]>;
|
|
12
|
-
}) => MockFlowContext;
|
package/dist/src/helpers.js
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createMockContext = exports.createMockRedisClient = exports.setupLoggerMock = exports.createMockLogger = void 0;
|
|
4
|
-
const core_1 = require("@motiadev/core");
|
|
5
|
-
const createMockLogger = () => {
|
|
6
|
-
const mockLogger = {
|
|
7
|
-
info: jest.fn(),
|
|
8
|
-
error: jest.fn(),
|
|
9
|
-
warn: jest.fn(),
|
|
10
|
-
debug: jest.fn(),
|
|
11
|
-
log: jest.fn(),
|
|
12
|
-
};
|
|
13
|
-
return mockLogger;
|
|
14
|
-
};
|
|
15
|
-
exports.createMockLogger = createMockLogger;
|
|
16
|
-
const setupLoggerMock = () => {
|
|
17
|
-
;
|
|
18
|
-
core_1.Logger.mockImplementation(exports.createMockLogger);
|
|
19
|
-
};
|
|
20
|
-
exports.setupLoggerMock = setupLoggerMock;
|
|
21
|
-
const createMockRedisClient = () => {
|
|
22
|
-
return {
|
|
23
|
-
connect: jest.fn().mockResolvedValue(undefined),
|
|
24
|
-
quit: jest.fn().mockResolvedValue(undefined),
|
|
25
|
-
disconnect: jest.fn().mockResolvedValue(undefined),
|
|
26
|
-
isOpen: true,
|
|
27
|
-
on: jest.fn(),
|
|
28
|
-
get: jest.fn().mockResolvedValue(null),
|
|
29
|
-
set: jest.fn().mockResolvedValue('OK'),
|
|
30
|
-
del: jest.fn().mockResolvedValue(1),
|
|
31
|
-
exists: jest.fn().mockResolvedValue(1),
|
|
32
|
-
keys: jest.fn().mockResolvedValue([]),
|
|
33
|
-
flushAll: jest.fn().mockResolvedValue('OK'),
|
|
34
|
-
ping: jest.fn().mockResolvedValue('PONG'),
|
|
35
|
-
xAdd: jest.fn().mockResolvedValue(''),
|
|
36
|
-
xRead: jest.fn().mockResolvedValue([]),
|
|
37
|
-
xReadGroup: jest.fn().mockResolvedValue([]),
|
|
38
|
-
xGroupCreate: jest.fn().mockResolvedValue('OK'),
|
|
39
|
-
xAck: jest.fn().mockResolvedValue(1),
|
|
40
|
-
hGet: jest.fn().mockResolvedValue(null),
|
|
41
|
-
hSet: jest.fn().mockResolvedValue(1),
|
|
42
|
-
hGetAll: jest.fn().mockResolvedValue({}),
|
|
43
|
-
hDel: jest.fn().mockResolvedValue(1),
|
|
44
|
-
hExists: jest.fn().mockResolvedValue(0),
|
|
45
|
-
expire: jest.fn().mockResolvedValue(1),
|
|
46
|
-
ttl: jest.fn().mockResolvedValue(-1),
|
|
47
|
-
publish: jest.fn().mockResolvedValue(0),
|
|
48
|
-
};
|
|
49
|
-
};
|
|
50
|
-
exports.createMockRedisClient = createMockRedisClient;
|
|
51
|
-
const createMockContext = (options) => {
|
|
52
|
-
const { logger = (0, exports.createMockLogger)(), emit = jest.fn(), traceId = 'mock-trace-id', state } = options || {};
|
|
53
|
-
return {
|
|
54
|
-
logger,
|
|
55
|
-
emit,
|
|
56
|
-
traceId,
|
|
57
|
-
state: {
|
|
58
|
-
get: jest.fn(),
|
|
59
|
-
set: jest.fn(),
|
|
60
|
-
delete: jest.fn(),
|
|
61
|
-
clear: jest.fn(),
|
|
62
|
-
getGroup: jest.fn(),
|
|
63
|
-
...state,
|
|
64
|
-
},
|
|
65
|
-
};
|
|
66
|
-
};
|
|
67
|
-
exports.createMockContext = createMockContext;
|
package/dist/src/tester.d.ts
DELETED
package/dist/src/tester.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.createMotiaTester = void 0;
|
|
7
|
-
const core_1 = require("@motiadev/core");
|
|
8
|
-
const motia_1 = require("motia");
|
|
9
|
-
const path_1 = __importDefault(require("path"));
|
|
10
|
-
const supertest_1 = __importDefault(require("supertest"));
|
|
11
|
-
const event_manager_1 = require("./event-manager");
|
|
12
|
-
const helpers_1 = require("./helpers");
|
|
13
|
-
const createMotiaTester = () => {
|
|
14
|
-
const eventAdapter = new core_1.DefaultQueueEventAdapter();
|
|
15
|
-
const eventManager = (0, event_manager_1.createEventManager)(eventAdapter);
|
|
16
|
-
const logger = new core_1.Logger();
|
|
17
|
-
const promise = (async () => {
|
|
18
|
-
const lockedData = await (0, motia_1.generateLockedData)({
|
|
19
|
-
projectDir: path_1.default.join(process.cwd()),
|
|
20
|
-
streamAdapter: new core_1.MemoryStreamAdapterManager(),
|
|
21
|
-
printerType: 'disabled',
|
|
22
|
-
redisClient: (0, helpers_1.createMockRedisClient)(),
|
|
23
|
-
});
|
|
24
|
-
const state = (0, core_1.createStateAdapter)({ adapter: 'memory' });
|
|
25
|
-
const { server, socketServer, close } = (0, core_1.createServer)(lockedData, state, { isVerbose: false }, { eventAdapter, cronAdapter: new core_1.DefaultCronAdapter() });
|
|
26
|
-
return { server, socketServer, eventManager, state, close };
|
|
27
|
-
})();
|
|
28
|
-
return {
|
|
29
|
-
logger,
|
|
30
|
-
waitEvents: async () => promise.then(({ eventManager }) => eventManager.waitEvents()),
|
|
31
|
-
post: async (path, options) => promise.then(({ server }) => (0, supertest_1.default)(server).post(path).send(options.body)),
|
|
32
|
-
get: async (path, options) => promise.then(({ server }) => (0, supertest_1.default)(server).get(path).send(options.body)),
|
|
33
|
-
emit: async (event) => eventManager.emit(event),
|
|
34
|
-
watch: async (event) => {
|
|
35
|
-
const events = [];
|
|
36
|
-
eventManager.subscribe(event, '$watcher', async (event) => {
|
|
37
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
38
|
-
const { logger, tracer, ...rest } = event;
|
|
39
|
-
events.push(rest);
|
|
40
|
-
});
|
|
41
|
-
return {
|
|
42
|
-
getCapturedEvents: () => events,
|
|
43
|
-
getLastCapturedEvent: () => events[events.length - 1],
|
|
44
|
-
getCapturedEvent: (index) => events[index],
|
|
45
|
-
};
|
|
46
|
-
},
|
|
47
|
-
sleep: async (ms) => new Promise((resolve) => setTimeout(resolve, ms)),
|
|
48
|
-
close: async () => promise.then(({ close }) => close()),
|
|
49
|
-
};
|
|
50
|
-
};
|
|
51
|
-
exports.createMotiaTester = createMotiaTester;
|
package/dist/src/types.d.ts
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import type { Event, FlowContext, InternalStateManager, Logger } from '@motiadev/core';
|
|
2
|
-
import type { Response } from 'supertest';
|
|
3
|
-
export type Watcher<TData = unknown> = {
|
|
4
|
-
getCapturedEvents(): CapturedEvent<TData>[];
|
|
5
|
-
getLastCapturedEvent(): CapturedEvent<TData> | undefined;
|
|
6
|
-
getCapturedEvent(index: number): CapturedEvent<TData> | undefined;
|
|
7
|
-
};
|
|
8
|
-
export interface MotiaTester {
|
|
9
|
-
post(path: string, options: RequestOptions): Promise<Response>;
|
|
10
|
-
get(path: string, options: RequestOptions): Promise<Response>;
|
|
11
|
-
emit(event: Event): Promise<void>;
|
|
12
|
-
watch<TData>(event: string): Promise<Watcher<TData>>;
|
|
13
|
-
sleep(ms: number): Promise<void>;
|
|
14
|
-
close(): Promise<void>;
|
|
15
|
-
waitEvents(): Promise<void>;
|
|
16
|
-
logger: Logger;
|
|
17
|
-
}
|
|
18
|
-
export type RequestOptions = {
|
|
19
|
-
body?: Record<string, unknown>;
|
|
20
|
-
headers?: Record<string, string>;
|
|
21
|
-
cookies?: Record<string, string>;
|
|
22
|
-
};
|
|
23
|
-
export type CapturedEvent<TData = unknown> = Omit<Event<TData>, 'logger' | 'tracer'>;
|
|
24
|
-
export type MockFlowContext = {
|
|
25
|
-
logger: jest.Mocked<Logger>;
|
|
26
|
-
emit: jest.Mock | FlowContext<unknown>['emit'];
|
|
27
|
-
traceId: string;
|
|
28
|
-
state: jest.Mocked<InternalStateManager>;
|
|
29
|
-
};
|
|
30
|
-
export interface MockLogger {
|
|
31
|
-
info: (message: string) => void;
|
|
32
|
-
debug: (message: string) => void;
|
|
33
|
-
warn: (message: string) => void;
|
|
34
|
-
error: (message: string) => void;
|
|
35
|
-
log: (message: string) => void;
|
|
36
|
-
}
|
package/dist/src/types.js
DELETED