@sprucelabs/spruce-cli
Version:
Command line interface for building Spruce skills.
98 lines (82 loc) • 3.2 kB
text/typescript
import { diskUtil, namesUtil } from '@sprucelabs/spruce-skill-utils'
import { test, assert } from '@sprucelabs/test-utils'
import AbstractCliTest from '../../../tests/AbstractCliTest'
export default class SettingUpPolishTest extends AbstractCliTest {
()
protected static async hasCreateAction() {
assert.isFunction(this.Action('polish', 'setup').execute)
}
()
protected static async setsUpExpectedScript() {
await this.installSkillAndSetupPolish()
await this.assertPolishScriptWrittenToExpectedPlace()
}
()
protected static async polishResultsAreExpected() {
const results = await this.installSkillAndSetupPolish()
const { filename, destination } = await this.generateExpectedFile()
assert.isLength(results.files, 1)
assert.isEqualDeep(results, {
files: [
{
name: filename,
description: `Polish script at ${filename}!`,
path: destination,
action: 'generated',
},
],
})
}
()
protected static async createsExpectedScript() {
await this.installSkillAndSetupPolish()
const pkg = this.Service('pkg')
const scripts = pkg.get('scripts')
assert.isEqual(scripts.polish, 'heartwood-polish')
}
()
protected static async makeSureScriptHasSomethingAndIsValid() {
const results = await this.installSkillAndSetupPolish()
const { destination } = await this.generateExpectedFile()
const contents = diskUtil.readFile(destination)
assert.isNotEqual(contents, '')
await this.assertValidActionResponseFiles(results)
}
()
protected static async polishCreatesExpectedFileNameBasedOnSkillsNamespace() {
await this.installSkill()
const pkg = await this.Service('pkg')
const namespace = 'my-skill'
pkg.set({
path: ['skill', 'namespace'],
value: namespace,
})
await this.setupPolish()
await this.assertPolishScriptWrittenToExpectedPlace()
}
private static async assertPolishScriptWrittenToExpectedPlace() {
const { destination } = await this.generateExpectedFile()
assert.isTrue(
diskUtil.doesFileExist(destination),
`Did not find polish script at ${destination}!`
)
}
private static async generateExpectedFile() {
const store = this.Store('skill')
const namespace = await store.loadCurrentSkillsNamespace()
const filename = `${namesUtil.toKebab(namespace)}.polish.ts`
const destination = this.resolvePath('src', filename)
return { filename, destination }
}
private static async installSkillAndSetupPolish() {
await this.installSkill()
const results = await this.setupPolish()
return results
}
private static async setupPolish() {
return await this.Action('polish', 'setup').execute({})
}
private static async installSkill() {
await this.FeatureFixture().installCachedFeatures('polish')
}
}