mirror of
https://github.com/serverless/serverless.git
synced 2025-12-08 19:46:03 +00:00
273 lines
6.7 KiB
JavaScript
273 lines
6.7 KiB
JavaScript
'use strict'
|
|
|
|
const { expect } = require('chai')
|
|
const overrideArgv = require('process-utils/override-argv')
|
|
const resolveInput = require('../../../../lib/cli/resolve-input')
|
|
const commandsSchema = require('../../../../lib/cli/commands-schema')
|
|
|
|
describe('test/unit/lib/cli/resolve-input.test.js', () => {
|
|
describe('when commands', () => {
|
|
let data
|
|
before(() => {
|
|
resolveInput.clear()
|
|
delete require.cache[
|
|
require.resolve('../../../../lib/utils/log-deprecation')
|
|
]
|
|
process.env.SLS_DEPRECATION_DISABLE = 'CLI_OPTIONS_BEFORE_COMMAND'
|
|
data = overrideArgv(
|
|
{
|
|
args: [
|
|
'serverless',
|
|
'cmd1',
|
|
'cmd2',
|
|
'--version',
|
|
'ver',
|
|
'--help',
|
|
'h',
|
|
'--config',
|
|
'conf',
|
|
'elo',
|
|
'other',
|
|
],
|
|
},
|
|
() => resolveInput(),
|
|
)
|
|
})
|
|
|
|
it('should resolve commands', async () => {
|
|
expect(data.commands).to.deep.equal(['cmd1', 'cmd2'])
|
|
})
|
|
|
|
it('should recognize --version as boolean', async () => {
|
|
expect(data.options.version).to.equal(true)
|
|
})
|
|
|
|
it('should recognize --help as boolean', async () => {
|
|
expect(data.options.help).to.equal(true)
|
|
})
|
|
|
|
it('should recognize --config', async () => {
|
|
expect(data.options.config).to.equal('conf')
|
|
})
|
|
})
|
|
|
|
describe('"-s" handling', () => {
|
|
describe('Normal command', () => {
|
|
let data
|
|
before(() => {
|
|
resolveInput.clear()
|
|
data = overrideArgv(
|
|
{
|
|
args: ['serverless', 'package', '-s', 'stage'],
|
|
},
|
|
() => resolveInput(),
|
|
)
|
|
})
|
|
it('should recognize stage alias', async () => {
|
|
expect(data.options.stage).to.equal('stage')
|
|
})
|
|
})
|
|
describe('Command with custom -s alias', () => {
|
|
let data
|
|
before(() => {
|
|
resolveInput.clear()
|
|
data = overrideArgv(
|
|
{
|
|
args: ['serverless', 'config', 'credentials', '-s', 'stage'],
|
|
},
|
|
() => resolveInput(),
|
|
)
|
|
})
|
|
it('should recognize stage alias', async () => {
|
|
expect(data.options).to.not.have.property('stage')
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('when no commands', () => {
|
|
let data
|
|
before(() => {
|
|
resolveInput.clear()
|
|
data = overrideArgv(
|
|
{
|
|
args: ['serverless', '-v', '-h', '-c', 'conf'],
|
|
},
|
|
() => resolveInput(),
|
|
)
|
|
})
|
|
|
|
it('should resolve empty commands list', async () => {
|
|
expect(data.commands).to.deep.equal([])
|
|
})
|
|
|
|
it('should recognize -v as --version alias', async () => {
|
|
expect(data.options.version).to.equal(true)
|
|
})
|
|
|
|
it('should recognize --h alias', async () => {
|
|
expect(data.options.help).to.equal(true)
|
|
})
|
|
|
|
it('should recognize --c alias', async () => {
|
|
expect(data.options.config).to.equal('conf')
|
|
})
|
|
|
|
it('should recognize --version', async () => {
|
|
resolveInput.clear()
|
|
data = overrideArgv(
|
|
{
|
|
args: ['serverless', '--version'],
|
|
},
|
|
() => resolveInput(),
|
|
)
|
|
expect(data).to.deep.equal({
|
|
commandSchema: commandsSchema.get(''),
|
|
command: '',
|
|
commands: [],
|
|
options: { version: true },
|
|
isHelpRequest: true,
|
|
commandsSchema,
|
|
})
|
|
})
|
|
|
|
it('should recognize interactive setup', async () => {
|
|
resolveInput.clear()
|
|
data = overrideArgv(
|
|
{
|
|
args: ['serverless', '--app', 'foo'],
|
|
},
|
|
() => resolveInput(),
|
|
)
|
|
expect(data).to.deep.equal({
|
|
commandSchema: commandsSchema.get(''),
|
|
command: '',
|
|
commands: [],
|
|
options: { app: 'foo' },
|
|
commandsSchema,
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('isHelpRequest', () => {
|
|
it('should not mark regular command', async () => {
|
|
resolveInput.clear()
|
|
const data = overrideArgv(
|
|
{
|
|
args: ['serverless', 'package'],
|
|
},
|
|
() => resolveInput(),
|
|
)
|
|
expect(data).to.deep.equal({
|
|
commandSchema: commandsSchema.get('package'),
|
|
command: 'package',
|
|
commands: ['package'],
|
|
options: {},
|
|
commandsSchema,
|
|
})
|
|
})
|
|
|
|
it('should recognize "--help"', async () => {
|
|
resolveInput.clear()
|
|
const data = overrideArgv(
|
|
{
|
|
args: ['serverless', '--help'],
|
|
},
|
|
() => resolveInput(),
|
|
)
|
|
expect(data).to.deep.equal({
|
|
commandSchema: commandsSchema.get(''),
|
|
command: '',
|
|
commands: [],
|
|
options: { help: true },
|
|
isHelpRequest: true,
|
|
commandsSchema,
|
|
})
|
|
})
|
|
|
|
it('should recognize command "--help"', async () => {
|
|
resolveInput.clear()
|
|
const data = overrideArgv(
|
|
{
|
|
args: ['serverless', 'package', '--help'],
|
|
},
|
|
() => resolveInput(),
|
|
)
|
|
expect(data).to.deep.equal({
|
|
commandSchema: commandsSchema.get('package'),
|
|
command: 'package',
|
|
commands: ['package'],
|
|
options: { help: true },
|
|
isHelpRequest: true,
|
|
commandsSchema,
|
|
})
|
|
})
|
|
|
|
it('should recognize "--help-interactive"', async () => {
|
|
resolveInput.clear()
|
|
const data = overrideArgv(
|
|
{
|
|
args: ['serverless', '--help-interactive'],
|
|
},
|
|
() => resolveInput(),
|
|
)
|
|
expect(data).to.deep.equal({
|
|
commandSchema: commandsSchema.get(''),
|
|
command: '',
|
|
commands: [],
|
|
options: { 'help-interactive': true },
|
|
isHelpRequest: true,
|
|
commandsSchema,
|
|
})
|
|
})
|
|
|
|
it('should recognize "help" command', async () => {
|
|
resolveInput.clear()
|
|
const data = overrideArgv(
|
|
{
|
|
args: ['serverless', 'help'],
|
|
},
|
|
() => resolveInput(),
|
|
)
|
|
expect(data).to.deep.equal({
|
|
commandSchema: commandsSchema.get('help'),
|
|
command: 'help',
|
|
commands: ['help'],
|
|
options: {},
|
|
isHelpRequest: true,
|
|
commandsSchema,
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('multiple handling', () => {
|
|
let data
|
|
before(() => {
|
|
resolveInput.clear()
|
|
data = overrideArgv(
|
|
{
|
|
args: [
|
|
'serverless',
|
|
'invoke',
|
|
'local',
|
|
'--env',
|
|
'foo=bar',
|
|
'--env',
|
|
'bar=baz',
|
|
],
|
|
},
|
|
() => resolveInput(),
|
|
)
|
|
})
|
|
|
|
it('should recognize multiple env options', async () => {
|
|
expect(data).to.deep.equal({
|
|
commandSchema: commandsSchema.get('invoke local'),
|
|
command: 'invoke local',
|
|
commands: ['invoke', 'local'],
|
|
options: { env: ['foo=bar', 'bar=baz'] },
|
|
commandsSchema,
|
|
})
|
|
})
|
|
})
|
|
})
|