|
1 | | -import { resolvePackageManager, spawnPackageManager } from '@electron-forge/core-utils'; |
2 | | -import { beforeEach, describe, expect, it, vi } from 'vitest'; |
| 1 | +import { PACKAGE_MANAGERS, spawnPackageManager } from '@electron-forge/core-utils'; |
| 2 | +import { describe, expect, it, vi } from 'vitest'; |
3 | 3 |
|
4 | 4 | import installDependencies, { DepType, DepVersionRestriction } from '../../../src/util/install-dependencies'; |
5 | 5 |
|
6 | 6 | vi.mock(import('@electron-forge/core-utils'), async (importOriginal) => { |
7 | 7 | const mod = await importOriginal(); |
8 | 8 | return { |
9 | 9 | ...mod, |
10 | | - resolvePackageManager: vi.fn(), |
11 | 10 | spawnPackageManager: vi.fn(), |
12 | 11 | }; |
13 | 12 | }); |
14 | 13 |
|
15 | 14 | describe('installDependencies', () => { |
16 | 15 | it('should immediately resolve if no deps are provided', async () => { |
17 | | - vi.mocked(resolvePackageManager).mockResolvedValue({ executable: 'npm', install: 'install', dev: '--save-dev', exact: '--save-exact' }); |
18 | | - await installDependencies('mydir', []); |
| 16 | + await installDependencies(PACKAGE_MANAGERS['npm'], 'mydir', []); |
19 | 17 | expect(spawnPackageManager).not.toHaveBeenCalled(); |
20 | 18 | }); |
21 | 19 |
|
22 | 20 | it('should reject if the package manager fails to spawn', async () => { |
23 | | - vi.mocked(resolvePackageManager).mockResolvedValue({ executable: 'npm', install: 'install', dev: '--save-dev', exact: '--save-exact' }); |
24 | 21 | vi.mocked(spawnPackageManager).mockRejectedValueOnce('fail'); |
25 | | - await expect(installDependencies('void', ['electron'])).rejects.toThrow('fail'); |
| 22 | + await expect(installDependencies(PACKAGE_MANAGERS['npm'], 'void', ['electron'])).rejects.toThrow('fail'); |
26 | 23 | }); |
27 | 24 |
|
28 | 25 | it('should resolve if the package manager command succeeds', async () => { |
29 | | - vi.mocked(resolvePackageManager).mockResolvedValue({ executable: 'npm', install: 'install', dev: '--save-dev', exact: '--save-exact' }); |
30 | 26 | vi.mocked(spawnPackageManager).mockResolvedValueOnce('pass'); |
31 | | - await expect(installDependencies('void', ['electron'])).resolves.toBe(undefined); |
| 27 | + await expect(installDependencies(PACKAGE_MANAGERS['npm'], 'void', ['electron'])).resolves.toBe(undefined); |
32 | 28 | }); |
33 | 29 |
|
34 | | - describe.each([ |
35 | | - { executable: 'npm' as const, install: 'install', exact: '--save-exact', dev: '--save-dev' }, |
36 | | - { executable: 'yarn' as const, install: 'add', exact: '--exact', dev: '--dev' }, |
37 | | - { executable: 'pnpm' as const, install: 'install', exact: '--save-exact', dev: '--save-dev' }, |
38 | | - ])('$executable', (args) => { |
39 | | - beforeEach(() => { |
40 | | - vi.mocked(resolvePackageManager).mockResolvedValue(args); |
41 | | - }); |
42 | | - |
| 30 | + describe.each([PACKAGE_MANAGERS['npm'], PACKAGE_MANAGERS['yarn'], PACKAGE_MANAGERS['pnpm']])('$executable', (pm) => { |
43 | 31 | it('should install deps', async () => { |
44 | | - await installDependencies('mydir', ['react']); |
45 | | - expect(spawnPackageManager).toHaveBeenCalledWith([args.install, 'react'], expect.anything()); |
| 32 | + await installDependencies(pm, 'mydir', ['react']); |
| 33 | + expect(spawnPackageManager).toHaveBeenCalledWith(pm, [pm.install, 'react'], expect.anything()); |
46 | 34 | }); |
47 | 35 |
|
48 | 36 | it('should install dev deps', async () => { |
49 | | - await installDependencies('mydir', ['eslint'], DepType.DEV); |
50 | | - expect(spawnPackageManager).toHaveBeenCalledWith([args.install, 'eslint', args.dev], expect.anything()); |
| 37 | + await installDependencies(pm, 'mydir', ['eslint'], DepType.DEV); |
| 38 | + expect(spawnPackageManager).toHaveBeenCalledWith(pm, [pm.install, 'eslint', pm.dev], expect.anything()); |
51 | 39 | }); |
52 | 40 |
|
53 | 41 | it('should install exact deps', async () => { |
54 | | - await installDependencies('mydir', ['react'], DepType.PROD, DepVersionRestriction.EXACT); |
55 | | - expect(spawnPackageManager).toHaveBeenCalledWith([args.install, 'react', args.exact], expect.anything()); |
| 42 | + await installDependencies(pm, 'mydir', ['react'], DepType.PROD, DepVersionRestriction.EXACT); |
| 43 | + expect(spawnPackageManager).toHaveBeenCalledWith(pm, [pm.install, 'react', pm.exact], expect.anything()); |
56 | 44 | }); |
57 | 45 |
|
58 | 46 | it('should install exact dev deps', async () => { |
59 | | - await installDependencies('mydir', ['eslint'], DepType.DEV, DepVersionRestriction.EXACT); |
60 | | - expect(spawnPackageManager).toHaveBeenCalledWith([args.install, 'eslint', args.dev, args.exact], expect.anything()); |
| 47 | + await installDependencies(pm, 'mydir', ['eslint'], DepType.DEV, DepVersionRestriction.EXACT); |
| 48 | + expect(spawnPackageManager).toHaveBeenCalledWith(pm, [pm.install, 'eslint', pm.dev, pm.exact], expect.anything()); |
61 | 49 | }); |
62 | 50 | }); |
63 | 51 | }); |
0 commit comments