stackpress
Version:
Incept is a content management framework.
54 lines (53 loc) • 1.93 kB
JavaScript
import { sequence } from '../../helpers.js';
import generateActions from './actions.js';
import generateEvents from './events.js';
export default function generate(directory, registry) {
generateActions(directory, registry);
generateEvents(directory, registry);
for (const model of registry.model.values()) {
const source = directory.createSourceFile(`${model.name}/tests/index.ts`, '', { overwrite: true });
source.addImportDeclaration({
isTypeOnly: true,
moduleSpecifier: '@stackpress/ingest',
namedImports: ['HttpServer']
});
source.addImportDeclaration({
moduleSpecifier: './actions.js',
defaultImport: 'actions'
});
source.addImportDeclaration({
moduleSpecifier: './events.js',
defaultImport: 'events'
});
source.addFunction({
isDefaultExport: true,
name: 'tests',
parameters: [{ name: 'server', type: 'HttpServer' }],
statements: (`
actions(server.plugin('database'));
events(server);
`)
});
}
const source = directory.createSourceFile('tests.ts', '', { overwrite: true });
source.addImportDeclaration({
isTypeOnly: true,
moduleSpecifier: '@stackpress/ingest',
namedImports: ['HttpServer']
});
for (const model of registry.model.values()) {
source.addImportDeclaration({
moduleSpecifier: `./${model.name}/tests/index.js`,
defaultImport: `${model.camel}Tests`
});
}
const models = Array.from(registry.model.values());
const order = sequence(models);
source.addFunction({
isDefaultExport: true,
name: 'tests',
parameters: [{ name: 'server', type: 'HttpServer' }],
statements: order.reverse().map(model => `${model.camel}Tests(server);`)
});
}
;