@sprucelabs/spruce-cli
Version:
Command line interface for building Spruce skills.
80 lines (70 loc) • 2.34 kB
text/typescript
import { diskUtil } from '@sprucelabs/spruce-skill-utils'
import { test, assert } from '@sprucelabs/test-utils'
import AbstractSkillTest from '../../../tests/AbstractSkillTest'
export default class SettingUpForAiAssistedDevelopmentTest extends AbstractSkillTest {
protected static skillCacheKey = 'node'
private static readonly expectedFiles = [
'CLAUDE.md',
'AGENTS.md',
'docs/PROJECT.md',
]
()
protected static async hasSetupForAiDevelopmentAction() {
assert.isFunction(this.Action('node', 'setupForAiDevelopment').execute)
}
()
protected static async generatesExpectedFiles() {
await this.execute()
this.assertExpectedFilesExist()
}
()
protected static async generatedFilesHaveExpectedContents() {
this.assertFileContentsMatch('CLAUDE.md', 'markdown/CLAUDE.md.hbs')
this.assertFileContentsMatch('AGENTS.md', 'markdown/AGENTS.md.hbs')
this.assertFileContentsMatch(
'docs/PROJECT.md',
'markdown/PROJECT.md.hbs'
)
}
private static assertFileContentsMatch(
generatedFile: string,
templateFile: string
) {
const generatedContents = diskUtil.readFile(
this.resolvePath(generatedFile)
)
const templateContents = this.readTemplate(templateFile)
assert.isEqual(generatedContents, templateContents)
}
private static readTemplate(templatePath: string) {
const fullPath = diskUtil.resolvePath(
__dirname,
'..',
'..',
'..',
'..',
'..',
'spruce-templates',
'src',
'templates',
templatePath
)
return diskUtil.readFile(fullPath)
}
private static assertExpectedFilesExist() {
for (const file of this.expectedFiles) {
assert.isTrue(
diskUtil.doesFileExist(this.resolvePath(file)),
`Expected ${file} to exist`
)
}
}
private static async execute() {
const results = await this.Action(
'node',
'setupForAiDevelopment'
).execute({})
assert.isFalsy(results.errors, 'Action should not return errors')
return results
}
}