Files
pnpm/completion/plugin-commands-completion/test/generateCompletion.ts
Khải 004addf63e feat(completion): print completion code to stdout (#7597)
* 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
2024-02-06 23:18:17 +01:00

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