UNPKG

aws-cdk

Version:

CDK Toolkit, the command line tool for CDK apps

93 lines 12.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const evaluate_cloudformation_template_1 = require("../../lib/api/evaluate-cloudformation-template"); const mock_sdk_1 = require("../util/mock-sdk"); const listStackResources = jest.fn(); const listExports = jest.fn(); const sdk = new mock_sdk_1.MockSdk(); sdk.stubCloudFormation({ listExports, listStackResources, }); const createEvaluateCloudFormationTemplate = (template) => new evaluate_cloudformation_template_1.EvaluateCloudFormationTemplate({ template, parameters: {}, account: '0123456789', region: 'ap-south-east-2', partition: 'aws', urlSuffix: (region) => sdk.getEndpointSuffix(region), sdk, stackName: 'test-stack', }); describe('evaluateCfnExpression', () => { describe('simple literal expressions', () => { const template = {}; const evaluateCfnTemplate = createEvaluateCloudFormationTemplate(template); test('resolves Fn::Join correctly', async () => { // WHEN const result = await evaluateCfnTemplate.evaluateCfnExpression({ 'Fn::Join': [':', ['a', 'b', 'c']], }); // THEN expect(result).toEqual('a:b:c'); }); test('resolves Fn::Split correctly', async () => { // WHEN const result = await evaluateCfnTemplate.evaluateCfnExpression({ 'Fn::Split': ['|', 'a|b|c'] }); // THEN expect(result).toEqual(['a', 'b', 'c']); }); test('resolves Fn::Select correctly', async () => { // WHEN const result = await evaluateCfnTemplate.evaluateCfnExpression({ 'Fn::Select': ['1', ['apples', 'grapes', 'oranges', 'mangoes']] }); // THEN expect(result).toEqual('grapes'); }); test('resolves Fn::Sub correctly', async () => { // WHEN const result = await evaluateCfnTemplate.evaluateCfnExpression({ 'Fn::Sub': ['Testing Fn::Sub Foo=${Foo} Bar=${Bar}', { Foo: 'testing', Bar: 1 }] }); // THEN expect(result).toEqual('Testing Fn::Sub Foo=testing Bar=1'); }); }); describe('resolving Fn::ImportValue', () => { const template = {}; const evaluateCfnTemplate = createEvaluateCloudFormationTemplate(template); const createMockExport = (num) => ({ ExportingStackId: `test-exporting-stack-id-${num}`, Name: `test-name-${num}`, Value: `test-value-${num}`, }); beforeEach(async () => { listExports.mockReset(); listExports .mockReturnValueOnce({ Exports: [ createMockExport(1), createMockExport(2), createMockExport(3), ], NextToken: 'next-token-1', }) .mockReturnValueOnce({ Exports: [ createMockExport(4), createMockExport(5), createMockExport(6), ], NextToken: undefined, }); }); test('resolves Fn::ImportValue using lookup', async () => { const result = await evaluateCfnTemplate.evaluateCfnExpression({ 'Fn::ImportValue': 'test-name-5' }); expect(result).toEqual('test-value-5'); }); test('throws error when Fn::ImportValue cannot be resolved', async () => { const evaluate = () => evaluateCfnTemplate.evaluateCfnExpression({ 'Fn::ImportValue': 'blah', }); await expect(evaluate).rejects.toBeInstanceOf(evaluate_cloudformation_template_1.CfnEvaluationException); }); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGUtY2xvdWRmb3JtYXRpb24tdGVtcGxhdGUudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImV2YWx1YXRlLWNsb3VkZm9ybWF0aW9uLXRlbXBsYXRlLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxR0FJd0Q7QUFDeEQsK0NBQTJDO0FBRTNDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3JDLE1BQU0sV0FBVyxHQUEyRixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEgsTUFBTSxHQUFHLEdBQUcsSUFBSSxrQkFBTyxFQUFFLENBQUM7QUFDMUIsR0FBRyxDQUFDLGtCQUFrQixDQUFDO0lBQ3JCLFdBQVc7SUFDWCxrQkFBa0I7Q0FDbkIsQ0FBQyxDQUFDO0FBRUgsTUFBTSxvQ0FBb0MsR0FBRyxDQUFDLFFBQWtCLEVBQUUsRUFBRSxDQUFDLElBQUksaUVBQThCLENBQUM7SUFDdEcsUUFBUTtJQUNSLFVBQVUsRUFBRSxFQUFFO0lBQ2QsT0FBTyxFQUFFLFlBQVk7SUFDckIsTUFBTSxFQUFFLGlCQUFpQjtJQUN6QixTQUFTLEVBQUUsS0FBSztJQUNoQixTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7SUFDcEQsR0FBRztJQUNILFNBQVMsRUFBRSxZQUFZO0NBQ3hCLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUU7SUFDckMsUUFBUSxDQUFDLDRCQUE0QixFQUFFLEdBQUcsRUFBRTtRQUMxQyxNQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7UUFDOUIsTUFBTSxtQkFBbUIsR0FBRyxvQ0FBb0MsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUzRSxJQUFJLENBQUMsNkJBQTZCLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDN0MsT0FBTztZQUNQLE1BQU0sTUFBTSxHQUFHLE1B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SUFBSSxFQUFFO1lBQ3ZELE1BQU0sTUFBTSxHQUFHLE1BQU0sbUJBQW1CLENBQUMscUJBQXFCLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQ3JHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsc0RBQXNELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdEUsTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLENBQUM7Z0JBQy9ELGlCQUFpQixFQUFFLE1BQU07YUFDMUIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyx5REFBc0IsQ0FBQyxDQUFDO1FBQ3hFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENmbkV2YWx1YXRpb25FeGNlcHRpb24sXG4gIEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSxcbiAgVGVtcGxhdGUsXG59IGZyb20gJy4uLy4uL2xpYi9hcGkvZXZhbHVhdGUtY2xvdWRmb3JtYXRpb24tdGVtcGxhdGUnO1xuaW1wb3J0IHsgTW9ja1NkayB9IGZyb20gJy4uL3V0aWwvbW9jay1zZGsnO1xuXG5jb25zdCBsaXN0U3RhY2tSZXNvdXJjZXMgPSBqZXN0LmZuKCk7XG5jb25zdCBsaXN0RXhwb3J0czogamVzdC5Nb2NrPEFXUy5DbG91ZEZvcm1hdGlvbi5MaXN0RXhwb3J0c091dHB1dCwgQVdTLkNsb3VkRm9ybWF0aW9uLkxpc3RFeHBvcnRzSW5wdXRbXT4gPSBqZXN0LmZuKCk7XG5jb25zdCBzZGsgPSBuZXcgTW9ja1NkaygpO1xuc2RrLnN0dWJDbG91ZEZvcm1hdGlvbih7XG4gIGxpc3RFeHBvcnRzLFxuICBsaXN0U3RhY2tSZXNvdXJjZXMsXG59KTtcblxuY29uc3QgY3JlYXRlRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlID0gKHRlbXBsYXRlOiBUZW1wbGF0ZSkgPT4gbmV3IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSh7XG4gIHRlbXBsYXRlLFxuICBwYXJhbWV0ZXJzOiB7fSxcbiAgYWNjb3VudDogJzAxMjM0NTY3ODknLFxuICByZWdpb246ICdhcC1zb3V0aC1lYXN0LTInLFxuICBwYXJ0aXRpb246ICdhd3MnLFxuICB1cmxTdWZmaXg6IChyZWdpb24pID0+IHNkay5nZXRFbmRwb2ludFN1ZmZpeChyZWdpb24pLFxuICBzZGssXG4gIHN0YWNrTmFtZTogJ3Rlc3Qtc3RhY2snLFxufSk7XG5cbmRlc2NyaWJlKCdldmFsdWF0ZUNmbkV4cHJlc3Npb24nLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdzaW1wbGUgbGl0ZXJhbCBleHByZXNzaW9ucycsICgpID0+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSB7fTtcbiAgICBjb25zdCBldmFsdWF0ZUNmblRlbXBsYXRlID0gY3JlYXRlRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlKHRlbXBsYXRlKTtcblxuICAgIHRlc3QoJ3Jlc29sdmVzIEZuOjpKb2luIGNvcnJlY3RseScsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFdIRU5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHtcbiAgICAgICAgJ0ZuOjpKb2luJzogWyc6JywgWydhJywgJ2InLCAnYyddXSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKCdhOmI6YycpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmVzb2x2ZXMgRm46OlNwbGl0IGNvcnJlY3RseScsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFdIRU5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHsgJ0ZuOjpTcGxpdCc6IFsnfCcsICdhfGJ8YyddIH0pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFsnYScsICdiJywgJ2MnXSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdyZXNvbHZlcyBGbjo6U2VsZWN0IGNvcnJlY3RseScsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFdIRU5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHsgJ0ZuOjpTZWxlY3QnOiBbJzEnLCBbJ2FwcGxlcycsICdncmFwZXMnLCAnb3JhbmdlcycsICdtYW5nb2VzJ11dIH0pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKCdncmFwZXMnKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3Jlc29sdmVzIEZuOjpTdWIgY29ycmVjdGx5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gV0hFTlxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oeyAnRm46OlN1Yic6IFsnVGVzdGluZyBGbjo6U3ViIEZvbz0ke0Zvb30gQmFyPSR7QmFyfScsIHsgRm9vOiAndGVzdGluZycsIEJhcjogMSB9XSB9KTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCgnVGVzdGluZyBGbjo6U3ViIEZvbz10ZXN0aW5nIEJhcj0xJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZXNvbHZpbmcgRm46OkltcG9ydFZhbHVlJywgKCkgPT4ge1xuICAgIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHt9O1xuICAgIGNvbnN0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUgPSBjcmVhdGVFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUodGVtcGxhdGUpO1xuXG4gICAgY29uc3QgY3JlYXRlTW9ja0V4cG9ydCA9IChudW06IG51bWJlcikgPT4gKHtcbiAgICAgIEV4cG9ydGluZ1N0YWNrSWQ6IGB0ZXN0LWV4cG9ydGluZy1zdGFjay1pZC0ke251bX1gLFxuICAgICAgTmFtZTogYHRlc3QtbmFtZS0ke251bX1gLFxuICAgICAgVmFsdWU6IGB0ZXN0LXZhbHVlLSR7bnVtfWAsXG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKGFzeW5jICgpID0+IHtcbiAgICAgIGxpc3RFeHBvcnRzLm1vY2tSZXNldCgpO1xuICAgICAgbGlzdEV4cG9ydHNcbiAgICAgICAgLm1vY2tSZXR1cm5WYWx1ZU9uY2Uoe1xuICAgICAgICAgIEV4cG9ydHM6IFtcbiAgICAgICAgICAgIGNyZWF0ZU1vY2tFeHBvcnQoMSksXG4gICAgICAgICAgICBjcmVhdGVNb2NrRXhwb3J0KDIpLFxuICAgICAgICAgICAgY3JlYXRlTW9ja0V4cG9ydCgzKSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIE5leHRUb2tlbjogJ25leHQtdG9rZW4tMScsXG4gICAgICAgIH0pXG4gICAgICAgIC5tb2NrUmV0dXJuVmFsdWVPbmNlKHtcbiAgICAgICAgICBFeHBvcnRzOiBbXG4gICAgICAgICAgICBjcmVhdGVNb2NrRXhwb3J0KDQpLFxuICAgICAgICAgICAgY3JlYXRlTW9ja0V4cG9ydCg1KSxcbiAgICAgICAgICAgIGNyZWF0ZU1vY2tFeHBvcnQoNiksXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOZXh0VG9rZW46IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdyZXNvbHZlcyBGbjo6SW1wb3J0VmFsdWUgdXNpbmcgbG9va3VwJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oeyAnRm46OkltcG9ydFZhbHVlJzogJ3Rlc3QtbmFtZS01JyB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoJ3Rlc3QtdmFsdWUtNScpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgndGhyb3dzIGVycm9yIHdoZW4gRm46OkltcG9ydFZhbHVlIGNhbm5vdCBiZSByZXNvbHZlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGV2YWx1YXRlID0gKCkgPT4gZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oe1xuICAgICAgICAnRm46OkltcG9ydFZhbHVlJzogJ2JsYWgnLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBleHBlY3QoZXZhbHVhdGUpLnJlamVjdHMudG9CZUluc3RhbmNlT2YoQ2ZuRXZhbHVhdGlvbkV4Y2VwdGlvbik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=