Skip to content

Commit 8448c66

Browse files
committed
feat: Added unit test for default component
1 parent 724ae07 commit 8448c66

File tree

3 files changed

+84
-2
lines changed

3 files changed

+84
-2
lines changed

package-lock.json

Lines changed: 20 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
"eslint-config-oclif": "^5",
4747
"eslint-config-oclif-typescript": "^3.1.13",
4848
"eslint-config-prettier": "^9.0.0",
49+
"ink-testing-library": "^4.0.0",
4950
"memfs": "^4.14.0",
5051
"mocha": "^10",
5152
"oclif": "^4.15.29",
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import { cleanup, render } from 'ink-testing-library';
2+
import { EventEmitter } from 'node:events';
3+
import React from 'react';
4+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
5+
6+
import { RenderStatus, store } from '../store/index.js';
7+
import { DefaultComponent } from './default-component.js';
8+
9+
// Mock dependent components
10+
vi.mock('./progress/progress-display', () => ({
11+
ProgressDisplay: () => <div>Mock Progress Display</div>
12+
}));
13+
vi.mock('./import/index', () => ({
14+
ImportParametersForm: () => <div>Mock Import Parameters Form</div>
15+
}));
16+
vi.mock('./plan/plan', () => ({
17+
PlanComponent: () => <div>Mock Plan Component</div>
18+
}));
19+
vi.mock('./import/import-result', () => ({
20+
ImportResultComponent: () => <div>Mock Import Result Component</div>
21+
}));
22+
23+
describe('DefaultComponent', () => {
24+
let emitter: EventEmitter;
25+
26+
beforeEach(() => {
27+
emitter = new EventEmitter();
28+
vi.resetAllMocks();
29+
});
30+
31+
afterEach(() => {
32+
cleanup();
33+
emitter.removeAllListeners();
34+
});
35+
36+
it('renders progress display when renderStatus is PROGRESS', () => {
37+
store.set(store.renderState, { status: RenderStatus.PROGRESS });
38+
const { lastFrame } = render(<DefaultComponent emitter={emitter} />);
39+
40+
expect(lastFrame()).toContain('Mock Progress Display');
41+
});
42+
43+
it('renders the plan when renderStatus is DISPLAY_PLAN', () => {
44+
store.set(store.renderState, { status: RenderStatus.DISPLAY_PLAN, data: {} });
45+
const { lastFrame } = render(<DefaultComponent emitter={emitter} />);
46+
47+
expect(lastFrame()).toContain('Mock Plan Component');
48+
});
49+
50+
it('handles SUDO_PROMPT event and submits password', () => {
51+
store.set(store.renderState, { status: RenderStatus.SUDO_PROMPT, data: 'message' });
52+
const { lastFrame } = render(<DefaultComponent emitter={emitter} />);
53+
54+
expect(lastFrame()).toContain('Password:');
55+
});
56+
57+
it('renders import parameter form when renderStatus is IMPORT_PROMPT', () => {
58+
store.set(store.renderState, { status: RenderStatus.IMPORT_PROMPT, data: new Map() });
59+
const { lastFrame } = render(<DefaultComponent emitter={emitter} />);
60+
61+
expect(lastFrame()).toContain('Mock Import Parameters Form');
62+
});
63+
});

0 commit comments

Comments
 (0)