UNPKG

cdk-multi-profile-plugin

Version:

Adds multi profile/account, mfa and aws sso support to cdk apps

129 lines 18.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const utils_1 = require("../utils"); const profile_mapper_1 = require("../profile-mapper"); // These tests sets ensure the necessary data sets for the following tests. describe('Ensure testset', () => { describe('Profiles that must be configured in package.json', () => { let profiles; beforeEach(() => { profiles = new profile_mapper_1.JsonFileProfileMapper({ workingDirectory: process.cwd(), filename: 'package.json', }).resolve(); }); it('should contain a mapping for account 123', () => { expect(profiles['123']).toBe('default123'); }); it('should contain a mapping for account 456', () => { expect(profiles['456']).toBe('default123'); }); it('should contain a mapping for account 435', () => { expect(profiles['435']).toBe('default435'); }); it('should contain a mapping for account 765', () => { expect(profiles['765']).toBe('default765'); }); }); describe('Profiles that must be configured in cdkmultiprofileplugin.json', () => { let profiles; beforeEach(() => { profiles = new profile_mapper_1.JsonFileProfileMapper({ workingDirectory: process.cwd(), filename: 'cdkmultiprofileplugin.json', }).resolve(); }); it('should contain a mapping for account 678', () => { expect(profiles['678']).toBe('project678'); }); it('should contain a mapping for account 345', () => { expect(profiles['345']).toBe('project345'); }); it('should contain a mapping for account 435', () => { expect(profiles['435']).toBe('project435'); }); it('should contain a mapping for account 765', () => { expect(profiles['765']).toBe('project765'); }); }); describe('Profiles that must be configured in global configuration', () => { let profiles; beforeEach(() => { profiles = new profile_mapper_1.JsonFileProfileMapper({ workingDirectory: `${process.cwd()}/src/__tests__/`, filename: 'global.plugin.config.json', }).resolve(); }); it('should contain a mapping for account 345', () => { expect(profiles['345']).toBe('global345'); }); it('should contain a mapping for account 765', () => { expect(profiles['765']).toBe('global765'); }); it('should contain a mapping for account 980', () => { expect(profiles['980']).toBe('global980'); }); }); }); describe('Should resolve profile name from package.json', () => { let profiles; beforeEach(() => { profiles = (0, utils_1.readProfiles)(); }); it('should map account 123 to profile default123', () => { expect(profiles['123']).toBe('default123'); }); it('should map account 456 to profile default456', () => { expect(profiles['456']).toBe('default123'); }); }); describe('Project local cdkmultiprofileplugin.json', () => { let profiles; beforeEach(() => { profiles = (0, utils_1.readProfiles)(); }); it('should still map account 123 to profile default123', () => { expect(profiles['123']).toBe('default123'); }); it('should still map account 456 to profile default123', () => { expect(profiles['456']).toBe('default123'); }); it('should map account 678 to profile default678', () => { expect(profiles['678']).toBe('project678'); }); it('cdkmultiprofileplugin.json should have precedence over package.json', () => { expect(profiles['435']).toBe('project435'); }); }); describe('Global configuration', () => { let profiles; beforeEach(() => { process.env[profile_mapper_1.EnvironmentAwareGlobalProfileMapper.environmentVariableName] = `${process.cwd()}/src/__tests__/global.plugin.config.json`; profiles = (0, utils_1.readProfiles)(); }); it('should map account number 980 to profile global980', () => { expect(profiles['980']).toBe('global980'); }); it('should have precedence for accountnumber 765 mapped in package.json or project local cdkmultiprofileplugin.json', () => { expect(profiles['765']).toBe('global765'); }); it('should be undefined if account is not mapped in global, project or package.json scope', () => { expect(profiles['999']).toBeUndefined(); }); it('should override a mapping configured only in package.json', () => { expect(profiles['345']).toBe('global345'); }); }); describe('When an invalid json file format is deteced', () => { it('should return an empty profile mapping when json file is not correctly formatted', () => { const consoleSpy = jest.spyOn(console, 'log').mockImplementation(); const profiles = new profile_mapper_1.JsonFileProfileMapper({ workingDirectory: process.cwd(), filename: 'README.md', }).resolve(); expect(profiles).toEqual({}); expect(consoleSpy).toBeCalledWith('Failed to parse file README.md: ', 'Unexpected token # in JSON at position 0'); consoleSpy.mockRestore(); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlY2VkZW5jZS1tYXBwZXIudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vcHJlY2VkZW5jZS1tYXBwZXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG9DQUF3QztBQUN4QyxzREFHMkI7QUFFM0IsMkVBQTJFO0FBQzNFLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7SUFDOUIsUUFBUSxDQUFDLGtEQUFrRCxFQUFFLEdBQUcsRUFBRTtRQUNoRSxJQUFJLFFBQW1DLENBQUM7UUFDeEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLFFBQVEsR0FBRyxJQUFJLHNDQUFxQixDQUFDO2dCQUNuQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFO2dCQUMvQixRQUFRLEVBQUUsY0FBYzthQUN6QixDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwQ0FBMEMsRUFBRSxHQUFHLEVBQUU7WUFDbEQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwQ0FBMEMsRUFBRSxHQUFHLEVBQUU7WUFDbEQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwQ0FBMEMsRUFBRSxHQUFHLEVBQUU7WUFDbEQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwQ0FBMEMsRUFBRSxHQUFHLEVBQUU7WUFDbEQsTUFBTSxDQUFDLFFBQVEs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LE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDL0IsUUFBUSxFQUFFLFdBQVc7U0FDdEIsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QixNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsY0FBYyxDQUMvQixrQ0FBa0MsRUFDbEMsMENBQTBDLENBQzNDLENBQUM7UUFDRixVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDM0IsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWRQcm9maWxlcyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7XG4gIEVudmlyb25tZW50QXdhcmVHbG9iYWxQcm9maWxlTWFwcGVyLFxuICBKc29uRmlsZVByb2ZpbGVNYXBwZXIsXG59IGZyb20gJy4uL3Byb2ZpbGUtbWFwcGVyJztcblxuLy8gVGhlc2UgdGVzdHMgc2V0cyBlbnN1cmUgdGhlIG5lY2Vzc2FyeSBkYXRhIHNldHMgZm9yIHRoZSBmb2xsb3dpbmcgdGVzdHMuXG5kZXNjcmliZSgnRW5zdXJlIHRlc3RzZXQnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdQcm9maWxlcyB0aGF0IG11c3QgYmUgY29uZmlndXJlZCBpbiBwYWNrYWdlLmpzb24nLCAoKSA9PiB7XG4gICAgbGV0IHByb2ZpbGVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgcHJvZmlsZXMgPSBuZXcgSnNvbkZpbGVQcm9maWxlTWFwcGVyKHtcbiAgICAgICAgd29ya2luZ0RpcmVjdG9yeTogcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgZmlsZW5hbWU6ICdwYWNrYWdlLmpzb24nLFxuICAgICAgfSkucmVzb2x2ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb250YWluIGEgbWFwcGluZyBmb3IgYWNjb3VudCAxMjMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QocHJvZmlsZXNbJzEyMyddKS50b0JlKCdkZWZhdWx0MTIzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnRhaW4gYSBtYXBwaW5nIGZvciBhY2NvdW50IDQ1NicsICgpID0+IHtcbiAgICAgIGV4cGVjdChwcm9maWxlc1snNDU2J10pLnRvQmUoJ2RlZmF1bHQxMjMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udGFpbiBhIG1hcHBpbmcgZm9yIGFjY291bnQgNDM1JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHByb2ZpbGVzWyc0MzUnXSkudG9CZSgnZGVmYXVsdDQzNScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb250YWluIGEgbWFwcGluZyBmb3IgYWNjb3VudCA3NjUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QocHJvZmlsZXNbJzc2NSddKS50b0JlKCdkZWZhdWx0NzY1Jyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdQcm9maWxlcyB0aGF0IG11c3QgYmUgY29uZmlndXJlZCBpbiBjZGttdWx0aXByb2ZpbGVwbHVnaW4uanNvbicsICgpID0+IHtcbiAgICBsZXQgcHJvZmlsZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBwcm9maWxlcyA9IG5ldyBKc29uRmlsZVByb2ZpbGVNYXBwZXIoe1xuICAgICAgICB3b3JraW5nRGlyZWN0b3J5OiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICBmaWxlbmFtZTogJ2Nka211bHRpcHJvZmlsZXBsdWdpbi5qc29uJyxcbiAgICAgIH0pLnJlc29sdmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udGFpbiBhIG1hcHBpbmcgZm9yIGFjY291bnQgNjc4JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHByb2ZpbGVzWyc2NzgnXSkudG9CZSgncHJvamVjdDY3OCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb250YWluIGEgbWFwcGluZyBmb3IgYWNjb3VudCAzNDUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QocHJvZmlsZXNbJzM0NSddKS50b0JlKCdwcm9qZWN0MzQ1Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnRhaW4gYSBtYXBwaW5nIGZvciBhY2NvdW50IDQzNScsICgpID0+IHtcbiAgICAgIGV4cGVjdChwcm9maWxlc1snNDM1J10pLnRvQmUoJ3Byb2plY3Q0MzUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udGFpbiBhIG1hcHBpbmcgZm9yIGFjY291bnQgNzY1JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHByb2ZpbGVzWyc3NjUnXSkudG9CZSgncHJvamVjdDc2NScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUHJvZmlsZXMgdGhhdCBtdXN0IGJlIGNvbmZpZ3VyZWQgaW4gZ2xvYmFsIGNvbmZpZ3VyYXRpb24nLCAoKSA9PiB7XG4gICAgbGV0IHByb2ZpbGVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgcHJvZmlsZXMgPSBuZXcgSnNvbkZpbGVQcm9maWxlTWFwcGVyKHtcbiAgICAgICAgd29ya2luZ0RpcmVjdG9yeTogYCR7cHJvY2Vzcy5jd2QoKX0vc3JjL19fdGVzdHNfXy9gLFxuICAgICAgICBmaWxlbmFtZTogJ2dsb2JhbC5wbHVnaW4uY29uZmlnLmpzb24nLFxuICAgICAgfSkucmVzb2x2ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb250YWluIGEgbWFwcGluZyBmb3IgYWNjb3VudCAzNDUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QocHJvZmlsZXNbJzM0NSddKS50b0JlKCdnbG9iYWwzNDUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udGFpbiBhIG1hcHBpbmcgZm9yIGFjY291bnQgNzY1JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHByb2ZpbGVzWyc3NjUnXSkudG9CZSgnZ2xvYmFsNzY1Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnRhaW4gYSBtYXBwaW5nIGZvciBhY2NvdW50IDk4MCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChwcm9maWxlc1snOTgwJ10pLnRvQmUoJ2dsb2JhbDk4MCcpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnU2hvdWxkIHJlc29sdmUgcHJvZmlsZSBuYW1lIGZyb20gcGFja2FnZS5qc29uJywgKCkgPT4ge1xuICBsZXQgcHJvZmlsZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHByb2ZpbGVzID0gcmVhZFByb2ZpbGVzKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbWFwIGFjY291bnQgMTIzIHRvIHByb2ZpbGUgZGVmYXVsdDEyMycsICgpID0+IHtcbiAgICBleHBlY3QocHJvZmlsZXNbJzEyMyddKS50b0JlKCdkZWZhdWx0MTIzJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbWFwIGFjY291bnQgNDU2IHRvIHByb2ZpbGUgZGVmYXVsdDQ1NicsICgpID0+IHtcbiAgICBleHBlY3QocHJvZmlsZXNbJzQ1NiddKS50b0JlKCdkZWZhdWx0MTIzJyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdQcm9qZWN0IGxvY2FsIGNka211bHRpcHJvZmlsZXBsdWdpbi5qc29uJywgKCkgPT4ge1xuICBsZXQgcHJvZmlsZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHByb2ZpbGVzID0gcmVhZFByb2ZpbGVzKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc3RpbGwgbWFwIGFjY291bnQgMTIzIHRvIHByb2ZpbGUgZGVmYXVsdDEyMycsICgpID0+IHtcbiAgICBleHBlY3QocHJvZmlsZXNbJzEyMyddKS50b0JlKCdkZWZhdWx0MTIzJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc3RpbGwgbWFwIGFjY291bnQgNDU2IHRvIHByb2ZpbGUgZGVmYXVsdDEyMycsICgpID0+IHtcbiAgICBleHBlY3QocHJvZmlsZXNbJzQ1NiddKS50b0JlKCdkZWZhdWx0MTIzJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbWFwIGFjY291bnQgNjc4IHRvIHByb2ZpbGUgZGVmYXVsdDY3OCcsICgpID0+IHtcbiAgICBleHBlY3QocHJvZmlsZXNbJzY3OCddKS50b0JlKCdwcm9qZWN0Njc4Jyk7XG4gIH0pO1xuICBpdCgnY2RrbXVsdGlwcm9maWxlcGx1Z2luLmpzb24gc2hvdWxkIGhhdmUgcHJlY2VkZW5jZSBvdmVyIHBhY2thZ2UuanNvbicsICgpID0+IHtcbiAgICBleHBlY3QocHJvZmlsZXNbJzQzNSddKS50b0JlKCdwcm9qZWN0NDM1Jyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdHbG9iYWwgY29uZmlndXJhdGlvbicsICgpID0+IHtcbiAgbGV0IHByb2ZpbGVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBwcm9jZXNzLmVudltcbiAgICAgIEVudmlyb25tZW50QXdhcmVHbG9iYWxQcm9maWxlTWFwcGVyLmVudmlyb25tZW50VmFyaWFibGVOYW1lXG4gICAgXSA9IGAke3Byb2Nlc3MuY3dkKCl9L3NyYy9fX3Rlc3RzX18vZ2xvYmFsLnBsdWdpbi5jb25maWcuanNvbmA7XG4gICAgcHJvZmlsZXMgPSByZWFkUHJvZmlsZXMoKTtcbiAgfSk7XG4gIGl0KCdzaG91bGQgbWFwIGFjY291bnQgbnVtYmVyIDk4MCB0byBwcm9maWxlIGdsb2JhbDk4MCcsICgpID0+IHtcbiAgICBleHBlY3QocHJvZmlsZXNbJzk4MCddKS50b0JlKCdnbG9iYWw5ODAnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBoYXZlIHByZWNlZGVuY2UgZm9yIGFjY291bnRudW1iZXIgNzY1IG1hcHBlZCBpbiBwYWNrYWdlLmpzb24gb3IgcHJvamVjdCBsb2NhbCBjZGttdWx0aXByb2ZpbGVwbHVnaW4uanNvbicsICgpID0+IHtcbiAgICBleHBlY3QocHJvZmlsZXNbJzc2NSddKS50b0JlKCdnbG9iYWw3NjUnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBiZSB1bmRlZmluZWQgaWYgYWNjb3VudCBpcyBub3QgbWFwcGVkIGluIGdsb2JhbCwgcHJvamVjdCBvciBwYWNrYWdlLmpzb24gc2NvcGUnLCAoKSA9PiB7XG4gICAgZXhwZWN0KHByb2ZpbGVzWyc5OTknXSkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG92ZXJyaWRlIGEgbWFwcGluZyBjb25maWd1cmVkIG9ubHkgaW4gcGFja2FnZS5qc29uJywgKCkgPT4ge1xuICAgIGV4cGVjdChwcm9maWxlc1snMzQ1J10pLnRvQmUoJ2dsb2JhbDM0NScpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnV2hlbiBhbiBpbnZhbGlkIGpzb24gZmlsZSBmb3JtYXQgaXMgZGV0ZWNlZCcsICgpID0+IHtcbiAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgcHJvZmlsZSBtYXBwaW5nIHdoZW4ganNvbiBmaWxlIGlzIG5vdCBjb3JyZWN0bHkgZm9ybWF0dGVkJywgKCkgPT4ge1xuICAgIGNvbnN0IGNvbnNvbGVTcHkgPSBqZXN0LnNweU9uKGNvbnNvbGUsICdsb2cnKS5tb2NrSW1wbGVtZW50YXRpb24oKTtcbiAgICBjb25zdCBwcm9maWxlcyA9IG5ldyBKc29uRmlsZVByb2ZpbGVNYXBwZXIoe1xuICAgICAgd29ya2luZ0RpcmVjdG9yeTogcHJvY2Vzcy5jd2QoKSxcbiAgICAgIGZpbGVuYW1lOiAnUkVBRE1FLm1kJyxcbiAgICB9KS5yZXNvbHZlKCk7XG4gICAgZXhwZWN0KHByb2ZpbGVzKS50b0VxdWFsKHt9KTtcbiAgICBleHBlY3QoY29uc29sZVNweSkudG9CZUNhbGxlZFdpdGgoXG4gICAgICAnRmFpbGVkIHRvIHBhcnNlIGZpbGUgUkVBRE1FLm1kOiAnLFxuICAgICAgJ1VuZXhwZWN0ZWQgdG9rZW4gIyBpbiBKU09OIGF0IHBvc2l0aW9uIDAnLFxuICAgICk7XG4gICAgY29uc29sZVNweS5tb2NrUmVzdG9yZSgpO1xuICB9KTtcbn0pO1xuIl19