-
Notifications
You must be signed in to change notification settings - Fork 22
Expand file tree
/
Copy pathdeveloper.command.test.ts
More file actions
119 lines (95 loc) · 4.18 KB
/
Copy pathdeveloper.command.test.ts
File metadata and controls
119 lines (95 loc) · 4.18 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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import { Test, TestingModule } from '@nestjs/testing';
import { InquirerService } from 'nest-commander';
import { beforeEach, describe, expect, it, vi } from 'vitest';
import { DeveloperToolsService } from '@app/unraid-api/cli/developer/developer-tools.service.js';
import { DeveloperCommand } from '@app/unraid-api/cli/developer/developer.command.js';
import { LogService } from '@app/unraid-api/cli/log.service.js';
describe('DeveloperCommand', () => {
let module: TestingModule;
let command: DeveloperCommand;
let developerToolsService: DeveloperToolsService;
let logService: LogService;
let inquirerService: InquirerService;
beforeEach(async () => {
module = await Test.createTestingModule({
providers: [
DeveloperCommand,
{
provide: DeveloperToolsService,
useValue: {
setSandboxMode: vi.fn(),
enableModalTest: vi.fn(),
disableModalTest: vi.fn(),
getModalTestStatus: vi.fn().mockResolvedValue({ enabled: false }),
getModalTestingGuide: vi.fn().mockReturnValue(['test guide']),
},
},
{
provide: LogService,
useValue: {
info: vi.fn(),
error: vi.fn(),
warn: vi.fn(),
},
},
{
provide: InquirerService,
useValue: {
prompt: vi.fn(),
},
},
],
}).compile();
command = module.get<DeveloperCommand>(DeveloperCommand);
developerToolsService = module.get<DeveloperToolsService>(DeveloperToolsService);
logService = module.get<LogService>(LogService);
inquirerService = module.get<InquirerService>(InquirerService);
});
it('should handle sandbox option directly', async () => {
await command.run([], { sandbox: true });
expect(developerToolsService.setSandboxMode).toHaveBeenCalledWith(true);
});
it('should handle enable-modal option directly', async () => {
await command.run([], { 'enable-modal': true });
expect(developerToolsService.enableModalTest).toHaveBeenCalled();
expect(logService.info).toHaveBeenCalledWith('test guide');
});
it('should handle disable-modal option directly', async () => {
await command.run([], { 'disable-modal': true });
expect(developerToolsService.disableModalTest).toHaveBeenCalled();
});
it('should show modal test status', async () => {
vi.mocked(inquirerService.prompt).mockResolvedValue({
tool: 'modal-test',
modalAction: 'status',
});
await command.run([], {});
expect(developerToolsService.getModalTestStatus).toHaveBeenCalled();
expect(logService.info).toHaveBeenCalledWith('Modal Test Tool Status');
});
it('should handle sandbox selection in interactive mode', async () => {
vi.mocked(inquirerService.prompt).mockResolvedValue({
tool: 'sandbox',
sandboxEnabled: true,
});
await command.run([], {});
expect(developerToolsService.setSandboxMode).toHaveBeenCalledWith(true);
});
it('should handle modal test enable in interactive mode', async () => {
vi.mocked(inquirerService.prompt).mockResolvedValue({
tool: 'modal-test',
modalAction: 'enable',
});
await command.run([], {});
expect(developerToolsService.enableModalTest).toHaveBeenCalled();
});
it('should handle errors gracefully', async () => {
const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => {
throw new Error('process.exit called');
});
vi.mocked(developerToolsService.setSandboxMode).mockRejectedValue(new Error('Test error'));
await expect(command.run([], { sandbox: true })).rejects.toThrow('process.exit called');
expect(mockExit).toHaveBeenCalledWith(1);
mockExit.mockRestore();
});
});