@@ -13,6 +13,7 @@ import org.junit.Test
1313import software.amazon.awssdk.regions.Region
1414import software.amazon.awssdk.services.cloudformation.CloudFormationClient
1515import software.amazon.awssdk.services.cloudformation.model.Parameter
16+ import software.amazon.awssdk.services.cloudformation.model.Tag
1617import software.amazon.awssdk.services.ecr.EcrClient
1718import software.amazon.awssdk.services.s3.S3Client
1819import software.aws.toolkits.core.region.AwsRegion
@@ -102,7 +103,7 @@ class SamDeployTest {
102103 val stackName = " SamDeployTest-${UUID .randomUUID()} "
103104 val templateFile = setUpProject(largeTemplateLocation)
104105 runAssertsAndClean(stackName) {
105- val changeSetArn = createChangeSet(templateFile, stackName, mapOf (" InstanceType" to " t2.small" ), false )
106+ val changeSetArn = createChangeSet(templateFile, stackName, hasImage = false , parameters = mapOf (" InstanceType" to " t2.small" ))
106107
107108 assertThat(changeSetArn).isNotNull()
108109
@@ -126,7 +127,7 @@ class SamDeployTest {
126127 val stackName = " SamDeployTest-${UUID .randomUUID()} "
127128 val templateFile = setUpProject()
128129 runAssertsAndClean(stackName) {
129- val changeSetArn = createChangeSet(templateFile, stackName, mapOf (" TestParameter" to " FooBar" ), false )
130+ val changeSetArn = createChangeSet(templateFile, stackName, hasImage = false , parameters = mapOf (" TestParameter" to " FooBar" ))
130131
131132 assertThat(changeSetArn).isNotNull()
132133
@@ -169,6 +170,51 @@ class SamDeployTest {
169170 }
170171 }
171172
173+ @Test
174+ fun deployAppUsingSamWithTags () {
175+ val stackName = " SamDeployTest-${UUID .randomUUID()} "
176+ val templateFile = setUpProject()
177+ runAssertsAndClean(stackName) {
178+ val changeSetArn = createChangeSet(
179+ templateFile, stackName, hasImage = false ,
180+ tags = mapOf (
181+ " TestTag" to " FooBar" ,
182+ " some:gross" to " tag name and value" ,
183+ // SAM test cases https://github.com/aws/aws-sam-cli/pull/1798/files
184+ " a+-=._:/@" to " b+-=._:/@" ,
185+ " --c=" to " =d/"
186+ )
187+ )
188+
189+ assertThat(changeSetArn).isNotNull()
190+
191+ val describeChangeSetResponse = cfnClient.describeChangeSet {
192+ it.stackName(stackName)
193+ it.changeSetName(changeSetArn)
194+ }
195+
196+ assertThat(describeChangeSetResponse).isNotNull
197+ assertThat(describeChangeSetResponse.tags()).containsExactlyInAnyOrder(
198+ Tag .builder()
199+ .key(" TestTag" )
200+ .value(" FooBar" )
201+ .build(),
202+ Tag .builder()
203+ .key(" some:gross" )
204+ .value(" tag name and value" )
205+ .build(),
206+ Tag .builder()
207+ .key(" a+-=._:/@" )
208+ .value(" b+-=._:/@" )
209+ .build(),
210+ Tag .builder()
211+ .key(" --c=" )
212+ .value(" =d/" )
213+ .build()
214+ )
215+ }
216+ }
217+
172218 private fun setUpProject (templateFilePath : String? = null): VirtualFile {
173219 projectRule.fixture.addFileToProject(
174220 " hello_world/app.py" ,
@@ -202,7 +248,7 @@ class SamDeployTest {
202248 Properties:
203249 Handler: hello_world/app.lambda_handler
204250 CodeUri: .
205- Runtime: python2.7
251+ Runtime: python3.8
206252 Timeout: 900
207253 """ .trimIndent()
208254 ).virtualFile
@@ -211,7 +257,13 @@ class SamDeployTest {
211257 }
212258 }
213259
214- private fun createChangeSet (templateFile : VirtualFile , stackName : String , parameters : Map <String , String > = emptyMap(), hasImage : Boolean ): String? =
260+ private fun createChangeSet (
261+ templateFile : VirtualFile ,
262+ stackName : String ,
263+ hasImage : Boolean ,
264+ parameters : Map <String , String > = emptyMap(),
265+ tags : Map <String , String > = emptyMap()
266+ ): String? =
215267 runUnderRealCredentials(projectRule.project) {
216268 var changeSetArn: String? = null
217269 val deployDialog = runInEdtAndGet {
@@ -220,13 +272,17 @@ class SamDeployTest {
220272 message(" serverless.application.deploy_in_progress.title" , stackName),
221273 createDeployWorkflow(
222274 projectRule.project,
223- stackName,
224275 templateFile,
225- bucketRule.createBucket(stackName),
226- if (hasImage) repositoryRule.createRepository(stackName).repositoryUri() else null ,
227- true ,
228- parameters,
229- CreateCapabilities .values().toList()
276+ DeployServerlessApplicationSettings (
277+ stackName = stackName,
278+ bucket = bucketRule.createBucket(stackName),
279+ ecrRepo = if (hasImage) repositoryRule.createRepository(stackName).repositoryUri() else null ,
280+ autoExecute = true ,
281+ parameters = parameters,
282+ tags = tags,
283+ useContainer = false ,
284+ capabilities = CreateCapabilities .values().toList()
285+ )
230286 ),
231287 stackName
232288 )
0 commit comments