@sprucelabs/spruce-cli
Version:
Command line interface for building Spruce skills.
120 lines (94 loc) • 4.05 kB
text/typescript
import { test, assert, generateId } from '@sprucelabs/test-utils'
import CommandServiceImpl from '../../../services/CommandService'
import LintService from '../../../services/LintService'
import AbstractCliTest from '../../../tests/AbstractCliTest'
export default class LintServiceTest extends AbstractCliTest {
private static wasFixInvoked = false
protected static async beforeEach() {
await super.beforeEach()
LintService.enableLinting()
this.wasFixInvoked = false
this.commandFaker.on(/node/, () => {
this.wasFixInvoked = true
})
}
.skip('new way of linting never seems to throw')
protected static async throwsWhenLintReturnsMessage() {
await this.FeatureFixture().installCachedFeatures('skills')
CommandServiceImpl.fakeCommand(/node/, {
code: 0,
stdout: `[{"filePath":"/Users/taylorromero/Development/SpruceLabs/spruce-appointments-skill/src/.spruce/stores/stores.types.ts","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \\"--ignore-pattern '!<relative/path/to/filename>'\\") to override."}],"errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]}]\n`,
})
await assert.doesThrowAsync(() => this.Service('lint').fix('./go'))
}
protected static async worksWhenNoMessagesReturned() {
await this.FeatureFixture().installCachedFeatures('skills')
CommandServiceImpl.fakeCommand(/node/, {
code: 0,
stdout: `[{"filePath":"/Users/taylorromero/Development/SpruceLabs/spruce-appointments-skill/src/.spruce/stores/stores.types.ts","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \\"--ignore-pattern '!<relative/path/to/filename>'\\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]}]\n`,
})
await this.fix('./go')
}
protected static async defaultIgnore() {
assert.isEqualDeep(LintService.ignorePatterns, [
'valueType.tmp',
'.md',
'.js',
'.gitignore',
'.mjs',
'.spruce',
'.nvmrc',
'tsconfig.json',
'.npmignore',
])
}
protected static async willIgnoreFirstItemInIgnoreList() {
const pattern = generateId()
this.setIgnorePatterns([pattern])
await this.fixAndAssertNotFixed(pattern)
await this.fix('whatever.ts')
this.assertWasFixed()
}
protected static async willIgnoreSecondItemInIgnoreList() {
const pattern = generateId()
this.setIgnorePatterns(['whatever.ts', pattern])
await this.fixAndAssertNotFixed(pattern)
}
protected static async ignoresPartialMatch() {
const pattern = generateId()
this.setIgnorePatterns([pattern + '/whatever.ts'])
await this.fixAndAssertNotFixed('whatever.ts')
}
protected static async partialMatchesOtherWay() {
this.setIgnorePatterns(['valueType.tmp'])
await this.fixAndAssertNotFixed(this.resolvePath('valueType.tmp'))
}
private static async fixAndAssertNotFixed(pattern: string) {
await this.fix(pattern)
this.assertWasNotFixed()
}
private static assertWasFixed() {
assert.isTrue(
this.wasFixInvoked,
'Fix was not invoked when it should have been.'
)
}
private static assertWasNotFixed() {
assert.isFalse(
this.wasFixInvoked,
`Fix was invoked when it should not have been.`
)
}
private static setIgnorePatterns(patterns: string[]) {
LintService.ignorePatterns = patterns
}
private static async fix(pattern: string) {
await this.Service('lint').fix(pattern)
}
}