Skip to content

Commit aa291fb

Browse files
committed
add test
1 parent 0167216 commit aa291fb

File tree

2 files changed

+332
-0
lines changed

2 files changed

+332
-0
lines changed

lib/deploy/events/schedule/compileScheduledEvents.test.js

Lines changed: 324 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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
});

lib/index.test.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ describe('#index', () => {
8787

8888
it('should run package:compileEvents promise chain in order when http event is empty',
8989
() => {
90+
const compileScheduledEventsStub = sinon
91+
.stub(serverlessStepFunctions, 'compileScheduledEvents').returns(BbPromise.resolve());
9092
const httpValidateStub = sinon
9193
.stub(serverlessStepFunctions, 'httpValidate').returns({ events: [] });
9294
const compileRestApiStub = sinon
@@ -103,13 +105,15 @@ describe('#index', () => {
103105
.stub(serverlessStepFunctions, 'compileDeployment').returns(BbPromise.resolve());
104106
return serverlessStepFunctions.hooks['package:compileEvents']()
105107
.then(() => {
108+
expect(compileScheduledEventsStub.calledOnce).to.be.equal(true);
106109
expect(httpValidateStub.calledOnce).to.be.equal(true);
107110
expect(compileRestApiStub.notCalled).to.be.equal(true);
108111
expect(compileResourcesStub.notCalled).to.be.equal(true);
109112
expect(compileMethodsStub.notCalled).to.be.equal(true);
110113
expect(compileCorsStub.notCalled).to.be.equal(true);
111114
expect(compileHttpIamRoleStub.notCalled).to.be.equal(true);
112115
expect(compileDeploymentStub.notCalled).to.be.equal(true);
116+
serverlessStepFunctions.compileScheduledEvents.restore();
113117
serverlessStepFunctions.httpValidate.restore();
114118
serverlessStepFunctions.compileRestApi.restore();
115119
serverlessStepFunctions.compileResources.restore();
@@ -122,6 +126,8 @@ describe('#index', () => {
122126

123127
it('should run package:compileEvents promise chain in order',
124128
() => {
129+
const compileScheduledEventsStub = sinon
130+
.stub(serverlessStepFunctions, 'compileScheduledEvents').returns(BbPromise.resolve());
125131
const httpValidateStub = sinon
126132
.stub(serverlessStepFunctions, 'httpValidate').returns({ events: [1, 2, 3] });
127133
const compileRestApiStub = sinon
@@ -138,6 +144,7 @@ describe('#index', () => {
138144
.stub(serverlessStepFunctions, 'compileDeployment').returns(BbPromise.resolve());
139145
return serverlessStepFunctions.hooks['package:compileEvents']()
140146
.then(() => {
147+
expect(compileScheduledEventsStub.calledOnce).to.be.equal(true);
141148
expect(httpValidateStub.calledOnce).to.be.equal(true);
142149
expect(compileRestApiStub.calledOnce).to.be.equal(true);
143150
expect(compileResourcesStub.calledAfter(compileRestApiStub)).to.be.equal(true);
@@ -146,6 +153,7 @@ describe('#index', () => {
146153
expect(compileHttpIamRoleStub.calledAfter(compileCorsStub)).to.be.equal(true);
147154
expect(compileDeploymentStub.calledAfter(compileHttpIamRoleStub)).to.be.equal(true);
148155

156+
serverlessStepFunctions.compileScheduledEvents.restore();
149157
serverlessStepFunctions.httpValidate.restore();
150158
serverlessStepFunctions.compileRestApi.restore();
151159
serverlessStepFunctions.compileResources.restore();

0 commit comments

Comments
 (0)