93 lines
2.8 KiB
TypeScript
93 lines
2.8 KiB
TypeScript
import * as fslib from 'fs'
|
|
import * as pathlib from 'path'
|
|
import * as uuid from 'uuid'
|
|
import impl from '../../src'
|
|
import defaults from '../defaults'
|
|
import { Test, TestProps } from '../typings'
|
|
import * as utils from '../utils'
|
|
|
|
const getHomeDir = (props: { tmpDir: string }) => pathlib.join(props.tmpDir, '.botpresshome')
|
|
const initBot = async (props: TestProps, definitionFile: string) => {
|
|
const { tmpDir, dependencies, ...creds } = props
|
|
const argv = {
|
|
...defaults,
|
|
botpressHome: getHomeDir(props),
|
|
confirm: true,
|
|
...creds,
|
|
}
|
|
const botName = uuid.v4().replace(/-/g, '')
|
|
const botDir = pathlib.join(tmpDir, botName)
|
|
await impl
|
|
.init({ ...argv, workDir: tmpDir, name: botName, type: 'bot', template: 'empty' })
|
|
.then(utils.handleExitCode)
|
|
await utils.fixBotpressDependencies({ workDir: botDir, target: dependencies })
|
|
await utils.npmInstall({ workDir: botDir }).then(utils.handleExitCode)
|
|
fslib.writeFileSync(pathlib.join(botDir, 'bot.definition.ts'), definitionFile)
|
|
return { botDir }
|
|
}
|
|
let botDir: string | undefined = undefined
|
|
const ALIAS = 'alias'
|
|
export const removePackage: Test = {
|
|
name: 'cli should allow removing a plugin',
|
|
handler: async (props) => {
|
|
try {
|
|
const botpressHomeDir = pathlib.join(props.tmpDir, '.botpresshome')
|
|
|
|
const initializedBot = await initBot(
|
|
props,
|
|
['import * as sdk from "@botpress/sdk"', 'export default new sdk.BotDefinition({})'].join('\n')
|
|
)
|
|
botDir = initializedBot.botDir
|
|
|
|
const argv = {
|
|
...defaults,
|
|
botpressHome: botpressHomeDir,
|
|
confirm: true,
|
|
...props,
|
|
}
|
|
|
|
await impl
|
|
.login({
|
|
...argv,
|
|
})
|
|
.then(utils.handleExitCode)
|
|
|
|
const plugin: string = 'hitl'
|
|
|
|
props.logger.info(`Installing plugin: ${plugin}`)
|
|
await impl
|
|
.add({
|
|
...argv,
|
|
packageRef: plugin,
|
|
installPath: botDir,
|
|
useDev: false,
|
|
alias: ALIAS,
|
|
})
|
|
.then(utils.handleExitCode)
|
|
|
|
await impl.remove({
|
|
...argv,
|
|
alias: ALIAS,
|
|
workDir: botDir,
|
|
})
|
|
|
|
const aliasPath = pathlib.join(botDir, 'bp_modules', ALIAS)
|
|
const exists = await fslib.promises
|
|
.access(aliasPath)
|
|
.then(() => true)
|
|
.catch(() => false)
|
|
if (exists) {
|
|
throw new Error(`Expected ${aliasPath} to not exist`)
|
|
}
|
|
|
|
const pkgJsonPath = pathlib.join(botDir, 'package.json')
|
|
const pkgJson = JSON.parse(fslib.readFileSync(pkgJsonPath, 'utf-8'))
|
|
if (pkgJson.bpDependencies && Object.keys(pkgJson.bpDependencies).length !== 0) {
|
|
throw new Error('Expected bpDependencies to be empty')
|
|
}
|
|
} finally {
|
|
if (botDir) fslib.rmSync(botDir, { force: true, recursive: true })
|
|
}
|
|
},
|
|
}
|