diff --git a/packages/aws-cdk/lib/cdk-toolkit.ts b/packages/aws-cdk/lib/cdk-toolkit.ts index 6d95bb76ac81b..3d9901a0610fe 100644 --- a/packages/aws-cdk/lib/cdk-toolkit.ts +++ b/packages/aws-cdk/lib/cdk-toolkit.ts @@ -450,7 +450,7 @@ export class CdkToolkit { // not outputting template to stdout, let's explain things to the user a little bit... success(`Successfully synthesized to ${chalk.blue(path.resolve(stacks.assembly.directory))}`); - print(`Supply a stack id (${stacks.stackArtifacts.map(s => chalk.green(s.id)).join(', ')}) to display its template.`); + print(`Supply a stack id (${stacks.stackArtifacts.map(s => chalk.green(s.hierarchicalId)).join(', ')}) to display its template.`); return undefined; } diff --git a/packages/aws-cdk/test/cdk-toolkit.test.ts b/packages/aws-cdk/test/cdk-toolkit.test.ts index f87ab3e76499c..3ca219427fb39 100644 --- a/packages/aws-cdk/test/cdk-toolkit.test.ts +++ b/packages/aws-cdk/test/cdk-toolkit.test.ts @@ -66,6 +66,7 @@ import { instanceMockFrom, MockCloudExecutable, TestStackArtifact } from './util let cloudExecutable: MockCloudExecutable; let bootstrapper: jest.Mocked; +let stderrMock: jest.SpyInstance; beforeEach(() => { jest.resetAllMocks(); @@ -86,6 +87,7 @@ beforeEach(() => { }], }); + stderrMock = jest.spyOn(process.stderr, 'write').mockImplementation(() => { return true; }); }); function defaultToolkitSetup() { @@ -105,9 +107,7 @@ describe('readCurrentTemplate', () => { let template: any; let mockForEnvironment = jest.fn(); let mockCloudExecutable: MockCloudExecutable; - let stderrMock: jest.SpyInstance; beforeEach(() => { - stderrMock = jest.spyOn(process.stderr, 'write').mockImplementation(() => { return true; }); template = { Resources: { @@ -677,6 +677,13 @@ describe('watch', () => { }); describe('synth', () => { + test('successful synth outputs hierarchical stack ids', async () => { + const toolkit = defaultToolkitSetup(); + await toolkit.synth([], false, false); + + expect(stderrMock.mock.calls[1][0]).toMatch('Test-Stack-A-Display-Name, Test-Stack-B'); + }); + test('with no stdout option', async () => { // GIVE const toolkit = defaultToolkitSetup(); @@ -787,6 +794,7 @@ class MockStack { }, ], }, + displayName: 'Test-Stack-A-Display-Name', }; public static readonly MOCK_STACK_B: TestStackArtifact = { stackName: 'Test-Stack-B',