aws-cdk
Version:
CDK Toolkit, the command line tool for CDK apps
94 lines • 11.5 kB
JavaScript
;
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==