@@ -1151,4 +1151,58 @@ describe('#compileIamRole', () => {
11511151 ] ;
11521152 expect ( lambdaPermissions [ 0 ] . Resource ) . to . deep . eq ( lambdaArns ) ;
11531153 } ) ;
1154+
1155+ it ( 'should support lambda::invoke resource type' , ( ) => {
1156+ const getStateMachine = ( name , functionName ) => ( {
1157+ name,
1158+ definition : {
1159+ StartAt : 'A' ,
1160+ States : {
1161+ A : {
1162+ Type : 'Task' ,
1163+ Resource : 'arn:aws:states:::lambda:invoke' ,
1164+ Parameters : {
1165+ FunctionName : functionName ,
1166+ Payload : {
1167+ 'ExecutionName.$' : '$$.Execution.Name' ,
1168+ } ,
1169+ } ,
1170+ End : true ,
1171+ } ,
1172+ } ,
1173+ } ,
1174+ } ) ;
1175+
1176+ // function name can be...
1177+ const lambda1 = 'a' ; // name-only
1178+ const lambda2 = 'b:v1' ; // name-only with alias
1179+ const lambda3 = 'arn:aws:lambda:us-west-2:1234567890:function:c' ; // full arn
1180+ const lambda4 = '1234567890:function:d' ; // partial arn
1181+
1182+ serverless . service . stepFunctions = {
1183+ stateMachines : {
1184+ myStateMachine1 : getStateMachine ( 'sm1' , lambda1 ) ,
1185+ myStateMachine2 : getStateMachine ( 'sm2' , lambda2 ) ,
1186+ myStateMachine3 : getStateMachine ( 'sm3' , lambda3 ) ,
1187+ myStateMachine4 : getStateMachine ( 'sm4' , lambda4 ) ,
1188+ } ,
1189+ } ;
1190+
1191+ serverlessStepFunctions . compileIamRole ( ) ;
1192+ const statements = serverlessStepFunctions . serverless . service
1193+ . provider . compiledCloudFormationTemplate . Resources . IamRoleStateMachineExecution
1194+ . Properties . Policies [ 0 ] . PolicyDocument . Statement ;
1195+
1196+ const lambdaPermissions = statements . filter ( s =>
1197+ _ . isEqual ( s . Action , [ 'lambda:InvokeFunction' ] ) ) ;
1198+ expect ( lambdaPermissions ) . to . have . lengthOf ( 1 ) ;
1199+
1200+ const lambdaArns = [
1201+ { 'Fn::Sub' : 'arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:a' } ,
1202+ { 'Fn::Sub' : 'arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:b:v1' } ,
1203+ 'arn:aws:lambda:us-west-2:1234567890:function:c' ,
1204+ { 'Fn::Sub' : 'arn:aws:lambda:${AWS::Region}:1234567890:function:d' } ,
1205+ ] ;
1206+ expect ( lambdaPermissions [ 0 ] . Resource ) . to . deep . eq ( lambdaArns ) ;
1207+ } ) ;
11541208} ) ;
0 commit comments