@@ -16,6 +16,330 @@ describe('#httpValidate()', () => {
16
16
stage : 'dev' ,
17
17
region : 'us-east-1' ,
18
18
} ;
19
+ serverless . service . provider . compiledCloudFormationTemplate = { Resources : { } } ;
19
20
serverlessStepFunctions = new ServerlessStepFunctions ( serverless , options ) ;
20
21
} ) ;
22
+
23
+ describe ( '#compileScheduledEvents()' , ( ) => {
24
+ it ( 'should throw an error if schedule event type is not a string or an object' , ( ) => {
25
+ serverlessStepFunctions . serverless . service . stepFunctions = {
26
+ stateMachines : {
27
+ first : {
28
+ events : [
29
+ {
30
+ schedule : 42 ,
31
+ } ,
32
+ ] ,
33
+ } ,
34
+ } ,
35
+ } ;
36
+
37
+ expect ( ( ) => serverlessStepFunctions . compileScheduledEvents ( ) ) . to . throw ( Error ) ;
38
+ } ) ;
39
+
40
+ it ( 'should throw an error if the "rate" property is not given' , ( ) => {
41
+ serverlessStepFunctions . serverless . service . stepFunctions = {
42
+ stateMachines : {
43
+ first : {
44
+ events : [
45
+ {
46
+ schedule : {
47
+ rate : null ,
48
+ } ,
49
+ } ,
50
+ ] ,
51
+ } ,
52
+ } ,
53
+ } ;
54
+
55
+ expect ( ( ) => serverlessStepFunctions . compileScheduledEvents ( ) ) . to . throw ( Error ) ;
56
+ } ) ;
57
+
58
+ it ( 'should create corresponding resources when schedule events are given' , ( ) => {
59
+ serverlessStepFunctions . serverless . service . stepFunctions = {
60
+ stateMachines : {
61
+ first : {
62
+ events : [
63
+ {
64
+ schedule : {
65
+ rate : 'rate(10 minutes)' ,
66
+ enabled : false ,
67
+ } ,
68
+ } ,
69
+ {
70
+ schedule : {
71
+ rate : 'rate(10 minutes)' ,
72
+ enabled : true ,
73
+ } ,
74
+ } ,
75
+ {
76
+ schedule : 'rate(10 minutes)' ,
77
+ } ,
78
+ ] ,
79
+ } ,
80
+ } ,
81
+ } ;
82
+
83
+ serverlessStepFunctions . compileScheduledEvents ( ) ;
84
+
85
+ expect ( serverlessStepFunctions . serverless . service
86
+ . provider . compiledCloudFormationTemplate . Resources
87
+ . FirstStepFunctionsEventsRuleSchedule1 . Type
88
+ ) . to . equal ( 'AWS::Events::Rule' ) ;
89
+ expect ( serverlessStepFunctions . serverless . service
90
+ . provider . compiledCloudFormationTemplate . Resources
91
+ . FirstStepFunctionsEventsRuleSchedule2 . Type
92
+ ) . to . equal ( 'AWS::Events::Rule' ) ;
93
+ expect ( serverlessStepFunctions . serverless . service
94
+ . provider . compiledCloudFormationTemplate . Resources
95
+ . FirstStepFunctionsEventsRuleSchedule3 . Type
96
+ ) . to . equal ( 'AWS::Events::Rule' ) ;
97
+ expect ( serverlessStepFunctions . serverless . service
98
+ . provider . compiledCloudFormationTemplate . Resources
99
+ . FirstScheduleToStepFunctionsRole . Type
100
+ ) . to . equal ( 'AWS::IAM::Role' ) ;
101
+ } ) ;
102
+
103
+ it ( 'should respect enabled variable, defaulting to true' , ( ) => {
104
+ serverlessStepFunctions . serverless . service . stepFunctions = {
105
+ stateMachines : {
106
+ first : {
107
+ events : [
108
+ {
109
+ schedule : {
110
+ rate : 'rate(10 minutes)' ,
111
+ enabled : false ,
112
+ } ,
113
+ } ,
114
+ {
115
+ schedule : {
116
+ rate : 'rate(10 minutes)' ,
117
+ enabled : true ,
118
+ } ,
119
+ } ,
120
+ {
121
+ schedule : {
122
+ rate : 'rate(10 minutes)' ,
123
+ } ,
124
+ } ,
125
+ {
126
+ schedule : 'rate(10 minutes)' ,
127
+ } ,
128
+ ] ,
129
+ } ,
130
+ } ,
131
+ } ;
132
+
133
+ serverlessStepFunctions . compileScheduledEvents ( ) ;
134
+
135
+ expect ( serverlessStepFunctions . serverless . service
136
+ . provider . compiledCloudFormationTemplate . Resources
137
+ . FirstStepFunctionsEventsRuleSchedule1
138
+ . Properties . State
139
+ ) . to . equal ( 'DISABLED' ) ;
140
+ expect ( serverlessStepFunctions . serverless . service
141
+ . provider . compiledCloudFormationTemplate . Resources
142
+ . FirstStepFunctionsEventsRuleSchedule2
143
+ . Properties . State
144
+ ) . to . equal ( 'ENABLED' ) ;
145
+ expect ( serverlessStepFunctions . serverless . service
146
+ . provider . compiledCloudFormationTemplate . Resources
147
+ . FirstStepFunctionsEventsRuleSchedule3
148
+ . Properties . State
149
+ ) . to . equal ( 'ENABLED' ) ;
150
+ expect ( serverlessStepFunctions . serverless . service
151
+ . provider . compiledCloudFormationTemplate . Resources
152
+ . FirstStepFunctionsEventsRuleSchedule4
153
+ . Properties . State
154
+ ) . to . equal ( 'ENABLED' ) ;
155
+ } ) ;
156
+
157
+ it ( 'should respect name variable' , ( ) => {
158
+ serverlessStepFunctions . serverless . service . stepFunctions = {
159
+ stateMachines : {
160
+ first : {
161
+ events : [
162
+ {
163
+ schedule : {
164
+ rate : 'rate(10 minutes)' ,
165
+ enabled : false ,
166
+ name : 'your-scheduled-event-name' ,
167
+ } ,
168
+ } ,
169
+ ] ,
170
+ } ,
171
+ } ,
172
+ } ;
173
+
174
+ serverlessStepFunctions . compileScheduledEvents ( ) ;
175
+
176
+ expect ( serverlessStepFunctions . serverless . service
177
+ . provider . compiledCloudFormationTemplate . Resources
178
+ . FirstStepFunctionsEventsRuleSchedule1
179
+ . Properties . Name
180
+ ) . to . equal ( 'your-scheduled-event-name' ) ;
181
+ } ) ;
182
+
183
+ it ( 'should respect description variable' , ( ) => {
184
+ serverlessStepFunctions . serverless . service . stepFunctions = {
185
+ stateMachines : {
186
+ first : {
187
+ events : [
188
+ {
189
+ schedule : {
190
+ rate : 'rate(10 minutes)' ,
191
+ enabled : false ,
192
+ description : 'your scheduled event description' ,
193
+ } ,
194
+ } ,
195
+ ] ,
196
+ } ,
197
+ } ,
198
+ } ;
199
+
200
+ serverlessStepFunctions . compileScheduledEvents ( ) ;
201
+
202
+ expect ( serverlessStepFunctions . serverless . service
203
+ . provider . compiledCloudFormationTemplate . Resources
204
+ . FirstStepFunctionsEventsRuleSchedule1
205
+ . Properties . Description
206
+ ) . to . equal ( 'your scheduled event description' ) ;
207
+ } ) ;
208
+
209
+ it ( 'should respect inputPath variable' , ( ) => {
210
+ serverlessStepFunctions . serverless . service . stepFunctions = {
211
+ stateMachines : {
212
+ first : {
213
+ events : [
214
+ {
215
+ schedule : {
216
+ rate : 'rate(10 minutes)' ,
217
+ enabled : false ,
218
+ inputPath : '$.stageVariables' ,
219
+ } ,
220
+ } ,
221
+ ] ,
222
+ } ,
223
+ } ,
224
+ } ;
225
+
226
+ serverlessStepFunctions . compileScheduledEvents ( ) ;
227
+
228
+ expect ( serverlessStepFunctions . serverless . service
229
+ . provider . compiledCloudFormationTemplate . Resources
230
+ . FirstStepFunctionsEventsRuleSchedule1
231
+ . Properties . Targets [ 0 ] . InputPath
232
+ ) . to . equal ( '$.stageVariables' ) ;
233
+ } ) ;
234
+
235
+ it ( 'should respect input variable' , ( ) => {
236
+ serverlessStepFunctions . serverless . service . stepFunctions = {
237
+ stateMachines : {
238
+ first : {
239
+ events : [
240
+ {
241
+ schedule : {
242
+ rate : 'rate(10 minutes)' ,
243
+ enabled : false ,
244
+ input : '{"key":"value"}' ,
245
+ } ,
246
+ } ,
247
+ ] ,
248
+ } ,
249
+ } ,
250
+ } ;
251
+
252
+ serverlessStepFunctions . compileScheduledEvents ( ) ;
253
+
254
+ expect ( serverlessStepFunctions . serverless . service
255
+ . provider . compiledCloudFormationTemplate . Resources
256
+ . FirstStepFunctionsEventsRuleSchedule1
257
+ . Properties . Targets [ 0 ] . Input
258
+ ) . to . equal ( '{"key":"value"}' ) ;
259
+ } ) ;
260
+
261
+ it ( 'should respect input variable as an object' , ( ) => {
262
+ serverlessStepFunctions . serverless . service . stepFunctions = {
263
+ stateMachines : {
264
+ first : {
265
+ events : [
266
+ {
267
+ schedule : {
268
+ rate : 'rate(10 minutes)' ,
269
+ enabled : false ,
270
+ input : {
271
+ key : 'value' ,
272
+ } ,
273
+ } ,
274
+ } ,
275
+ ] ,
276
+ } ,
277
+ } ,
278
+ } ;
279
+
280
+ serverlessStepFunctions . compileScheduledEvents ( ) ;
281
+
282
+ expect ( serverlessStepFunctions . serverless . service
283
+ . provider . compiledCloudFormationTemplate . Resources
284
+ . FirstStepFunctionsEventsRuleSchedule1
285
+ . Properties . Targets [ 0 ] . Input
286
+ ) . to . equal ( '{"key":"value"}' ) ;
287
+ } ) ;
288
+
289
+ it ( 'should throw an error when both Input and InputPath are set' , ( ) => {
290
+ serverlessStepFunctions . serverless . service . stepFunctions = {
291
+ stateMachines : {
292
+ first : {
293
+ events : [
294
+ {
295
+ schedule : {
296
+ rate : 'rate(10 minutes)' ,
297
+ enabled : false ,
298
+ input : {
299
+ key : 'value' ,
300
+ } ,
301
+ inputPath : '$.stageVariables' ,
302
+ } ,
303
+ } ,
304
+ ] ,
305
+ } ,
306
+ } ,
307
+ } ;
308
+
309
+ expect ( ( ) => serverlessStepFunctions . compileScheduledEvents ( ) ) . to . throw ( Error ) ;
310
+ } ) ;
311
+
312
+ it ( 'should not create corresponding resources when scheduled events are not given' , ( ) => {
313
+ serverlessStepFunctions . serverless . service . stepFunctions = {
314
+ stateMachines : {
315
+ first : {
316
+ } ,
317
+ } ,
318
+ } ;
319
+
320
+ serverlessStepFunctions . compileScheduledEvents ( ) ;
321
+
322
+ expect (
323
+ serverlessStepFunctions . serverless . service . provider . compiledCloudFormationTemplate
324
+ . Resources
325
+ ) . to . deep . equal ( { } ) ;
326
+
327
+ serverlessStepFunctions . serverless . service . stepFunctions = {
328
+ stateMachines : {
329
+ first : {
330
+ events : [
331
+ 'schedule' ,
332
+ ] ,
333
+ } ,
334
+ } ,
335
+ } ;
336
+
337
+ serverlessStepFunctions . compileScheduledEvents ( ) ;
338
+
339
+ expect (
340
+ serverlessStepFunctions . serverless . service . provider . compiledCloudFormationTemplate
341
+ . Resources
342
+ ) . to . deep . equal ( { } ) ;
343
+ } ) ;
344
+ } ) ;
21
345
} ) ;
0 commit comments