@sprucelabs/spruce-cli
Version:
Command line interface for building Spruce skills.
107 lines (82 loc) • 3.54 kB
text/typescript
import {
CORE_NAMESPACE,
CORE_SCHEMA_VERSION,
diskUtil,
} from '@sprucelabs/spruce-skill-utils'
import { test, assert } from '@sprucelabs/test-utils'
import AbstractSchemaTest from '../../../tests/AbstractSchemaTest'
import testUtil from '../../../tests/utilities/test.utility'
export default class HandlesRelatedSchemasTest extends AbstractSchemaTest {
()
protected static async relatedSchemasGeneratesValidFiles() {
const { syncResults: results } = await this.installCopyAndSync()
assert.isUndefined(results.errors)
testUtil.assertFileByNameInGeneratedFiles(
/testPerson\.schema/,
results.files
)
testUtil.assertFileByNameInGeneratedFiles(/pet\.schema/, results.files)
testUtil.assertFileByNameInGeneratedFiles(
/nested-schema\.schema/,
results.files
)
await this.assertValidActionResponseFiles(results)
}
()
protected static async nestedSchemasInDynamicFields() {
await this.installSchemaFeature('schemas')
const schemasDir = this.resolvePath('src', 'schemas')
await diskUtil.copyDir(
this.resolveTestPath('dynamic_key_schemas'),
schemasDir
)
const results = await this.Action('schema', 'sync').execute({})
const typesPath = this.resolveHashSprucePath(
'schemas',
'schemas.types.ts'
)
const typesContent = diskUtil.readFile(typesPath)
assert.doesInclude(
typesContent,
"[fullyQualifiedEventName:string]: { id: 'eventSignature', values: SpruceSchemas.TestingSchemas.v2020_07_22.EventSignature } | { id: 'eventSignature2', values: SpruceSchemas.TestingSchemas.v2020_07_22.EventSignature2 }"
)
await this.Service('typeChecker').check(typesPath)
const schemaMatch = testUtil.assertFileByNameInGeneratedFiles(
'mercuryContract.schema.ts',
results.files
)
await this.Service('typeChecker').check(schemaMatch)
}
()
protected static async generatesCoreSchemasFirstSoSchemasCanRelateToThem() {
const { syncResults } = await this.installCopyAndSync()
assert.isFalsy(syncResults.errors)
assert.isTruthy(syncResults.files)
testUtil.assertCountsByAction(syncResults.files, {
generated: syncResults.files.length,
updated: 0,
skipped: 0,
})
}
()
protected static async makesSureMixinSchemaFieldsDontCopySchemaToLocal() {
const { syncResults } = await this.installCopyAndSync()
assert.isFalsy(syncResults.errors)
assert.isTruthy(syncResults.files)
const matches = syncResults.files.filter(
(f) => f.name === 'skillCreator.schema.ts'
)
assert.isLength(matches, 1)
assert.doesInclude(matches[0].path, CORE_SCHEMA_VERSION.dirValue)
assert.doesInclude(matches[0].path, CORE_NAMESPACE.toLowerCase())
assert.doesNotInclude(matches[0].path, 'testing')
}
private static async installCopyAndSync(testDir = 'related_schemas') {
const cli = await this.installSchemaFeature('schemas')
const source = this.resolveTestPath(testDir)
const destination = this.resolvePath('src/schemas')
await diskUtil.copyDir(source, destination)
const syncResults = await this.Action('schema', 'sync').execute({})
return { cli, syncResults }
}
}