@sprucelabs/spruce-cli
Version:
Command line interface for building Spruce skills.
110 lines (95 loc) • 3.54 kB
text/typescript
import { diskUtil } from '@sprucelabs/spruce-skill-utils'
import { test, assert } from '@sprucelabs/test-utils'
import AbstractSkillTest from '../../tests/AbstractSkillTest'
import MockProgramFactory from '../../tests/MockProgramFactory'
export default class OverridingCommandsInPackageJsonTest extends AbstractSkillTest {
protected static skillCacheKey = 'schemas'
private static originalPackageJson: string
private static originalSettingsJson: string
protected static async beforeEach() {
await super.beforeEach()
if (!this.originalPackageJson) {
this.originalPackageJson = diskUtil.readFile(
this.resolvePath('package.json')
)
this.originalSettingsJson = diskUtil.readFile(
this.resolveHashSprucePath('settings.json')
)
} else {
diskUtil.writeFile(
this.resolvePath('package.json'),
this.originalPackageJson
)
diskUtil.writeFile(
this.resolveHashSprucePath('settings.json'),
this.originalSettingsJson
)
}
}
protected static async runningCommandHonorsOverrides(
override: OverrideFile
) {
this.overrideOptions(override)
const cli = await this.FeatureFixture().Cli({
program: MockProgramFactory.Program(),
})
//@ts-ignore
const executer = cli.getActionExecuter()
await executer.Action('schema', 'sync').execute()
this.assertCoreSchemasDidNotSync()
}
protected static async runningCommandHonorsOverridesWhenCommandIsForwarded(
override: OverrideFile
) {
this.overrideOptions(override)
const cli = await this.FeatureFixture().Cli({
program: MockProgramFactory.Program(),
})
//@ts-ignore
const executer = cli.getActionExecuter()
await executer.Action('schema', 'create').execute({
nameReadable: 'Test schema!',
namePascal: 'Test',
nameCamel: 'test',
description: 'this is so great!',
})
this.assertCoreSchemasDidNotSync()
}
private static assertCoreSchemasDidNotSync() {
const personPath = this.resolveHashSprucePath(
'schemas',
'spruce',
'v2020_07_22',
'person.schema.ts'
)
assert.isFalse(
diskUtil.doesFileExist(personPath),
'did not expect to find person.schema.ts'
)
}
private static overrideOptions(override: OverrideFile) {
if (override === 'settings.json') {
const settings = this.Service('settings')
settings.set('commandOverrides', {
'sync.schemas': '--shouldFetchCoreSchemas false',
})
} else {
const pkg = this.Service('pkg')
pkg.set({
path: ['skill', 'commandOverrides', 'sync.schemas'],
value: '--shouldFetchCoreSchemas false',
})
}
}
}
type OverrideFile = 'package.json' | 'settings.json'