@aws-cdk-testing/cli-integ
Version:
Integration tests for the AWS CDK CLI
68 lines (51 loc) • 2.99 kB
text/typescript
import { promises as fs } from 'fs';
import * as path from 'path';
import { integTest, withTemporaryDirectory, ShellHelper, withPackages, TemporaryDirectoryContext } from '../../lib';
import { typescriptVersionsSync, typescriptVersionsYoungerThanDaysSync } from '../../lib/npm';
['app', 'sample-app'].forEach(template => {
integTest(`typescript init ${template}`, withTemporaryDirectory(withPackages(async (context) => {
const shell = ShellHelper.fromContext(context);
await context.packages.makeCliAvailable();
await shell.shell(['cdk', 'init', '-l', 'typescript', template]);
await shell.shell(['npm', 'prune']);
await shell.shell(['npm', 'ls']); // this will fail if we have unmet peer dependencies
await shell.shell(['npm', 'run', 'build']);
await shell.shell(['npm', 'run', 'test']);
await shell.shell(['cdk', 'synth']);
})));
});
// Same as https://github.com/DefinitelyTyped/DefinitelyTyped?tab=readme-ov-file#support-window
const TYPESCRIPT_VERSION_AGE_DAYS = 2 * 365;
const TYPESCRIPT_VERSIONS = typescriptVersionsYoungerThanDaysSync(TYPESCRIPT_VERSION_AGE_DAYS, typescriptVersionsSync());
/**
* Test our generated code with various versions of TypeScript
*/
TYPESCRIPT_VERSIONS.forEach(tsVersion => {
integTest(`typescript ${tsVersion} init app`, withTemporaryDirectory(withPackages(async (context) => {
const shell = ShellHelper.fromContext(context);
await context.packages.makeCliAvailable();
await shell.shell(['node', '--version']);
await shell.shell(['npm', '--version']);
await shell.shell(['cdk', 'init', '-l', 'typescript', 'app', '--generate-only']);
// Necessary because recent versions of ts-jest require TypeScript>=4.3 but we
// still want to test with older versions as well.
await removeDevDependencies(context);
await shell.shell(['npm', 'install', '--save-dev', `typescript@${tsVersion}`]);
// After we've removed devDependencies we need to re-install ts-node because it's necessary for `cdk synth`
await shell.shell(['npm', 'install', '--save-dev', 'ts-node@^10']);
await shell.shell(['npm', 'install']); // Older versions of npm require this to be a separate step from the one above
await shell.shell(['npx', 'tsc', '--version']);
await shell.shell(['npm', 'prune']);
await shell.shell(['npm', 'ls']); // this will fail if we have unmet peer dependencies
// We just removed the 'jest' dependency so remove the tests as well because they won't compile
await shell.shell(['rm', '-rf', 'test/']);
await shell.shell(['npm', 'run', 'build']);
await shell.shell(['cdk', 'synth']);
})));
});
async function removeDevDependencies(context: TemporaryDirectoryContext) {
const filename = path.join(context.integTestDir, 'package.json');
const pj = JSON.parse(await fs.readFile(filename, { encoding: 'utf-8' }));
delete pj.devDependencies;
await fs.writeFile(filename, JSON.stringify(pj, undefined, 2), { encoding: 'utf-8' });
}