@sprucelabs/spruce-cli
Version:
Command line interface for building Spruce skills.
210 lines (176 loc) • 5.75 kB
text/typescript
import { diskUtil } from '@sprucelabs/spruce-skill-utils'
import AbstractSpruceTest, {
test,
assert,
errorAssert,
suite,
} from '@sprucelabs/test-utils'
import StaticToInstanceTestFileMigratorImpl, {
StaticToInstanceTestFileMigrator,
} from '../../../../tests/staticToInstanceMigration/StaticToInstanceTestFileMigrator'
()
export default class StaticToInstanceTestFileMigratorTest extends AbstractSpruceTest {
private migrator: StaticToInstanceTestFileMigrator =
StaticToInstanceTestFileMigratorImpl.Migrator()
()
protected throwsWithMissing() {
//@ts-ignore
const err = assert.doesThrow(() => this.migrate())
errorAssert.assertError(err, 'MISSING_PARAMETERS', {
parameters: ['contents'],
})
}
()
protected returnsEmptyString() {
this.assertMigratedEquals('', '')
}
()
protected fixesStaticFunction() {
this.assertMigratedEquals(
`@test()
protected static myTest() {}`,
`@test()
protected myTest() {}`
)
}
()
protected fixesStaticAsyncFunctions() {
this.assertMigratedEquals(
`@test()
protected static async myTest() {}`,
`@test()
protected async myTest() {}`
)
}
()
protected doesNotMessWithStaticInVariableName() {
this.assertMigratedEquals(
`protected staticInName() {}`,
`protected staticInName() {}`
)
}
()
protected addsSuiteDecoratorToClassIfNotThere() {
this.assertMigratedEquals(
`export default class Test {}`,
`@suite()\nexport default class Test {}`
)
}
()
protected doesNotAddSuitIfAnotherClassExported() {
this.assertMigratedEquals(
`export class Test {}`,
`export class Test {}`
)
}
()
protected doesNotAddSuiteIfAlreadyThere() {
this.assertMigratedEquals(
`@suite()\nexport default class Test {}`,
`@suite()\nexport default class Test {}`
)
}
()
protected addsImportIfNotThere() {
this.assertMigratedEquals(
`import { test } from '@sprucelabs/test-utils'`,
`import { test, suite } from '@sprucelabs/test-utils'`
)
}
()
protected doesNotMessWithAnythingWithTestInName() {
this.assertMigratedEquals(
`protected testing() {}`,
`protected testing() {}`
)
}
()
protected doesNoIncludeSuiteTwice() {
this.assertMigratedEquals(
`import { test, suite } from '@sprucelabs/test-utils'`,
`import { test, suite } from '@sprucelabs/test-utils'`
)
}
()
protected includesSuiteEvenIfSuiteIsInAMethodName() {
this.assertMigratedEquals(
`import { test } from '@sprucelabs/test-utils
protected suiteMethod() {}`,
`import { test, suite } from '@sprucelabs/test-utils
protected suiteMethod() {}`
)
}
()
protected includesSuiteWithMultipleImports() {
this.assertMigratedEquals(
`import AbstractSpruceTest, {
test,
assert,
errorAssert,
} from '@sprucelabs/test-utils'`,
`import AbstractSpruceTest, {
test,
suite,
assert,
errorAssert,
} from '@sprucelabs/test-utils'`
)
}
()
protected canMigrateWholeTest() {
const before = this.readTestFile('StaticTest.txt')
const expected = this.readTestFile('InstanceTest.txt')
this.assertMigratedEquals(before, expected)
}
()
protected properlyMigrationsAbstractTests() {
const before = this.readTestFile('AbstractStaticTest.txt')
const expected = this.readTestFile('AbstractInstanceTest.txt')
this.assertMigratedEquals(before, expected)
}
()
protected properlyMigrationsAbstractTests2() {
const before = this.readTestFile('AbstractStaticTest2.txt')
const expected = this.readTestFile('AbstractInstanceTest2.txt')
this.assertMigratedEquals(before, expected)
}
()
protected canMigrateMoreComplexTest() {
const before = this.readTestFile('StaticTest2.txt')
const expected = this.readTestFile('InstanceTest2.txt')
this.assertMigratedEquals(before, expected)
}
()
protected canMigrateAnotherComplexTest() {
const before = this.readTestFile('StaticTest3.txt')
const expected = this.readTestFile('InstanceTest3.txt')
this.assertMigratedEquals(before, expected)
}
()
protected canMigrateAnotherComplexTest2() {
const before = this.readTestFile('StaticTest4.txt')
const expected = this.readTestFile('InstanceTest4.txt')
this.assertMigratedEquals(before, expected)
}
private readTestFile(name: string) {
return diskUtil.readFile(this.resolveTestClassPath(name))
}
private resolveTestClassPath(name: string) {
return this.resolvePath(__dirname, 'support', name)
}
private assertMigratedEquals(contents: string, expected: string) {
const actual = this.migrate(contents)
const cleanedActual = this.cleanString(actual)
const cleanedExpected = this.cleanString(expected)
assert.isTrue(
cleanedActual == cleanedExpected,
`${actual}\n\ndoes not equal\n\n${expected}`
)
}
private cleanString(contents: string) {
return contents.replace(/\s{2,}/g, ' ').trim()
}
private migrate(contents: string) {
return this.migrator.migrate(contents)
}
}