mirror of
https://github.com/pnpm/pnpm.git
synced 2026-01-05 21:48:26 -05:00
* feat(completion): generate-completion close #3083 * feat: better error message * test: generate-completion * feat(completion): add powershell * chore(deps): update @pnpm/tabtab to 0.3.0 * switch to provided type declarations * fix typings * update tests * update bundle scripts * refactor: remove unnecessary `??` * refactor: replace a type def with provided types * chore(deps): update @pnpm/tabtab to 0.4.0 * feat(cli): rename completion command * chore(deps): update @pnpm/tabtab to 0.4.1 * refactor: use tabtab's new features * fix: pass shell * chore(deps): update @pnpm/tabtab to 0.5.0 * chore(deps): update @pnpm/tabtab to 0.5.1 * fix: remove unused import * refactor: move completion to plugins * feat: remove `{install,uninstall}-completion` Just `pnpm completion` is enough * test: fix * refactor: direct import * refactor: move tests to next to the lib * refactor: merge 2 packages into 1 * fix: update changeset and remove install-completion
49 lines
1.7 KiB
TypeScript
49 lines
1.7 KiB
TypeScript
import { SUPPORTED_SHELLS } from '@pnpm/tabtab'
|
|
import { generateCompletion } from '@pnpm/plugin-commands-completion'
|
|
|
|
function createHandler () {
|
|
const log = jest.fn()
|
|
const handler = generateCompletion.createCompletionGenerator({ log })
|
|
return { log, handler }
|
|
}
|
|
|
|
test('pnpm completion requires the shell argument', async () => {
|
|
const { log, handler } = createHandler()
|
|
const promise = handler({}, [])
|
|
await expect(promise).rejects.toMatchObject({
|
|
code: 'ERR_PNPM_MISSING_SHELL_NAME',
|
|
message: '`pnpm completion` requires a shell name',
|
|
})
|
|
expect(log).not.toHaveBeenCalled()
|
|
})
|
|
|
|
test('pnpm completion errors on unsupported shell', async () => {
|
|
const { log, handler } = createHandler()
|
|
const promise = handler({}, ['weird-shell-nobody-uses'])
|
|
await expect(promise).rejects.toMatchObject({
|
|
code: 'ERR_PNPM_UNSUPPORTED_SHELL',
|
|
message: '\'weird-shell-nobody-uses\' is not supported',
|
|
})
|
|
expect(log).not.toHaveBeenCalled()
|
|
})
|
|
|
|
test('pnpm completion errors on redundant parameters', async () => {
|
|
const { log, handler } = createHandler()
|
|
const promise = handler({}, ['bash', 'fish', 'pwsh', 'zsh'])
|
|
await expect(promise).rejects.toMatchObject({
|
|
code: 'ERR_PNPM_REDUNDANT_PARAMETERS',
|
|
message: 'The 3 parameters after shell is not necessary',
|
|
})
|
|
expect(log).not.toHaveBeenCalled()
|
|
})
|
|
|
|
for (const shell of SUPPORTED_SHELLS) {
|
|
test(`pnpm completion ${shell}`, async () => {
|
|
const { log, handler } = createHandler()
|
|
await handler({}, [shell])
|
|
expect(log).toHaveBeenCalledWith(expect.stringContaining('###-begin-pnpm-completion-###'))
|
|
expect(log).toHaveBeenCalledWith(expect.stringContaining('###-end-pnpm-completion-###'))
|
|
expect(log).toHaveBeenCalledTimes(1)
|
|
})
|
|
}
|