Files
pnpm/packages/plugin-commands-setup/test/setupOnWindows/05.test.ts

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')
})