-
Notifications
You must be signed in to change notification settings - Fork 4.1k
/
Copy pathtest.codecommit.ts
139 lines (117 loc) · 3.63 KB
/
test.codecommit.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import { expect, haveResource } from '@aws-cdk/assert';
import { Role, ServicePrincipal } from '@aws-cdk/aws-iam';
import { Stack } from '@aws-cdk/core';
import { Test } from 'nodeunit';
import { Repository, RepositoryProps } from '../lib';
export = {
'CodeCommit Repositories': {
'add an SNS trigger to repository'(test: Test) {
const stack = new Stack();
const props: RepositoryProps = {
repositoryName: 'MyRepository',
};
const snsArn = 'arn:aws:sns:*:123456789012:my_topic';
new Repository(stack, 'MyRepository', props).notify(snsArn);
expect(stack).toMatch({
Resources: {
MyRepository4C4BD5FC: {
Type: 'AWS::CodeCommit::Repository',
Properties: {
RepositoryName: 'MyRepository',
Triggers: [
{
Events: [
'all',
],
DestinationArn: 'arn:aws:sns:*:123456789012:my_topic',
Name: 'Default/MyRepository/arn:aws:sns:*:123456789012:my_topic',
},
],
},
},
},
});
test.done();
},
'fails when triggers have duplicate names'(test: Test) {
const stack = new Stack();
const myRepository = new Repository(stack, 'MyRepository', {
repositoryName: 'MyRepository',
}).notify('myTrigger');
test.throws(() => myRepository.notify('myTrigger'));
test.done();
},
'can be imported using a Repository ARN'(test: Test) {
// GIVEN
const stack = new Stack();
const repositoryArn = 'arn:aws:codecommit:us-east-1:585695036304:my-repo';
// WHEN
const repo = Repository.fromRepositoryArn(stack, 'ImportedRepo', repositoryArn);
// THEN
test.deepEqual(stack.resolve(repo.repositoryArn), repositoryArn);
test.deepEqual(stack.resolve(repo.repositoryName), 'my-repo');
test.done();
},
'can be imported using just a Repository name (the ARN is deduced)'(test: Test) {
// GIVEN
const stack = new Stack();
// WHEN
const repo = Repository.fromRepositoryName(stack, 'ImportedRepo', 'my-repo');
// THEN
test.deepEqual(stack.resolve(repo.repositoryArn), {
'Fn::Join': ['', [
'arn:',
{ Ref: 'AWS::Partition' },
':codecommit:',
{ Ref: 'AWS::Region' },
':',
{ Ref: 'AWS::AccountId' },
':my-repo',
]],
});
test.deepEqual(stack.resolve(repo.repositoryName), 'my-repo');
test.done();
},
'grant push'(test: Test) {
// GIVEN
const stack = new Stack();
const repository = new Repository(stack, 'Repo', {
repositoryName: 'repo-name',
});
const role = new Role(stack, 'Role', {
assumedBy: new ServicePrincipal('ec2.amazonaws.com'),
});
// WHEN
repository.grantPullPush(role);
// THEN
expect(stack).to(haveResource('AWS::IAM::Policy', {
PolicyDocument: {
Statement: [
{
Action: 'codecommit:GitPull',
Effect: 'Allow',
Resource: {
'Fn::GetAtt': [
'Repo02AC86CF',
'Arn',
],
},
},
{
Action: 'codecommit:GitPush',
Effect: 'Allow',
Resource: {
'Fn::GetAtt': [
'Repo02AC86CF',
'Arn',
],
},
},
],
Version: '2012-10-17',
},
}));
test.done();
},
},
};