@@ -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