mirror of
https://github.com/pnpm/pnpm.git
synced 2026-03-26 11:02:01 -04:00
56 lines
1.6 KiB
TypeScript
56 lines
1.6 KiB
TypeScript
import execa from 'execa'
|
|
import { setup } from '@pnpm/plugin-commands-setup'
|
|
|
|
jest.mock('execa')
|
|
|
|
let originalShell: string | undefined
|
|
let originalPlatform = ''
|
|
|
|
beforeAll(() => {
|
|
originalShell = process.env.SHELL
|
|
originalPlatform = process.platform
|
|
|
|
process.env.SHELL = ''
|
|
Object.defineProperty(process, 'platform', {
|
|
value: 'win32',
|
|
})
|
|
})
|
|
|
|
afterAll(() => {
|
|
process.env.SHELL = originalShell
|
|
Object.defineProperty(process, 'platform', {
|
|
value: originalPlatform,
|
|
})
|
|
})
|
|
|
|
const regKey = 'HKEY_CURRENT_USER\\Environment'
|
|
|
|
test('PNPM_HOME is already set, but path is updated', async () => {
|
|
const currentPathInRegistry = '%USERPROFILE%\\AppData\\Local\\Microsoft\\WindowsApps;%USERPROFILE%\\.config\\etc;'
|
|
execa['mockResolvedValueOnce']({
|
|
failed: false,
|
|
stdout: `
|
|
HKEY_CURRENT_USER\\Environment
|
|
PNPM_HOME REG_EXPAND_SZ .pnpm\\home
|
|
Path REG_EXPAND_SZ ${currentPathInRegistry}
|
|
`,
|
|
}).mockResolvedValueOnce({
|
|
failed: false,
|
|
stdout: 'PATH UPDATED',
|
|
}).mockResolvedValue({
|
|
failed: true,
|
|
stderr: 'UNEXPECTED',
|
|
})
|
|
|
|
const output = await setup.handler({
|
|
pnpmHomeDir: __dirname,
|
|
})
|
|
|
|
expect(execa).toHaveBeenNthCalledWith(1, 'reg', ['query', regKey])
|
|
expect(execa).toHaveBeenNthCalledWith(2, 'reg', ['add', regKey, '/v', 'Path', '/t', 'REG_EXPAND_SZ', '/d', `${'.pnpm\\home'};${currentPathInRegistry}`, '/f'])
|
|
expect(execa).toHaveBeenNthCalledWith(3, 'setx', ['PNPM_HOME', '.pnpm\\home'])
|
|
expect(output).toContain(`Currently 'PNPM_HOME' is set to '${'.pnpm\\home'}'`)
|
|
expect(output).toContain('Updating PATH')
|
|
expect(output).toContain('PATH UPDATED')
|
|
})
|