UNPKG

aws-cdk

Version:

CDK Toolkit, the command line tool for CDK apps

94 lines 11.5 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"); describe('LazyLookupExport', () => { const listExports = jest.fn(); const mockSdk = new mock_sdk_1.MockSdk(); mockSdk.stubCloudFormation({ listExports, }); const createExport = (num) => ({ ExportingStackId: `test-exporting-stack-id-${num}`, Name: `test-name-${num}`, Value: `test-value-${num}`, }); it('skips over any results that omit Name property', async () => { listExports.mockReturnValueOnce({ Exports: [ createExport(1), createExport(2), { Value: 'value-without-name', }, createExport(3), ], NextToken: undefined, }); const lookup = new evaluate_cloudformation_template_1.LazyLookupExport(mockSdk); const result = await lookup.lookupExport('test-name-3'); expect(result?.Value).toEqual('test-value-3'); }); describe('three pages of exports', () => { let lookup; beforeEach(() => { lookup = new evaluate_cloudformation_template_1.LazyLookupExport(mockSdk); listExports .mockReset() .mockReturnValueOnce({ Exports: [ createExport(1), createExport(2), createExport(3), ], NextToken: 'next-token-1', }) .mockReturnValueOnce({ Exports: [ createExport(4), createExport(5), createExport(6), ], NextToken: 'next-token-2', }) .mockReturnValueOnce({ Exports: [ createExport(7), createExport(8), ], NextToken: undefined, }); }); it('returns the matching export', async () => { const name = 'test-name-3'; const result = await lookup.lookupExport(name); expect(result?.Name).toEqual(name); expect(result?.Value).toEqual('test-value-3'); }); it('stops fetching once export is found', async () => { await lookup.lookupExport('test-name-3'); expect(listExports).toHaveBeenCalledTimes(1); }); it('paginates', async () => { await lookup.lookupExport('test-name-7'); expect(listExports).toHaveBeenCalledTimes(3); expect(listExports).toHaveBeenCalledWith({ NextToken: 'next-token-1', }); expect(listExports).toHaveBeenCalledWith({ NextToken: 'next-token-2', }); }); it('caches the calls to CloudFormation API', async () => { await lookup.lookupExport('test-name-3'); await lookup.lookupExport('test-name-3'); await lookup.lookupExport('test-name-3'); expect(listExports).toHaveBeenCalledTimes(1); }); it('returns undefined if the export does not exist', async () => { const result = await lookup.lookupExport('test-name-unknown'); expect(result).toBeUndefined(); }); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1sb29rdXAtZXhwb3J0LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJsYXp5LWxvb2t1cC1leHBvcnQudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLHFHQUFrRjtBQUNsRiwrQ0FBMkM7QUFFM0MsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtJQUNoQyxNQUFNLFdBQVcsR0FBMkYsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ3RILE1BQU0sT0FBTyxHQUFHLElBQUksa0JBQU8sRUFBRSxDQUFDO0lBQzlCLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztRQUN6QixXQUFXO0tBQ1osQ0FBQyxDQUFDO0lBRUgsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDckMsZ0JBQWdCLEVBQUUsMkJBQTJCLEdBQUcsRUFBRTtRQUNsRCxJQUFJLEVBQUUsYUFBYSxHQUFHLEVBQUU7UUFDeEIsS0FBSyxFQUFFLGNBQWMsR0FBRyxFQUFFO0tBQzNCLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxnREFBZ0QsRUFBRSxLQUFLLElBQUksRUFBRTtRQUM5RCxXQUFXLENBQUMsbUJBQW1CLENBQUM7WUFDOUIsT0FBTyxFQUFFO2dCQUNQLFlBQVksQ0FBQyxDQUFDLENBQUM7Z0JBQ2YsWUFBWSxDQUFDLENBQUMsQ0FBQztnQkFDZjtvQkFDRSxLQUFLLEVBQUUsb0JBQW9CO2lCQUM1QjtnQkFDRCxZQUFZLENBQUMsQ0FBQyxDQUFDO2FBQ2hCO1lBQ0QsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBSSxtREFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU3QyxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEQsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxPQUFP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QUM5RCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgQVdTIGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0IHsgTGF6eUxvb2t1cEV4cG9ydCB9IGZyb20gJy4uLy4uL2xpYi9hcGkvZXZhbHVhdGUtY2xvdWRmb3JtYXRpb24tdGVtcGxhdGUnO1xuaW1wb3J0IHsgTW9ja1NkayB9IGZyb20gJy4uL3V0aWwvbW9jay1zZGsnO1xuXG5kZXNjcmliZSgnTGF6eUxvb2t1cEV4cG9ydCcsICgpID0+IHtcbiAgY29uc3QgbGlzdEV4cG9ydHM6IGplc3QuTW9jazxBV1MuQ2xvdWRGb3JtYXRpb24uTGlzdEV4cG9ydHNPdXRwdXQsIEFXUy5DbG91ZEZvcm1hdGlvbi5MaXN0RXhwb3J0c0lucHV0W10+ID0gamVzdC5mbigpO1xuICBjb25zdCBtb2NrU2RrID0gbmV3IE1vY2tTZGsoKTtcbiAgbW9ja1Nkay5zdHViQ2xvdWRGb3JtYXRpb24oe1xuICAgIGxpc3RFeHBvcnRzLFxuICB9KTtcblxuICBjb25zdCBjcmVhdGVFeHBvcnQgPSAobnVtOiBudW1iZXIpID0+ICh7XG4gICAgRXhwb3J0aW5nU3RhY2tJZDogYHRlc3QtZXhwb3J0aW5nLXN0YWNrLWlkLSR7bnVtfWAsXG4gICAgTmFtZTogYHRlc3QtbmFtZS0ke251bX1gLFxuICAgIFZhbHVlOiBgdGVzdC12YWx1ZS0ke251bX1gLFxuICB9KTtcblxuICBpdCgnc2tpcHMgb3ZlciBhbnkgcmVzdWx0cyB0aGF0IG9taXQgTmFtZSBwcm9wZXJ0eScsIGFzeW5jICgpID0+IHtcbiAgICBsaXN0RXhwb3J0cy5tb2NrUmV0dXJuVmFsdWVPbmNlKHtcbiAgICAgIEV4cG9ydHM6IFtcbiAgICAgICAgY3JlYXRlRXhwb3J0KDEpLFxuICAgICAgICBjcmVhdGVFeHBvcnQoMiksXG4gICAgICAgIHtcbiAgICAgICAgICBWYWx1ZTogJ3ZhbHVlLXdpdGhvdXQtbmFtZScsXG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZUV4cG9ydCgzKSxcbiAgICAgIF0sXG4gICAgICBOZXh0VG9rZW46IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICBjb25zdCBsb29rdXAgPSBuZXcgTGF6eUxvb2t1cEV4cG9ydChtb2NrU2RrKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGxvb2t1cC5sb29rdXBFeHBvcnQoJ3Rlc3QtbmFtZS0zJyk7XG4gICAgZXhwZWN0KHJlc3VsdD8uVmFsdWUpLnRvRXF1YWwoJ3Rlc3QtdmFsdWUtMycpO1xuICB9KTtcblxuICBkZXNjcmliZSgndGhyZWUgcGFnZXMgb2YgZXhwb3J0cycsICgpID0+IHtcbiAgICBsZXQgbG9va3VwOiBMYXp5TG9va3VwRXhwb3J0O1xuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgbG9va3VwID0gbmV3IExhenlMb29rdXBFeHBvcnQobW9ja1Nkayk7XG4gICAgICBsaXN0RXhwb3J0c1xuICAgICAgICAubW9ja1Jlc2V0KClcbiAgICAgICAgLm1vY2tSZXR1cm5WYWx1ZU9uY2Uoe1xuICAgICAgICAgIEV4cG9ydHM6IFtcbiAgICAgICAgICAgIGNyZWF0ZUV4cG9ydCgxKSxcbiAgICAgICAgICAgIGNyZWF0ZUV4cG9ydCgyKSxcbiAgICAgICAgICAgIGNyZWF0ZUV4cG9ydCgzKSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIE5leHRUb2tlbjogJ25leHQtdG9rZW4tMScsXG4gICAgICAgIH0pXG4gICAgICAgIC5tb2NrUmV0dXJuVmFsdWVPbmNlKHtcbiAgICAgICAgICBFeHBvcnRzOiBbXG4gICAgICAgICAgICBjcmVhdGVFeHBvcnQoNCksXG4gICAgICAgICAgICBjcmVhdGVFeHBvcnQoNSksXG4gICAgICAgICAgICBjcmVhdGVFeHBvcnQoNiksXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOZXh0VG9rZW46ICduZXh0LXRva2VuLTInLFxuICAgICAgICB9KVxuICAgICAgICAubW9ja1JldHVyblZhbHVlT25jZSh7XG4gICAgICAgICAgRXhwb3J0czogW1xuICAgICAgICAgICAgY3JlYXRlRXhwb3J0KDcpLFxuICAgICAgICAgICAgY3JlYXRlRXhwb3J0KDgpLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgTmV4dFRva2VuOiB1bmRlZmluZWQsXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgdGhlIG1hdGNoaW5nIGV4cG9ydCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSAndGVzdC1uYW1lLTMnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbG9va3VwLmxvb2t1cEV4cG9ydChuYW1lKTtcbiAgICAgIGV4cGVjdChyZXN1bHQ/Lk5hbWUpLnRvRXF1YWwobmFtZSk7XG4gICAgICBleHBlY3QocmVzdWx0Py5WYWx1ZSkudG9FcXVhbCgndGVzdC12YWx1ZS0zJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc3RvcHMgZmV0Y2hpbmcgb25jZSBleHBvcnQgaXMgZm91bmQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBsb29rdXAubG9va3VwRXhwb3J0KCd0ZXN0LW5hbWUtMycpO1xuICAgICAgZXhwZWN0KGxpc3RFeHBvcnRzKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgfSk7XG5cbiAgICBpdCgncGFnaW5hdGVzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgbG9va3VwLmxvb2t1cEV4cG9ydCgndGVzdC1uYW1lLTcnKTtcbiAgICAgIGV4cGVjdChsaXN0RXhwb3J0cykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDMpO1xuICAgICAgZXhwZWN0KGxpc3RFeHBvcnRzKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAgIE5leHRUb2tlbjogJ25leHQtdG9rZW4tMScsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChsaXN0RXhwb3J0cykudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgICBOZXh0VG9rZW46ICduZXh0LXRva2VuLTInLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnY2FjaGVzIHRoZSBjYWxscyB0byBDbG91ZEZvcm1hdGlvbiBBUEknLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBsb29rdXAubG9va3VwRXhwb3J0KCd0ZXN0LW5hbWUtMycpO1xuICAgICAgYXdhaXQgbG9va3VwLmxvb2t1cEV4cG9ydCgndGVzdC1uYW1lLTMnKTtcbiAgICAgIGF3YWl0IGxvb2t1cC5sb29rdXBFeHBvcnQoJ3Rlc3QtbmFtZS0zJyk7XG4gICAgICBleHBlY3QobGlzdEV4cG9ydHMpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgZXhwb3J0IGRvZXMgbm90IGV4aXN0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbG9va3VwLmxvb2t1cEV4cG9ydCgndGVzdC1uYW1lLXVua25vd24nKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==