-
Notifications
You must be signed in to change notification settings - Fork 34
Expand file tree
/
Copy pathcli.test.ts
More file actions
62 lines (48 loc) · 1.75 KB
/
cli.test.ts
File metadata and controls
62 lines (48 loc) · 1.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import * as rockTools from '@rock-js/tools';
import { expect, Mock, test, vi } from 'vitest';
import { actionRunner } from '../cli.js';
vi.mock('@rock-js/tools', async (importOriginal) => {
const actual = await importOriginal<typeof rockTools>();
return {
...actual,
logger: {
...actual.logger,
error: vi.fn(),
warn: vi.fn(),
info: vi.fn(),
success: vi.fn(),
},
};
});
// @ts-expect-error - override typings
const processExitMock = vi.spyOn(process, 'exit').mockImplementation(() => {
// no-op
});
const mockLoggerError = rockTools.logger.error as Mock;
const FAILING_ACTION_ERROR_MESSAGE = 'Test error';
const createWrappedFailingAction = (ErrorCls: new (message: string) => Error) =>
actionRunner(async (_a: number, _b: number) => {
throw new ErrorCls(FAILING_ACTION_ERROR_MESSAGE);
});
test('actionRunner should call the wrapped function', async () => {
const mockAction = vi.fn(async () => Promise.resolve());
const wrappedAction = actionRunner(mockAction);
await wrappedAction();
expect(mockAction).toHaveBeenCalledOnce();
});
test('actionRunner should gracefully handle Errors', async () => {
const wrappedActionExpectation = expect(
createWrappedFailingAction(Error)(1, 2)
);
await wrappedActionExpectation.resolves.not.toThrowError();
expect(processExitMock).toHaveBeenCalledExactlyOnceWith(1);
expect(mockLoggerError).toHaveBeenCalled();
});
test('actionRunner should gracefully handle RockErrors', async () => {
const wrappedActionExpectation = expect(
createWrappedFailingAction(rockTools.RockError)(1, 2)
);
await wrappedActionExpectation.resolves.not.toThrowError();
expect(processExitMock).toHaveBeenCalledExactlyOnceWith(1);
expect(mockLoggerError).toHaveBeenCalled();
});