@@ -16,6 +16,330 @@ describe('#httpValidate()', () => {
1616 stage : 'dev' ,
1717 region : 'us-east-1' ,
1818 } ;
19+ serverless . service . provider . compiledCloudFormationTemplate = { Resources : { } } ;
1920 serverlessStepFunctions = new ServerlessStepFunctions ( serverless , options ) ;
2021 } ) ;
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+ } ) ;
21345} ) ;
0 commit comments