diff --git a/packages/@aws-cdk/assert/lib/expect.ts b/packages/@aws-cdk/assert/lib/expect.ts index 9fca81ff8e2f3..d59d1b6f02ccc 100644 --- a/packages/@aws-cdk/assert/lib/expect.ts +++ b/packages/@aws-cdk/assert/lib/expect.ts @@ -1,9 +1,12 @@ import cdk = require('@aws-cdk/cdk'); -import { ConstructNode, ConstructOrder } from '@aws-cdk/cdk'; +import { ConstructNode, ConstructOrder, FileSystemStore } from '@aws-cdk/cdk'; import api = require('@aws-cdk/cx-api'); import { StackInspector } from './inspector'; import { SynthUtils } from './synth-utils'; +import fs = require('fs'); +import os = require('os'); + export function expect(stack: api.SynthesizedStack | cdk.Stack, skipValidation = false): StackInspector { // Can't use 'instanceof' here, that breaks if we have multiple copies // of this library. @@ -11,17 +14,19 @@ export function expect(stack: api.SynthesizedStack | cdk.Stack, skipValidation = if (cdk.Stack.isStack(stack)) { const session = SynthUtils.synthesize(stack, { + store: new FileSystemStore({ + path: fs.mkdtempSync(os.tmpdir()) + }), skipValidation }); sstack = { name: stack.name, template: SynthUtils.templateForStackName(session, stack.name), - metadata: collectStackMetadata(stack.node), - environment: { - name: 'test', - account: 'test', - region: 'test' + artifact: { + metadata: collectStackMetadata(stack.node), + type: api.ArtifactType.AwsCloudFormationStack, + environment: 'aws://test/test' } }; } else { diff --git a/packages/@aws-cdk/assert/lib/inspector.ts b/packages/@aws-cdk/assert/lib/inspector.ts index d5e3315bc80ed..2cede22c2d66e 100644 --- a/packages/@aws-cdk/assert/lib/inspector.ts +++ b/packages/@aws-cdk/assert/lib/inspector.ts @@ -54,9 +54,12 @@ export class StackPathInspector extends Inspector { // The names of paths in metadata in tests are very ill-defined. Try with the full path first, // then try with the stack name preprended for backwards compat with most tests that happen to give // their stack an ID that's the same as the stack name. - const md = this.stack.metadata[this.path] || this.stack.metadata[`/${this.stack.name}${this.path}`]; + if (this.stack.artifact.metadata === undefined) { + return undefined; + } + const md = this.stack.artifact.metadata[this.path] || this.stack.artifact.metadata[`/${this.stack.name}${this.path}`]; if (md === undefined) { return undefined; } - const resourceMd = md.find(entry => entry.type === 'aws:cdk:logicalId'); + const resourceMd = md.find((entry: any) => entry.type === 'aws:cdk:logicalId'); if (resourceMd === undefined) { return undefined; } const logicalId = resourceMd.data; return this.stack.template.Resources[logicalId]; diff --git a/packages/@aws-cdk/assert/lib/synth-utils.ts b/packages/@aws-cdk/assert/lib/synth-utils.ts index 2d3e1d237dfff..c85e6fc1b48c5 100644 --- a/packages/@aws-cdk/assert/lib/synth-utils.ts +++ b/packages/@aws-cdk/assert/lib/synth-utils.ts @@ -1,13 +1,13 @@ import { ISynthesisSession, Stack, SynthesisOptions, Synthesizer } from '@aws-cdk/cdk'; export class SynthUtils { - public static toCloudFormation(stack: Stack, options: SynthesisOptions = { }): any { + public static toCloudFormation(stack: Stack, options: SynthesisOptions): any { const session = this.synthesize(stack, options); return this.templateForStackName(session, stack.name); } public static templateForStackName(session: ISynthesisSession, stackName: string): any { - return session.store.readJson(session.getArtifact(stackName).properties!.templateFile); + return session.assembly.readJson(session.getArtifact(stackName).properties!.templateFile); } public static synthesize(stack: Stack, options: SynthesisOptions): ISynthesisSession { diff --git a/packages/@aws-cdk/assert/test/test.assertions.ts b/packages/@aws-cdk/assert/test/test.assertions.ts index c59a96114e6e0..960927bf66080 100644 --- a/packages/@aws-cdk/assert/test/test.assertions.ts +++ b/packages/@aws-cdk/assert/test/test.assertions.ts @@ -42,7 +42,12 @@ passingExample('expect to match (exactly)