|
1 | 1 | import nodeunit = require('nodeunit');
|
2 |
| -import { App, Aws, Resource, Stack } from '../../lib'; |
3 |
| -import { generatePhysicalName } from '../../lib/private/physical-name-generator'; |
| 2 | +import { App, Aws, Lazy, Resource, Stack, Token } from '../../lib'; |
| 3 | +import { GeneratedWhenNeededMarker, generatePhysicalName, isGeneratedWhenNeededMarker } from '../../lib/private/physical-name-generator'; |
4 | 4 |
|
5 | 5 | export = nodeunit.testCase({
|
6 |
| - 'generates correct physical names'(test: nodeunit.Test) { |
7 |
| - const app = new App(); |
8 |
| - const stack = new Stack(app, 'TestStack', { env: { account: '012345678912', region: 'bermuda-triangle-1' } }); |
| 6 | + generatePhysicalName: { |
| 7 | + 'generates correct physical names'(test: nodeunit.Test) { |
| 8 | + const app = new App(); |
| 9 | + const stack = new Stack(app, 'TestStack', { env: { account: '012345678912', region: 'bermuda-triangle-1' } }); |
9 | 10 |
|
10 |
| - const testResourceA = new TestResource(stack, 'A'); |
11 |
| - const testResourceB = new TestResource(testResourceA, 'B'); |
| 11 | + const testResourceA = new TestResource(stack, 'A'); |
| 12 | + const testResourceB = new TestResource(testResourceA, 'B'); |
12 | 13 |
|
13 |
| - test.equal(generatePhysicalName(testResourceA), 'teststackteststackaa164c141d59b37c1b663'); |
14 |
| - test.equal(generatePhysicalName(testResourceB), 'teststackteststackab27595cd34d8188283a1f'); |
| 14 | + test.equal(generatePhysicalName(testResourceA), 'teststackteststackaa164c141d59b37c1b663'); |
| 15 | + test.equal(generatePhysicalName(testResourceB), 'teststackteststackab27595cd34d8188283a1f'); |
15 | 16 |
|
16 |
| - test.done(); |
17 |
| - }, |
| 17 | + test.done(); |
| 18 | + }, |
18 | 19 |
|
19 |
| - 'generates different names in different accounts'(test: nodeunit.Test) { |
20 |
| - const appA = new App(); |
21 |
| - const stackA = new Stack(appA, 'TestStack', { env: { account: '012345678912', region: 'bermuda-triangle-1' } }); |
22 |
| - const resourceA = new TestResource(stackA, 'Resource'); |
| 20 | + 'generates different names in different accounts'(test: nodeunit.Test) { |
| 21 | + const appA = new App(); |
| 22 | + const stackA = new Stack(appA, 'TestStack', { env: { account: '012345678912', region: 'bermuda-triangle-1' } }); |
| 23 | + const resourceA = new TestResource(stackA, 'Resource'); |
23 | 24 |
|
24 |
| - const appB = new App(); |
25 |
| - const stackB = new Stack(appB, 'TestStack', { env: { account: '012345678913', region: 'bermuda-triangle-1' } }); |
26 |
| - const resourceB = new TestResource(stackB, 'Resource'); |
| 25 | + const appB = new App(); |
| 26 | + const stackB = new Stack(appB, 'TestStack', { env: { account: '012345678913', region: 'bermuda-triangle-1' } }); |
| 27 | + const resourceB = new TestResource(stackB, 'Resource'); |
27 | 28 |
|
28 |
| - test.notEqual(generatePhysicalName(resourceA), generatePhysicalName(resourceB)); |
| 29 | + test.notEqual(generatePhysicalName(resourceA), generatePhysicalName(resourceB)); |
29 | 30 |
|
30 |
| - test.done(); |
31 |
| - }, |
| 31 | + test.done(); |
| 32 | + }, |
32 | 33 |
|
33 |
| - 'generates different names in different regions'(test: nodeunit.Test) { |
34 |
| - const appA = new App(); |
35 |
| - const stackA = new Stack(appA, 'TestStack', { env: { account: '012345678912', region: 'bermuda-triangle-1' } }); |
36 |
| - const resourceA = new TestResource(stackA, 'Resource'); |
| 34 | + 'generates different names in different regions'(test: nodeunit.Test) { |
| 35 | + const appA = new App(); |
| 36 | + const stackA = new Stack(appA, 'TestStack', { env: { account: '012345678912', region: 'bermuda-triangle-1' } }); |
| 37 | + const resourceA = new TestResource(stackA, 'Resource'); |
37 | 38 |
|
38 |
| - const appB = new App(); |
39 |
| - const stackB = new Stack(appB, 'TestStack', { env: { account: '012345678912', region: 'bermuda-triangle-2' } }); |
40 |
| - const resourceB = new TestResource(stackB, 'Resource'); |
| 39 | + const appB = new App(); |
| 40 | + const stackB = new Stack(appB, 'TestStack', { env: { account: '012345678912', region: 'bermuda-triangle-2' } }); |
| 41 | + const resourceB = new TestResource(stackB, 'Resource'); |
41 | 42 |
|
42 |
| - test.notEqual(generatePhysicalName(resourceA), generatePhysicalName(resourceB)); |
| 43 | + test.notEqual(generatePhysicalName(resourceA), generatePhysicalName(resourceB)); |
43 | 44 |
|
44 |
| - test.done(); |
45 |
| - }, |
| 45 | + test.done(); |
| 46 | + }, |
46 | 47 |
|
47 |
| - 'fails when the region is an unresolved token'(test: nodeunit.Test) { |
48 |
| - const app = new App(); |
49 |
| - const stack = new Stack(app, 'TestStack', { env: { account: '012345678912', region: Aws.REGION } }); |
50 |
| - const testResource = new TestResource(stack, 'A'); |
| 48 | + 'fails when the region is an unresolved token'(test: nodeunit.Test) { |
| 49 | + const app = new App(); |
| 50 | + const stack = new Stack(app, 'TestStack', { env: { account: '012345678912', region: Aws.REGION } }); |
| 51 | + const testResource = new TestResource(stack, 'A'); |
51 | 52 |
|
52 |
| - test.throws(() => generatePhysicalName(testResource), |
53 |
| - /Cannot generate a physical name for TestStack\/A, because the region is un-resolved or missing/); |
| 53 | + test.throws(() => generatePhysicalName(testResource), |
| 54 | + /Cannot generate a physical name for TestStack\/A, because the region is un-resolved or missing/); |
54 | 55 |
|
55 |
| - test.done(); |
56 |
| - }, |
| 56 | + test.done(); |
| 57 | + }, |
57 | 58 |
|
58 |
| - 'fails when the region is not provided'(test: nodeunit.Test) { |
59 |
| - const app = new App(); |
60 |
| - const stack = new Stack(app, 'TestStack', { env: { account: '012345678912' } }); |
61 |
| - const testResource = new TestResource(stack, 'A'); |
| 59 | + 'fails when the region is not provided'(test: nodeunit.Test) { |
| 60 | + const app = new App(); |
| 61 | + const stack = new Stack(app, 'TestStack', { env: { account: '012345678912' } }); |
| 62 | + const testResource = new TestResource(stack, 'A'); |
62 | 63 |
|
63 |
| - test.throws(() => generatePhysicalName(testResource), |
64 |
| - /Cannot generate a physical name for TestStack\/A, because the region is un-resolved or missing/); |
| 64 | + test.throws(() => generatePhysicalName(testResource), |
| 65 | + /Cannot generate a physical name for TestStack\/A, because the region is un-resolved or missing/); |
65 | 66 |
|
66 |
| - test.done(); |
67 |
| - }, |
| 67 | + test.done(); |
| 68 | + }, |
| 69 | + |
| 70 | + 'fails when the account is an unresolved token'(test: nodeunit.Test) { |
| 71 | + const app = new App(); |
| 72 | + const stack = new Stack(app, 'TestStack', { env: { account: Aws.ACCOUNT_ID, region: 'bermuda-triangle-1' } }); |
| 73 | + const testResource = new TestResource(stack, 'A'); |
| 74 | + |
| 75 | + test.throws(() => generatePhysicalName(testResource), |
| 76 | + /Cannot generate a physical name for TestStack\/A, because the account is un-resolved or missing/); |
68 | 77 |
|
69 |
| - 'fails when the account is an unresolved token'(test: nodeunit.Test) { |
70 |
| - const app = new App(); |
71 |
| - const stack = new Stack(app, 'TestStack', { env: { account: Aws.ACCOUNT_ID, region: 'bermuda-triangle-1' } }); |
72 |
| - const testResource = new TestResource(stack, 'A'); |
| 78 | + test.done(); |
| 79 | + }, |
73 | 80 |
|
74 |
| - test.throws(() => generatePhysicalName(testResource), |
75 |
| - /Cannot generate a physical name for TestStack\/A, because the account is un-resolved or missing/); |
| 81 | + 'fails when the account is not provided'(test: nodeunit.Test) { |
| 82 | + const app = new App(); |
| 83 | + const stack = new Stack(app, 'TestStack', { env: { region: 'bermuda-triangle-1' } }); |
| 84 | + const testResource = new TestResource(stack, 'A'); |
76 | 85 |
|
77 |
| - test.done(); |
| 86 | + test.throws(() => generatePhysicalName(testResource), |
| 87 | + /Cannot generate a physical name for TestStack\/A, because the account is un-resolved or missing/); |
| 88 | + |
| 89 | + test.done(); |
| 90 | + }, |
78 | 91 | },
|
79 | 92 |
|
80 |
| - 'fails when the account is not provided'(test: nodeunit.Test) { |
81 |
| - const app = new App(); |
82 |
| - const stack = new Stack(app, 'TestStack', { env: { region: 'bermuda-triangle-1' } }); |
83 |
| - const testResource = new TestResource(stack, 'A'); |
| 93 | + GeneratedWhenNeededMarker: { |
| 94 | + 'is correctly recognized'(test: nodeunit.Test) { |
| 95 | + const marker = new GeneratedWhenNeededMarker(); |
| 96 | + const asString = Token.asString(marker); |
| 97 | + |
| 98 | + test.ok(isGeneratedWhenNeededMarker(asString)); |
| 99 | + |
| 100 | + test.done(); |
| 101 | + }, |
| 102 | + |
| 103 | + 'throws when resolved'(test: nodeunit.Test) { |
| 104 | + const marker = new GeneratedWhenNeededMarker(); |
| 105 | + const asString = Token.asString(marker); |
| 106 | + |
| 107 | + test.throws(() => new Stack().resolve(asString), /Use "this.physicalName" instead/); |
| 108 | + |
| 109 | + test.done(); |
| 110 | + }, |
| 111 | + }, |
84 | 112 |
|
85 |
| - test.throws(() => generatePhysicalName(testResource), |
86 |
| - /Cannot generate a physical name for TestStack\/A, because the account is un-resolved or missing/); |
| 113 | + isGeneratedWhenNeededMarker: { |
| 114 | + 'correctly response for other tokens'(test: nodeunit.Test) { |
| 115 | + test.ok(!isGeneratedWhenNeededMarker('this is not even a token!')); |
| 116 | + test.ok(!isGeneratedWhenNeededMarker(Lazy.stringValue({ produce: () => 'Bazinga!' }))); |
87 | 117 |
|
88 |
| - test.done(); |
| 118 | + test.done(); |
| 119 | + } |
89 | 120 | },
|
90 | 121 | });
|
91 | 122 |
|
|
0 commit comments