UNPKG

projen

Version:

CDK for software projects

85 lines 11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IntegrationTestBase = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const path_1 = require("path"); const posix_1 = require("path/posix"); const internal_1 = require("./internal"); const component_1 = require("../component"); class IntegrationTestBase extends component_1.Component { static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.cdk.IntegrationTestBase", version: "0.103.12" }; /** * Deploy the integration test and update the snapshot upon success. */ deployTask; /** * Synthesizes the integration test and compares against a local copy (runs during build). */ assertTask; /** * Just update snapshot (without deployment). */ snapshotTask; /** * Temporary directory for each integration test. */ tmpDir; /** * Snapshot output directory. */ snapshotDir; /** * Integration test name. */ name; constructor(project, options) { super(project); const entry = options.entrypoint; const name = options.name ?? (0, path_1.basename)(entry, internal_1.TYPESCRIPT_INTEG_EXT); this.name = name; const dir = (0, path_1.dirname)(entry); const tmpRoot = (0, posix_1.join)(dir, ".tmp"); project.addGitIgnore(tmpRoot); project.addPackageIgnore(tmpRoot); this.tmpDir = (0, posix_1.join)(tmpRoot, `${name}.integ`); this.snapshotDir = (0, posix_1.join)(dir, `${name}.integ.snapshot`); project.addPackageIgnore(this.snapshotDir); this.deployTask = project.addTask(`integ:${name}:deploy`, { description: `deploy integration test '${name}' and capture snapshot`, }); this.snapshotTask = project.addTask(`integ:${name}:snapshot`, { description: `update snapshot for integration test "${name}"`, }); this.assertTask = project.addTask(`integ:${name}:assert`, { description: `assert the snapshot of integration test '${name}'`, execArgs: [ "node", "-e", [ "const [dir, name, task] = process.argv.slice(1);", "const stat = require('fs').statSync(dir, { throwIfNoEntry: false });", "if (!stat || !stat.isDirectory()) {", "console.error(`No snapshot available for integration test '${name}'. Run 'projen ${task}' to capture.`);", "process.exit(1);", "}", ].join(" "), this.snapshotDir, name, this.deployTask.name, ], }); // synth as part of our tests, which means that if outdir changes, anti-tamper will fail project.testTask.spawn(this.assertTask); let snapshotAllTask = project.tasks.tryFind("integ:snapshot-all"); if (!snapshotAllTask) { snapshotAllTask = project.addTask("integ:snapshot-all", { description: "update snapshot for all integration tests", }); } // integ:snapshot-all should snapshot all integration tests, including // this one. snapshotAllTask.spawn(this.snapshotTask); } } exports.IntegrationTestBase = IntegrationTestBase; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdyYXRpb24tdGVzdC1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Nkay9pbnRlZ3JhdGlvbi10ZXN0LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLCtCQUF5QztBQUN6QyxzQ0FBa0M7QUFDbEMseUNBQWtEO0FBQ2xELDRDQUF5QztBQThCekMsTUFBc0IsbUJBQW9CLFNBQVEscUJBQVM7O0lBQ3pEOztPQUVHO0lBQ2EsVUFBVSxDQUFPO0lBRWpDOztPQUVHO0lBQ2EsVUFBVSxDQUFPO0lBRWpDOztPQUVHO0lBQ2EsWUFBWSxDQUFPO0lBRW5DOztPQUVHO0lBQ2dCLE1BQU0sQ0FBUztJQUVsQzs7T0FFRztJQUNnQixXQUFXLENBQVM7SUFFdkM7O09BRUc7SUFDZ0IsSUFBSSxDQUFTO0lBRWhDLFlBQVksT0FBZ0IsRUFBRSxPQUFtQztRQUMvRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBQSxlQUFRLEVBQUMsS0FBSyxFQUFFLCtCQUFvQixDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsTUFBTSxHQUFHLEdBQUcsSUFBQSxjQUFPLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0IsTUFBTSxPQUFPLEdBQUcsSUFBQSxZQUFJLEVBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUIsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWxDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBQSxZQUFJLEVBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxRQUFRLENBQUMsQ0FBQztRQUU3QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUEsWUFBSSxFQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksaUJBQWlCLENBQUMsQ0FBQztRQUN2RCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksU0FBUyxFQUFFO1lBQ3hELFdBQVcsRUFBRSw0QkFBNEIsSUFBSSx3QkFBd0I7U0FDdEUsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxXQUFXLEVBQUU7WUFDNUQsV0FBVyxFQUFFLHlDQUF5QyxJQUFJLEdBQUc7U0FDOUQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxTQUFTLEVBQUU7WUFDeEQsV0FBVyxFQUFFLDRDQUE0QyxJQUFJLEdBQUc7WUFDaEUsUUFBUSxFQUFFO2dCQUNSLE1BQU07Z0JBQ04sSUFBSTtnQkFDSjtvQkFDRSxrREFBa0Q7b0JBQ2xELHNFQUFzRTtvQkFDdEUscUNBQXFDO29CQUNyQywwR0FBMEc7b0JBQzFHLGtCQUFrQjtvQkFDbEIsR0FBRztpQkFDSixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLFdBQVc7Z0JBQ2hCLElBQUk7Z0JBQ0osSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJO2FBQ3JCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsd0ZBQXdGO1FBQ3hGLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV4QyxJQUFJLGVBQWUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNyQixlQUFlLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRTtnQkFDdEQsV0FBVyxFQUFFLDJDQUEyQzthQUN6RCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsc0VBQXNFO1FBQ3RFLFlBQVk7UUFDWixlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMzQyxDQUFDOztBQXhGSCxrREF5RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBiYXNlbmFtZSwgZGlybmFtZSB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGgvcG9zaXhcIjtcbmltcG9ydCB7IFRZUEVTQ1JJUFRfSU5URUdfRVhUIH0gZnJvbSBcIi4vaW50ZXJuYWxcIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCB9IGZyb20gXCIuLi9wcm9qZWN0XCI7XG5pbXBvcnQgdHlwZSB7IFRhc2sgfSBmcm9tIFwiLi4vdGFza1wiO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIEludGVncmF0aW9uVGVzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVncmF0aW9uVGVzdEJhc2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGludGVncmF0aW9uIHRlc3RcbiAgICogQGRlZmF1bHQgLSBEZXJpdmVkIGZyb20gdGhlIGVudHJ5cG9pbnQgZmlsZW5hbWUuXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHBhdGggZnJvbSB0aGUgcHJvamVjdCByb290IGRpcmVjdG9yeSB0byBhIFR5cGVTY3JpcHQgZmlsZSB3aGljaCBjb250YWluc1xuICAgKiB0aGUgaW50ZWdyYXRpb24gdGVzdCBhcHAuXG4gICAqXG4gICAqIFRoaXMgaXMgcmVsYXRpdmUgdG8gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBwcm9qZWN0LlxuICAgKlxuICAgKiBAZXhhbXBsZSBcInRlc3Qvc3ViZGlyL2Zvby5pbnRlZy50c1wiXG4gICAqL1xuICByZWFkb25seSBlbnRyeXBvaW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9mIHRoZSB0c2NvbmZpZy5qc29uIGZpbGUgdG8gdXNlIHdoZW4gcnVubmluZyBpbnRlZ3JhdGlvbiB0ZXN0IGNkayBhcHBzLlxuICAgKi9cbiAgcmVhZG9ubHkgdHNjb25maWdQYXRoOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJbnRlZ3JhdGlvblRlc3RCYXNlIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIERlcGxveSB0aGUgaW50ZWdyYXRpb24gdGVzdCBhbmQgdXBkYXRlIHRoZSBzbmFwc2hvdCB1cG9uIHN1Y2Nlc3MuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVwbG95VGFzazogVGFzaztcblxuICAvKipcbiAgICogU3ludGhlc2l6ZXMgdGhlIGludGVncmF0aW9uIHRlc3QgYW5kIGNvbXBhcmVzIGFnYWluc3QgYSBsb2NhbCBjb3B5IChydW5zIGR1cmluZyBidWlsZCkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXNzZXJ0VGFzazogVGFzaztcblxuICAvKipcbiAgICogSnVzdCB1cGRhdGUgc25hcHNob3QgKHdpdGhvdXQgZGVwbG95bWVudCkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc25hcHNob3RUYXNrOiBUYXNrO1xuXG4gIC8qKlxuICAgKiBUZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBlYWNoIGludGVncmF0aW9uIHRlc3QuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdG1wRGlyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNuYXBzaG90IG91dHB1dCBkaXJlY3RvcnkuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc25hcHNob3REaXI6IHN0cmluZztcblxuICAvKipcbiAgICogSW50ZWdyYXRpb24gdGVzdCBuYW1lLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBJbnRlZ3JhdGlvblRlc3RCYXNlT3B0aW9ucykge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgY29uc3QgZW50cnkgPSBvcHRpb25zLmVudHJ5cG9pbnQ7XG4gICAgY29uc3QgbmFtZSA9IG9wdGlvbnMubmFtZSA/PyBiYXNlbmFtZShlbnRyeSwgVFlQRVNDUklQVF9JTlRFR19FWFQpO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgY29uc3QgZGlyID0gZGlybmFtZShlbnRyeSk7XG5cbiAgICBjb25zdCB0bXBSb290ID0gam9pbihkaXIsIFwiLnRtcFwiKTtcbiAgICBwcm9qZWN0LmFkZEdpdElnbm9yZSh0bXBSb290KTtcbiAgICBwcm9qZWN0LmFkZFBhY2thZ2VJZ25vcmUodG1wUm9vdCk7XG5cbiAgICB0aGlzLnRtcERpciA9IGpvaW4odG1wUm9vdCwgYCR7bmFtZX0uaW50ZWdgKTtcblxuICAgIHRoaXMuc25hcHNob3REaXIgPSBqb2luKGRpciwgYCR7bmFtZX0uaW50ZWcuc25hcHNob3RgKTtcbiAgICBwcm9qZWN0LmFkZFBhY2thZ2VJZ25vcmUodGhpcy5zbmFwc2hvdERpcik7XG5cbiAgICB0aGlzLmRlcGxveVRhc2sgPSBwcm9qZWN0LmFkZFRhc2soYGludGVnOiR7bmFtZX06ZGVwbG95YCwge1xuICAgICAgZGVzY3JpcHRpb246IGBkZXBsb3kgaW50ZWdyYXRpb24gdGVzdCAnJHtuYW1lfScgYW5kIGNhcHR1cmUgc25hcHNob3RgLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zbmFwc2hvdFRhc2sgPSBwcm9qZWN0LmFkZFRhc2soYGludGVnOiR7bmFtZX06c25hcHNob3RgLCB7XG4gICAgICBkZXNjcmlwdGlvbjogYHVwZGF0ZSBzbmFwc2hvdCBmb3IgaW50ZWdyYXRpb24gdGVzdCBcIiR7bmFtZX1cImAsXG4gICAgfSk7XG5cbiAgICB0aGlzLmFzc2VydFRhc2sgPSBwcm9qZWN0LmFkZFRhc2soYGludGVnOiR7bmFtZX06YXNzZXJ0YCwge1xuICAgICAgZGVzY3JpcHRpb246IGBhc3NlcnQgdGhlIHNuYXBzaG90IG9mIGludGVncmF0aW9uIHRlc3QgJyR7bmFtZX0nYCxcbiAgICAgIGV4ZWNBcmdzOiBbXG4gICAgICAgIFwibm9kZVwiLFxuICAgICAgICBcIi1lXCIsXG4gICAgICAgIFtcbiAgICAgICAgICBcImNvbnN0IFtkaXIsIG5hbWUsIHRhc2tdID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDEpO1wiLFxuICAgICAgICAgIFwiY29uc3Qgc3RhdCA9IHJlcXVpcmUoJ2ZzJykuc3RhdFN5bmMoZGlyLCB7IHRocm93SWZOb0VudHJ5OiBmYWxzZSB9KTtcIixcbiAgICAgICAgICBcImlmICghc3RhdCB8fCAhc3RhdC5pc0RpcmVjdG9yeSgpKSB7XCIsXG4gICAgICAgICAgXCJjb25zb2xlLmVycm9yKGBObyBzbmFwc2hvdCBhdmFpbGFibGUgZm9yIGludGVncmF0aW9uIHRlc3QgJyR7bmFtZX0nLiBSdW4gJ3Byb2plbiAke3Rhc2t9JyB0byBjYXB0dXJlLmApO1wiLFxuICAgICAgICAgIFwicHJvY2Vzcy5leGl0KDEpO1wiLFxuICAgICAgICAgIFwifVwiLFxuICAgICAgICBdLmpvaW4oXCIgXCIpLFxuICAgICAgICB0aGlzLnNuYXBzaG90RGlyLFxuICAgICAgICBuYW1lLFxuICAgICAgICB0aGlzLmRlcGxveVRhc2submFtZSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyBzeW50aCBhcyBwYXJ0IG9mIG91ciB0ZXN0cywgd2hpY2ggbWVhbnMgdGhhdCBpZiBvdXRkaXIgY2hhbmdlcywgYW50aS10YW1wZXIgd2lsbCBmYWlsXG4gICAgcHJvamVjdC50ZXN0VGFzay5zcGF3bih0aGlzLmFzc2VydFRhc2spO1xuXG4gICAgbGV0IHNuYXBzaG90QWxsVGFzayA9IHByb2plY3QudGFza3MudHJ5RmluZChcImludGVnOnNuYXBzaG90LWFsbFwiKTtcbiAgICBpZiAoIXNuYXBzaG90QWxsVGFzaykge1xuICAgICAgc25hcHNob3RBbGxUYXNrID0gcHJvamVjdC5hZGRUYXNrKFwiaW50ZWc6c25hcHNob3QtYWxsXCIsIHtcbiAgICAgICAgZGVzY3JpcHRpb246IFwidXBkYXRlIHNuYXBzaG90IGZvciBhbGwgaW50ZWdyYXRpb24gdGVzdHNcIixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGludGVnOnNuYXBzaG90LWFsbCBzaG91bGQgc25hcHNob3QgYWxsIGludGVncmF0aW9uIHRlc3RzLCBpbmNsdWRpbmdcbiAgICAvLyB0aGlzIG9uZS5cbiAgICBzbmFwc2hvdEFsbFRhc2suc3Bhd24odGhpcy5zbmFwc2hvdFRhc2spO1xuICB9XG59XG4iXX0=