@@ -18,6 +18,7 @@ describe('ServerlessStepFunctions', () => {
1818 serverless . service . functions = {
1919 first : {
2020 handler : true ,
21+ name : 'first' ,
2122 } ,
2223 } ;
2324 const options = {
@@ -27,6 +28,7 @@ describe('ServerlessStepFunctions', () => {
2728 functionObj : {
2829 name : 'first' ,
2930 } ,
31+ state : 'stateMachine' ,
3032 } ;
3133 serverless . init ( ) ;
3234 serverless . setProvider ( 'aws' , new AwsProvider ( serverless ) ) ;
@@ -180,4 +182,126 @@ describe('ServerlessStepFunctions', () => {
180182 } ) ;
181183 } ) ;
182184 } ) ;
185+
186+ describe ( '#getIamRole()' , ( ) => {
187+ let getRoleStub ;
188+ beforeEach ( ( ) => {
189+ getRoleStub = sinon . stub ( serverlessStepFunctions . provider , 'request' )
190+ . returns ( BbPromise . resolve ( { Role :{ Arn :'roleArn' } } ) ) ;
191+ } ) ;
192+
193+ it ( 'should getIamRole with correct params' , ( ) => serverlessStepFunctions . getIamRole ( )
194+ . then ( ( ) => {
195+ expect ( getRoleStub . calledOnce ) . to . be . equal ( true ) ;
196+ expect ( getRoleStub . calledWithExactly (
197+ 'IAM' ,
198+ 'getRole' ,
199+ {
200+ RoleName : 'serverless-step-functions-executerole-us-east-1' ,
201+ } ,
202+ serverlessStepFunctions . options . stage ,
203+ serverlessStepFunctions . options . region
204+ ) ) . to . be . equal ( true ) ;
205+ expect ( serverlessStepFunctions . iamRoleArn ) . to . be . equal ( 'roleArn' ) ;
206+ serverlessStepFunctions . provider . request . restore ( ) ;
207+ } )
208+ ) ;
209+
210+ it ( 'should createRole when statusCode is 404' , ( ) => {
211+ serverlessStepFunctions . provider . request . restore ( ) ;
212+ const getRoleErrorStub = sinon . stub ( serverlessStepFunctions . provider , 'request' )
213+ . returns ( BbPromise . reject ( { statusCode : 404 } ) ) ;
214+ const createIamRoleStub = sinon
215+ . stub ( serverlessStepFunctions , 'createIamRole' ) . returns ( BbPromise . resolve ( ) ) ;
216+
217+ serverlessStepFunctions . getIamRole ( ) . catch ( ( error ) => {
218+ expect ( createIamRole . calledOnce ) . to . be . equal ( true ) ;
219+ serverlessStepFunctions . provider . request . restore ( ) ;
220+ serverlessStepFunctions . createIamRole . restore ( ) ;
221+ } ) ;
222+ } ) ;
223+
224+ it ( 'should throw error when statusCode is not 404' , ( ) => {
225+ serverlessStepFunctions . provider . request . restore ( ) ;
226+ const getRoleErrorStub = sinon . stub ( serverlessStepFunctions . provider , 'request' )
227+ . returns ( BbPromise . reject ( { statusCode : 502 } ) ) ;
228+
229+ serverlessStepFunctions . getIamRole ( ) . catch ( ( error ) => {
230+ expect ( error . name ) . to . be . equal ( 'ServerlessError' ) ;
231+ serverlessStepFunctions . provider . request . restore ( ) ;
232+ } ) ;
233+ } ) ;
234+ } ) ;
235+
236+ describe ( '#getFunctionArns()' , ( ) => {
237+ let getCallerIdentityStub ;
238+ beforeEach ( ( ) => {
239+ getCallerIdentityStub = sinon . stub ( serverlessStepFunctions . provider , 'request' )
240+ . returns ( BbPromise . resolve ( { Account :1234 } ) ) ;
241+ } ) ;
242+
243+ it ( 'should getFunctionArns with correct params' , ( ) => serverlessStepFunctions . getFunctionArns ( )
244+ . then ( ( ) => {
245+ expect ( getCallerIdentityStub . calledOnce ) . to . be . equal ( true ) ;
246+ expect ( getCallerIdentityStub . calledWithExactly (
247+ 'STS' ,
248+ 'getCallerIdentity' ,
249+ { } ,
250+ serverlessStepFunctions . options . stage ,
251+ serverlessStepFunctions . options . region
252+ ) ) . to . be . equal ( true ) ;
253+ expect ( serverlessStepFunctions . functionArns . first ) . to . be
254+ . equal ( 'arn:aws:lambda:us-east-1:1234:function:first' ) ;
255+ serverlessStepFunctions . provider . request . restore ( ) ;
256+ } )
257+ ) ;
258+ } ) ;
259+
260+ describe ( '#createIamRole()' , ( ) => {
261+ let createIamRoleStub ;
262+ beforeEach ( ( ) => {
263+ createIamRoleStub = sinon . stub ( serverlessStepFunctions . provider , 'request' ) ;
264+ createIamRoleStub . onFirstCall ( ) . returns ( BbPromise . resolve ( { Role :{ Arn :'roleArn' } } ) ) ;
265+ createIamRoleStub . onSecondCall ( ) . returns ( BbPromise . resolve ( { Policy :{ Arn :'policyArn' } } ) ) ;
266+ createIamRoleStub . onThirdCall ( ) . returns ( BbPromise . resolve ( ) ) ;
267+ } ) ;
268+
269+ it ( 'should createIamRole with correct params' , ( ) => serverlessStepFunctions . createIamRole ( )
270+ . then ( ( ) => {
271+ expect ( createIamRoleStub . calledThrice ) . to . be . equal ( true ) ;
272+ expect ( createIamRoleStub . args [ 0 ] [ 0 ] ) . to . be . equal ( 'IAM' ) ;
273+ expect ( createIamRoleStub . args [ 0 ] [ 1 ] ) . to . be . equal ( 'createRole' ) ;
274+ expect ( createIamRoleStub . args [ 1 ] [ 0 ] ) . to . be . equal ( 'IAM' ) ;
275+ expect ( createIamRoleStub . args [ 1 ] [ 1 ] ) . to . be . equal ( 'createPolicy' ) ;
276+ expect ( createIamRoleStub . args [ 2 ] [ 0 ] ) . to . be . equal ( 'IAM' ) ;
277+ expect ( createIamRoleStub . args [ 2 ] [ 1 ] ) . to . be . equal ( 'attachRolePolicy' ) ;
278+ serverlessStepFunctions . provider . request . restore ( ) ;
279+ } )
280+ ) ;
281+ } ) ;
282+
283+ describe ( '#getStateMachineArn()' , ( ) => {
284+ let getStateMachineStub ;
285+ beforeEach ( ( ) => {
286+ getStateMachineStub = sinon . stub ( serverlessStepFunctions . provider , 'request' )
287+ . returns ( BbPromise . resolve ( { Account :1234 } ) ) ;
288+ } ) ;
289+
290+ it ( 'should getStateMachineStub with correct params' , ( ) => serverlessStepFunctions . getStateMachineArn ( )
291+ . then ( ( ) => {
292+ expect ( getStateMachineStub . calledOnce ) . to . be . equal ( true ) ;
293+ expect ( getStateMachineStub . calledWithExactly (
294+ 'STS' ,
295+ 'getCallerIdentity' ,
296+ { } ,
297+ serverlessStepFunctions . options . stage ,
298+ serverlessStepFunctions . options . region
299+ ) ) . to . be . equal ( true ) ;
300+ expect ( serverlessStepFunctions . stateMachineArn ) . to . be
301+ . equal ( 'arn:aws:states:us-east-1:1234:stateMachine:stateMachine-dev' ) ;
302+ serverlessStepFunctions . provider . request . restore ( ) ;
303+ } )
304+ ) ;
305+ } ) ;
183306} ) ;
307+
0 commit comments