@brookmind/ai-toolkit 1.2.0 → 1.2.1

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.
Files changed (46) hide show
  1. package/dist/__tests__/constants.test.d.ts +2 -0
  2. package/dist/__tests__/constants.test.d.ts.map +1 -0
  3. package/dist/__tests__/constants.test.js +102 -0
  4. package/dist/__tests__/constants.test.js.map +1 -0
  5. package/dist/__tests__/index.test.js +2 -102
  6. package/dist/__tests__/index.test.js.map +1 -1
  7. package/dist/__tests__/integration/installer.test.d.ts +2 -0
  8. package/dist/__tests__/integration/installer.test.d.ts.map +1 -0
  9. package/dist/__tests__/integration/installer.test.js +425 -0
  10. package/dist/__tests__/integration/installer.test.js.map +1 -0
  11. package/dist/__tests__/services/installers.test.d.ts +2 -0
  12. package/dist/__tests__/services/installers.test.d.ts.map +1 -0
  13. package/dist/__tests__/services/installers.test.js +222 -0
  14. package/dist/__tests__/services/installers.test.js.map +1 -0
  15. package/dist/__tests__/services/opencode.test.d.ts +2 -0
  16. package/dist/__tests__/services/opencode.test.d.ts.map +1 -0
  17. package/dist/__tests__/services/opencode.test.js +120 -0
  18. package/dist/__tests__/services/opencode.test.js.map +1 -0
  19. package/dist/__tests__/ui/categorize.test.d.ts +2 -0
  20. package/dist/__tests__/ui/categorize.test.d.ts.map +1 -0
  21. package/dist/__tests__/ui/categorize.test.js +194 -0
  22. package/dist/__tests__/ui/categorize.test.js.map +1 -0
  23. package/dist/__tests__/ui/choices.test.d.ts +2 -0
  24. package/dist/__tests__/ui/choices.test.d.ts.map +1 -0
  25. package/dist/__tests__/ui/choices.test.js +180 -0
  26. package/dist/__tests__/ui/choices.test.js.map +1 -0
  27. package/dist/__tests__/ui/display.test.d.ts +2 -0
  28. package/dist/__tests__/ui/display.test.d.ts.map +1 -0
  29. package/dist/__tests__/ui/display.test.js +142 -0
  30. package/dist/__tests__/ui/display.test.js.map +1 -0
  31. package/dist/__tests__/utils/fs.test.d.ts +2 -0
  32. package/dist/__tests__/utils/fs.test.d.ts.map +1 -0
  33. package/dist/__tests__/utils/fs.test.js +142 -0
  34. package/dist/__tests__/utils/fs.test.js.map +1 -0
  35. package/dist/__tests__/utils/terminal.test.d.ts +2 -0
  36. package/dist/__tests__/utils/terminal.test.d.ts.map +1 -0
  37. package/dist/__tests__/utils/terminal.test.js +97 -0
  38. package/dist/__tests__/utils/terminal.test.js.map +1 -0
  39. package/dist/constants.d.ts +1 -0
  40. package/dist/constants.d.ts.map +1 -1
  41. package/dist/constants.js +1 -0
  42. package/dist/constants.js.map +1 -1
  43. package/dist/ui/display.d.ts.map +1 -1
  44. package/dist/ui/display.js +3 -1
  45. package/dist/ui/display.js.map +1 -1
  46. package/package.json +3 -1
@@ -0,0 +1,425 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
+ vi.mock('@inquirer/prompts', () => ({
3
+ confirm: vi.fn(),
4
+ }));
5
+ vi.mock('inquirer-select-pro', () => ({
6
+ select: vi.fn(),
7
+ }));
8
+ vi.mock('ora', () => ({
9
+ default: vi.fn(() => ({
10
+ start: vi.fn().mockReturnThis(),
11
+ succeed: vi.fn().mockReturnThis(),
12
+ fail: vi.fn().mockReturnThis(),
13
+ })),
14
+ }));
15
+ vi.mock('../../services/opencode.js', () => ({
16
+ isOpenCodeInstalled: vi.fn(),
17
+ installOpenCode: vi.fn(),
18
+ }));
19
+ vi.mock('../../services/installers.js', () => ({
20
+ installAgents: vi.fn(),
21
+ installSkills: vi.fn(),
22
+ installCommands: vi.fn(),
23
+ installMcps: vi.fn(),
24
+ installTheme: vi.fn(),
25
+ isThemeInstalled: vi.fn(),
26
+ getInstalledMcps: vi.fn(),
27
+ }));
28
+ vi.mock('../../utils/fs.js', () => ({
29
+ getDirectories: vi.fn(),
30
+ getFiles: vi.fn(),
31
+ exists: vi.fn(),
32
+ readJsonConfig: vi.fn(),
33
+ }));
34
+ vi.mock('../../utils/terminal.js', () => ({
35
+ setupScrollRegion: vi.fn(),
36
+ resetScrollRegion: vi.fn(),
37
+ handleResize: vi.fn(),
38
+ clearScreen: vi.fn(),
39
+ }));
40
+ vi.mock('../../ui/display.js', () => ({
41
+ displayHeader: vi.fn(),
42
+ displaySummary: vi.fn(),
43
+ getSeparator: vi.fn(() => '---'),
44
+ showSelectionResult: vi.fn(),
45
+ }));
46
+ vi.mock('../../ui/choices.js', () => ({
47
+ buildAgentChoices: vi.fn(),
48
+ buildSkillChoices: vi.fn(),
49
+ buildCommandChoices: vi.fn(),
50
+ buildMcpChoices: vi.fn(),
51
+ }));
52
+ vi.mock('../../ui/categorize.js', () => ({
53
+ categorizeAgents: vi.fn(),
54
+ categorizeSkills: vi.fn(),
55
+ categorizeCommands: vi.fn(),
56
+ categorizeMcps: vi.fn(),
57
+ }));
58
+ describe('integration/installer', () => {
59
+ let mockConfirm;
60
+ let mockSelect;
61
+ let mockIsOpenCodeInstalled;
62
+ let mockInstallOpenCode;
63
+ let mockGetFiles;
64
+ let mockGetDirectories;
65
+ let mockInstallAgents;
66
+ let mockInstallSkills;
67
+ let mockInstallCommands;
68
+ let mockInstallMcps;
69
+ let mockInstallTheme;
70
+ let mockIsThemeInstalled;
71
+ let mockBuildAgentChoices;
72
+ let mockBuildSkillChoices;
73
+ let mockBuildCommandChoices;
74
+ let mockBuildMcpChoices;
75
+ let mockCategorizeAgents;
76
+ let mockCategorizeSkills;
77
+ let mockCategorizeCommands;
78
+ let mockCategorizeMcps;
79
+ let mockSetupScrollRegion;
80
+ let mockResetScrollRegion;
81
+ let processExitSpy;
82
+ let consoleLogSpy;
83
+ let stdoutOnSpy;
84
+ let stdoutOffSpy;
85
+ beforeEach(async () => {
86
+ vi.resetAllMocks();
87
+ const promptsModule = await import('@inquirer/prompts');
88
+ mockConfirm = promptsModule.confirm;
89
+ const selectModule = await import('inquirer-select-pro');
90
+ mockSelect = selectModule.select;
91
+ const openCodeModule = await import('../../services/opencode.js');
92
+ mockIsOpenCodeInstalled = openCodeModule.isOpenCodeInstalled;
93
+ mockInstallOpenCode = openCodeModule.installOpenCode;
94
+ const installersModule = await import('../../services/installers.js');
95
+ mockInstallAgents = installersModule.installAgents;
96
+ mockInstallSkills = installersModule.installSkills;
97
+ mockInstallCommands = installersModule.installCommands;
98
+ mockInstallMcps = installersModule.installMcps;
99
+ mockInstallTheme = installersModule.installTheme;
100
+ mockIsThemeInstalled = installersModule.isThemeInstalled;
101
+ const fsModule = await import('../../utils/fs.js');
102
+ mockGetFiles = fsModule.getFiles;
103
+ mockGetDirectories = fsModule.getDirectories;
104
+ const choicesModule = await import('../../ui/choices.js');
105
+ mockBuildAgentChoices = choicesModule.buildAgentChoices;
106
+ mockBuildSkillChoices = choicesModule.buildSkillChoices;
107
+ mockBuildCommandChoices = choicesModule.buildCommandChoices;
108
+ mockBuildMcpChoices = choicesModule.buildMcpChoices;
109
+ const categorizeModule = await import('../../ui/categorize.js');
110
+ mockCategorizeAgents = categorizeModule.categorizeAgents;
111
+ mockCategorizeSkills = categorizeModule.categorizeSkills;
112
+ mockCategorizeCommands = categorizeModule.categorizeCommands;
113
+ mockCategorizeMcps = categorizeModule.categorizeMcps;
114
+ const terminalModule = await import('../../utils/terminal.js');
115
+ mockSetupScrollRegion = terminalModule.setupScrollRegion;
116
+ mockResetScrollRegion = terminalModule.resetScrollRegion;
117
+ processExitSpy = vi.spyOn(process, 'exit').mockImplementation(() => {
118
+ throw new Error('process.exit called');
119
+ });
120
+ consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => undefined);
121
+ stdoutOnSpy = vi.spyOn(process.stdout, 'on').mockImplementation(() => process.stdout);
122
+ stdoutOffSpy = vi.spyOn(process.stdout, 'off').mockImplementation(() => process.stdout);
123
+ // Default mocks
124
+ mockIsOpenCodeInstalled.mockResolvedValue(true);
125
+ mockGetFiles.mockResolvedValue([]);
126
+ mockGetDirectories.mockResolvedValue([]);
127
+ mockBuildAgentChoices.mockResolvedValue([]);
128
+ mockBuildSkillChoices.mockResolvedValue([]);
129
+ mockBuildCommandChoices.mockResolvedValue([]);
130
+ mockBuildMcpChoices.mockResolvedValue([]);
131
+ mockSelect.mockResolvedValue([]);
132
+ mockConfirm.mockResolvedValue(false);
133
+ mockIsThemeInstalled.mockResolvedValue(false);
134
+ mockCategorizeAgents.mockResolvedValue({ new: [], update: [] });
135
+ mockCategorizeSkills.mockResolvedValue({ new: [], update: [] });
136
+ mockCategorizeCommands.mockResolvedValue({ new: [], update: [] });
137
+ mockCategorizeMcps.mockResolvedValue({ new: [], update: [] });
138
+ });
139
+ afterEach(() => {
140
+ processExitSpy.mockRestore();
141
+ consoleLogSpy.mockRestore();
142
+ stdoutOnSpy.mockRestore();
143
+ stdoutOffSpy.mockRestore();
144
+ vi.clearAllMocks();
145
+ });
146
+ describe('run', () => {
147
+ it('should setup and reset scroll region', async () => {
148
+ const { run } = await import('../../index.js');
149
+ try {
150
+ await run();
151
+ }
152
+ catch {
153
+ // Ignore process.exit
154
+ }
155
+ expect(mockSetupScrollRegion).toHaveBeenCalled();
156
+ expect(mockResetScrollRegion).toHaveBeenCalled();
157
+ });
158
+ it('should setup resize listener', async () => {
159
+ const { run } = await import('../../index.js');
160
+ try {
161
+ await run();
162
+ }
163
+ catch {
164
+ // Ignore process.exit
165
+ }
166
+ expect(stdoutOnSpy).toHaveBeenCalledWith('resize', expect.any(Function));
167
+ expect(stdoutOffSpy).toHaveBeenCalledWith('resize', expect.any(Function));
168
+ });
169
+ it('should exit early when nothing selected', async () => {
170
+ const { run } = await import('../../index.js');
171
+ mockIsOpenCodeInstalled.mockResolvedValue(true);
172
+ mockSelect.mockResolvedValue([]);
173
+ mockConfirm.mockResolvedValue(false);
174
+ try {
175
+ await run();
176
+ }
177
+ catch {
178
+ // Ignore process.exit
179
+ }
180
+ expect(processExitSpy).toHaveBeenCalledWith(0);
181
+ });
182
+ it('should handle ExitPromptError gracefully', async () => {
183
+ const { run } = await import('../../index.js');
184
+ const exitError = new Error('force closed');
185
+ exitError.name = 'ExitPromptError';
186
+ mockSelect.mockRejectedValueOnce(exitError);
187
+ try {
188
+ await run();
189
+ }
190
+ catch {
191
+ // Ignore process.exit
192
+ }
193
+ expect(processExitSpy).toHaveBeenCalledWith(0);
194
+ expect(mockResetScrollRegion).toHaveBeenCalled();
195
+ });
196
+ it('should prompt to install OpenCode when not installed', async () => {
197
+ const { run } = await import('../../index.js');
198
+ mockIsOpenCodeInstalled.mockResolvedValue(false);
199
+ mockConfirm
200
+ .mockResolvedValueOnce(true) // Install OpenCode
201
+ .mockResolvedValueOnce(false); // Theme
202
+ try {
203
+ await run();
204
+ }
205
+ catch {
206
+ // Ignore process.exit
207
+ }
208
+ expect(mockInstallOpenCode).toHaveBeenCalled();
209
+ });
210
+ it('should exit when user declines OpenCode installation', async () => {
211
+ const { run } = await import('../../index.js');
212
+ mockIsOpenCodeInstalled.mockResolvedValue(false);
213
+ mockConfirm.mockResolvedValueOnce(false);
214
+ try {
215
+ await run();
216
+ }
217
+ catch {
218
+ // Ignore process.exit
219
+ }
220
+ expect(processExitSpy).toHaveBeenCalledWith(0);
221
+ expect(mockInstallOpenCode).not.toHaveBeenCalled();
222
+ });
223
+ it('should complete full installation flow', async () => {
224
+ const { run } = await import('../../index.js');
225
+ mockIsOpenCodeInstalled.mockResolvedValue(true);
226
+ mockGetFiles.mockResolvedValueOnce(['agent1']).mockResolvedValueOnce(['cmd1']);
227
+ mockGetDirectories.mockResolvedValueOnce(['skill1']).mockResolvedValueOnce(['mcp1']);
228
+ mockBuildAgentChoices.mockResolvedValue([{ name: 'agent1', value: 'agent1' }]);
229
+ mockBuildSkillChoices.mockResolvedValue([{ name: 'skill1', value: 'skill1' }]);
230
+ mockBuildCommandChoices.mockResolvedValue([{ name: 'cmd1', value: 'cmd1' }]);
231
+ mockBuildMcpChoices.mockResolvedValue([{ name: 'mcp1', value: 'mcp1' }]);
232
+ mockSelect
233
+ .mockResolvedValueOnce(['agent1'])
234
+ .mockResolvedValueOnce(['skill1'])
235
+ .mockResolvedValueOnce(['cmd1'])
236
+ .mockResolvedValueOnce(['mcp1']);
237
+ mockConfirm
238
+ .mockResolvedValueOnce(true) // Theme
239
+ .mockResolvedValueOnce(true); // Confirm
240
+ mockCategorizeAgents.mockResolvedValue({ new: ['agent1'], update: [] });
241
+ mockCategorizeSkills.mockResolvedValue({ new: ['skill1'], update: [] });
242
+ mockCategorizeCommands.mockResolvedValue({ new: ['cmd1'], update: [] });
243
+ mockCategorizeMcps.mockResolvedValue({ new: ['mcp1'], update: [] });
244
+ await run();
245
+ expect(mockInstallAgents).toHaveBeenCalledWith(['agent1']);
246
+ expect(mockInstallSkills).toHaveBeenCalledWith(['skill1']);
247
+ expect(mockInstallCommands).toHaveBeenCalledWith(['cmd1']);
248
+ expect(mockInstallMcps).toHaveBeenCalledWith(['mcp1']);
249
+ expect(mockInstallTheme).toHaveBeenCalled();
250
+ });
251
+ it('should not install theme when not selected', async () => {
252
+ const { run } = await import('../../index.js');
253
+ mockIsOpenCodeInstalled.mockResolvedValue(true);
254
+ mockSelect.mockResolvedValue(['agent1']);
255
+ mockGetFiles.mockResolvedValueOnce(['agent1']).mockResolvedValueOnce([]);
256
+ mockGetDirectories.mockResolvedValue([]);
257
+ mockBuildAgentChoices.mockResolvedValue([{ name: 'agent1', value: 'agent1' }]);
258
+ mockCategorizeAgents.mockResolvedValue({ new: ['agent1'], update: [] });
259
+ mockConfirm
260
+ .mockResolvedValueOnce(false) // Theme
261
+ .mockResolvedValueOnce(true); // Confirm
262
+ await run();
263
+ expect(mockInstallTheme).not.toHaveBeenCalled();
264
+ });
265
+ it('should cancel installation when user does not confirm', async () => {
266
+ const { run } = await import('../../index.js');
267
+ mockIsOpenCodeInstalled.mockResolvedValue(true);
268
+ mockSelect.mockResolvedValue(['agent1']);
269
+ mockGetFiles.mockResolvedValueOnce(['agent1']).mockResolvedValueOnce([]);
270
+ mockGetDirectories.mockResolvedValue([]);
271
+ mockBuildAgentChoices.mockResolvedValue([{ name: 'agent1', value: 'agent1' }]);
272
+ mockCategorizeAgents.mockResolvedValue({ new: ['agent1'], update: [] });
273
+ mockConfirm
274
+ .mockResolvedValueOnce(false) // Theme
275
+ .mockResolvedValueOnce(false); // Confirm - NO
276
+ try {
277
+ await run();
278
+ }
279
+ catch {
280
+ // Ignore process.exit
281
+ }
282
+ expect(mockInstallAgents).not.toHaveBeenCalled();
283
+ expect(processExitSpy).toHaveBeenCalledWith(0);
284
+ });
285
+ it('should handle installation failure', async () => {
286
+ const { run } = await import('../../index.js');
287
+ mockIsOpenCodeInstalled.mockResolvedValue(true);
288
+ mockSelect.mockResolvedValue(['agent1']);
289
+ mockGetFiles.mockResolvedValueOnce(['agent1']).mockResolvedValueOnce([]);
290
+ mockGetDirectories.mockResolvedValue([]);
291
+ mockBuildAgentChoices.mockResolvedValue([{ name: 'agent1', value: 'agent1' }]);
292
+ mockCategorizeAgents.mockResolvedValue({ new: ['agent1'], update: [] });
293
+ mockConfirm.mockResolvedValueOnce(false).mockResolvedValueOnce(true);
294
+ mockInstallAgents.mockRejectedValue(new Error('Install failed'));
295
+ try {
296
+ await run();
297
+ }
298
+ catch {
299
+ // Ignore process.exit
300
+ }
301
+ expect(processExitSpy).toHaveBeenCalledWith(1);
302
+ });
303
+ it('should skip theme selection when already installed', async () => {
304
+ const { run } = await import('../../index.js');
305
+ mockIsOpenCodeInstalled.mockResolvedValue(true);
306
+ mockIsThemeInstalled.mockResolvedValue(true);
307
+ mockSelect.mockResolvedValue(['agent1']);
308
+ mockGetFiles.mockResolvedValueOnce(['agent1']).mockResolvedValueOnce([]);
309
+ mockGetDirectories.mockResolvedValue([]);
310
+ mockBuildAgentChoices.mockResolvedValue([{ name: 'agent1', value: 'agent1' }]);
311
+ mockCategorizeAgents.mockResolvedValue({ new: ['agent1'], update: [] });
312
+ mockConfirm.mockResolvedValueOnce(true); // Only confirm, no theme question
313
+ await run();
314
+ expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('claude-vivid theme is already installed'));
315
+ });
316
+ it('should handle OpenCode installation failure with Error', async () => {
317
+ const { run } = await import('../../index.js');
318
+ mockIsOpenCodeInstalled.mockResolvedValue(false);
319
+ mockConfirm.mockResolvedValueOnce(true); // Yes, install OpenCode
320
+ mockInstallOpenCode.mockRejectedValue(new Error('Installation failed'));
321
+ try {
322
+ await run();
323
+ }
324
+ catch {
325
+ // Ignore process.exit
326
+ }
327
+ expect(processExitSpy).toHaveBeenCalledWith(1);
328
+ expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('Installation failed'));
329
+ });
330
+ it('should handle OpenCode installation failure with non-Error', async () => {
331
+ const { run } = await import('../../index.js');
332
+ mockIsOpenCodeInstalled.mockResolvedValue(false);
333
+ mockConfirm.mockResolvedValueOnce(true); // Yes, install OpenCode
334
+ mockInstallOpenCode.mockRejectedValue('string error');
335
+ try {
336
+ await run();
337
+ }
338
+ catch {
339
+ // Ignore process.exit
340
+ }
341
+ expect(processExitSpy).toHaveBeenCalledWith(1);
342
+ expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('string error'));
343
+ });
344
+ it('should handle force closed error message', async () => {
345
+ const { run } = await import('../../index.js');
346
+ const forceClosedError = new Error('Prompt was force closed');
347
+ // Setup: need agents so that select is called
348
+ mockGetFiles.mockResolvedValueOnce(['agent1']);
349
+ mockBuildAgentChoices.mockResolvedValue([{ name: 'agent1', value: 'agent1' }]);
350
+ mockSelect.mockRejectedValueOnce(forceClosedError);
351
+ try {
352
+ await run();
353
+ }
354
+ catch {
355
+ // Ignore process.exit
356
+ }
357
+ expect(processExitSpy).toHaveBeenCalledWith(0);
358
+ expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('Installation cancelled'));
359
+ });
360
+ it('should auto-install theme for new OpenCode installation', async () => {
361
+ const { run } = await import('../../index.js');
362
+ mockIsOpenCodeInstalled.mockResolvedValue(false);
363
+ mockConfirm.mockResolvedValueOnce(true); // Install OpenCode
364
+ mockInstallOpenCode.mockResolvedValue(undefined);
365
+ mockSelect.mockResolvedValue(['agent1']);
366
+ mockGetFiles.mockResolvedValueOnce(['agent1']).mockResolvedValueOnce([]);
367
+ mockGetDirectories.mockResolvedValue([]);
368
+ mockBuildAgentChoices.mockResolvedValue([{ name: 'agent1', value: 'agent1' }]);
369
+ mockCategorizeAgents.mockResolvedValue({ new: ['agent1'], update: [] });
370
+ mockConfirm.mockResolvedValueOnce(true); // Confirm install
371
+ await run();
372
+ expect(mockInstallTheme).toHaveBeenCalled();
373
+ expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('claude-vivid theme will be installed automatically'));
374
+ });
375
+ it('should handle installation failure with non-Error exception', async () => {
376
+ const { run } = await import('../../index.js');
377
+ mockIsOpenCodeInstalled.mockResolvedValue(true);
378
+ mockSelect.mockResolvedValue(['agent1']);
379
+ mockGetFiles.mockResolvedValueOnce(['agent1']).mockResolvedValueOnce([]);
380
+ mockGetDirectories.mockResolvedValue([]);
381
+ mockBuildAgentChoices.mockResolvedValue([{ name: 'agent1', value: 'agent1' }]);
382
+ mockCategorizeAgents.mockResolvedValue({ new: ['agent1'], update: [] });
383
+ mockConfirm
384
+ .mockResolvedValueOnce(false) // Theme
385
+ .mockResolvedValueOnce(true); // Confirm
386
+ mockInstallAgents.mockRejectedValue('string error');
387
+ try {
388
+ await run();
389
+ }
390
+ catch {
391
+ // Ignore process.exit
392
+ }
393
+ expect(processExitSpy).toHaveBeenCalledWith(1);
394
+ expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('string error'));
395
+ });
396
+ it('should pass theme and instructions to select', async () => {
397
+ const { run } = await import('../../index.js');
398
+ mockIsOpenCodeInstalled.mockResolvedValue(true);
399
+ mockGetFiles.mockResolvedValueOnce(['agent1']).mockResolvedValueOnce([]);
400
+ mockGetDirectories.mockResolvedValue([]);
401
+ mockBuildAgentChoices.mockResolvedValue([{ name: 'agent1', value: 'agent1' }]);
402
+ // Capture the select call to verify theme and instructions
403
+ mockSelect.mockImplementation((options) => {
404
+ // Call the passed functions to cover them
405
+ if (options.theme?.style?.renderSelectedOptions) {
406
+ const result = options.theme.style.renderSelectedOptions();
407
+ expect(result).toBe('');
408
+ }
409
+ if (options.instructions) {
410
+ const result = options.instructions();
411
+ expect(result).toContain('tab');
412
+ }
413
+ return Promise.resolve([]);
414
+ });
415
+ try {
416
+ await run();
417
+ }
418
+ catch {
419
+ // Ignore process.exit
420
+ }
421
+ expect(mockSelect).toHaveBeenCalled();
422
+ });
423
+ });
424
+ });
425
+ //# sourceMappingURL=installer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/installer.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=installers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installers.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/services/installers.test.ts"],"names":[],"mappings":""}