mirror of
https://github.com/serverless/serverless.git
synced 2025-12-08 19:46:03 +00:00
110 lines
3.1 KiB
JavaScript
110 lines
3.1 KiB
JavaScript
'use strict'
|
|
|
|
const chai = require('chai')
|
|
const sinon = require('sinon')
|
|
const PluginSearch = require('../../../../../lib/plugins/plugin/search')
|
|
const Serverless = require('../../../../../lib/serverless')
|
|
const CLI = require('../../../../../lib/classes/cli')
|
|
chai.use(require('chai-as-promised'))
|
|
const expect = require('chai').expect
|
|
|
|
describe('PluginSearch', () => {
|
|
let pluginSearch
|
|
let serverless
|
|
|
|
const plugins = [
|
|
{
|
|
name: 'serverless-plugin-1',
|
|
description: 'Serverless Plugin 1',
|
|
githubUrl: 'https://github.com/serverless/serverless-plugin-1',
|
|
},
|
|
{
|
|
name: 'serverless-plugin-2',
|
|
description: 'Serverless Plugin 2',
|
|
githubUrl: 'https://github.com/serverless/serverless-plugin-2',
|
|
},
|
|
{
|
|
name: 'serverless-existing-plugin',
|
|
description: 'Serverless Existing plugin',
|
|
githubUrl: 'https://github.com/serverless/serverless-existing-plugin',
|
|
},
|
|
]
|
|
|
|
beforeEach(() => {
|
|
serverless = new Serverless({ commands: [], options: {} })
|
|
serverless.cli = new CLI(serverless)
|
|
const options = {}
|
|
pluginSearch = new PluginSearch(serverless, options)
|
|
})
|
|
|
|
describe('#constructor()', () => {
|
|
let searchStub
|
|
|
|
beforeEach(() => {
|
|
searchStub = sinon.stub(pluginSearch, 'search').returns(Promise.resolve())
|
|
})
|
|
|
|
afterEach(() => {
|
|
pluginSearch.search.restore()
|
|
})
|
|
|
|
it('should have the sub-command "search"', () => {
|
|
expect(pluginSearch.commands.plugin.commands.search).to.not.equal(
|
|
undefined,
|
|
)
|
|
})
|
|
|
|
it('should have the lifecycle event "search" for the "search" sub-command', () => {
|
|
expect(
|
|
pluginSearch.commands.plugin.commands.search.lifecycleEvents,
|
|
).to.deep.equal(['search'])
|
|
})
|
|
|
|
it('should have a required option "query" for the "search" sub-command', () => {
|
|
// eslint-disable-next-line no-unused-expressions
|
|
expect(
|
|
pluginSearch.commands.plugin.commands.search.options.query.required,
|
|
).to.be.true
|
|
})
|
|
|
|
it('should have a "plugin:search:search" hook', () => {
|
|
expect(pluginSearch.hooks['plugin:search:search']).to.not.equal(undefined)
|
|
})
|
|
|
|
it('should run promise chain in order for "plugin:search:search" hook', async () =>
|
|
expect(pluginSearch.hooks['plugin:search:search']()).to.be.fulfilled.then(
|
|
() => {
|
|
expect(searchStub.calledOnce).to.equal(true)
|
|
},
|
|
))
|
|
})
|
|
|
|
describe('#search()', () => {
|
|
let getPluginsStub
|
|
let displayStub
|
|
|
|
beforeEach(() => {
|
|
getPluginsStub = sinon
|
|
.stub(pluginSearch, 'getPlugins')
|
|
.returns(Promise.resolve(plugins))
|
|
displayStub = sinon
|
|
.stub(pluginSearch, 'display')
|
|
.returns(Promise.resolve())
|
|
})
|
|
|
|
afterEach(() => {
|
|
pluginSearch.getPlugins.restore()
|
|
pluginSearch.display.restore()
|
|
})
|
|
|
|
it('should return a list of plugins based on the search query', async () => {
|
|
pluginSearch.options.query = 'serverless-plugin-1'
|
|
|
|
return expect(pluginSearch.search()).to.be.fulfilled.then(() => {
|
|
expect(getPluginsStub.calledOnce).to.equal(true)
|
|
expect(displayStub.calledOnce).to.equal(true)
|
|
})
|
|
})
|
|
})
|
|
})
|