1
1
import Serverless from "serverless" ;
2
2
import { MockFactory } from "../test/mockFactory" ;
3
3
import { ArmService } from "./armService" ;
4
- import { ArmResourceTemplate , ArmTemplateType } from "../models/armTemplates" ;
4
+ import { ArmResourceTemplate , ArmTemplateType , ArmDeployment } from "../models/armTemplates" ;
5
5
import { ArmTemplateConfig , ServerlessAzureOptions } from "../models/serverless" ;
6
6
import mockFs from "mock-fs" ;
7
7
import jsonpath from "jsonpath" ;
8
8
import { Deployments } from "@azure/arm-resources" ;
9
9
import { Deployment } from "@azure/arm-resources/esm/models" ;
10
+ import { ResourceService } from "./resourceService" ;
10
11
11
12
describe ( "Arm Service" , ( ) => {
12
13
let sls : Serverless
@@ -29,6 +30,13 @@ describe("Arm Service", () => {
29
30
} ;
30
31
31
32
service = createService ( ) ;
33
+ ResourceService . prototype . getDeployments = jest . fn ( ( ) => MockFactory . createTestDeployments ( ) ) as any ;
34
+ ResourceService . prototype . getDeploymentTemplate = jest . fn ( ( ) => {
35
+ return {
36
+ template : MockFactory . createTestArmTemplate ( )
37
+ }
38
+ } ) as any ;
39
+
32
40
} )
33
41
34
42
afterEach ( ( ) => {
@@ -151,6 +159,51 @@ describe("Arm Service", () => {
151
159
Deployments . prototype . createOrUpdate = jest . fn ( ( ) => Promise . resolve ( null ) ) ;
152
160
} ) ;
153
161
162
+ it ( "Does not deploy if previously deployed template is the same" , async ( ) => {
163
+ const deployment : ArmDeployment = {
164
+ parameters : MockFactory . createTestParameters ( false ) ,
165
+ template : MockFactory . createTestArmTemplate ( )
166
+ } ;
167
+ await service . deployTemplate ( deployment ) ;
168
+ expect ( Deployments . prototype . createOrUpdate ) . not . toBeCalled ( )
169
+ } ) ;
170
+
171
+ it ( "Calls deploy if parameters have changed from deployed template" , async ( ) => {
172
+ const deployment : ArmDeployment = {
173
+ parameters : MockFactory . createTestParameters ( false ) ,
174
+ template : MockFactory . createTestArmTemplate ( )
175
+ } ;
176
+ deployment . parameters . param1 = "3"
177
+ await service . deployTemplate ( deployment ) ;
178
+ expect ( Deployments . prototype . createOrUpdate ) . toBeCalled ( ) ;
179
+ } ) ;
180
+
181
+ it ( "Calls deploy if previously deployed template is different" , async ( ) => {
182
+ ResourceService . prototype . getDeploymentTemplate = jest . fn ( ( ) => {
183
+ return {
184
+ template : { }
185
+ }
186
+ } ) as any ;
187
+ const deployment : ArmDeployment = {
188
+ parameters : MockFactory . createTestParameters ( false ) ,
189
+ template : MockFactory . createTestArmTemplate ( )
190
+ } ;
191
+ await service . deployTemplate ( deployment ) ;
192
+ expect ( Deployments . prototype . createOrUpdate ) . toBeCalled ( )
193
+ } ) ;
194
+
195
+ it ( "Calls deploy if running first deployment" , async ( ) => {
196
+ ResourceService . prototype . getDeployments = jest . fn ( ( ) => {
197
+ return [ ]
198
+ } ) as any ;
199
+ const deployment : ArmDeployment = {
200
+ parameters : MockFactory . createTestParameters ( false ) ,
201
+ template : MockFactory . createTestArmTemplate ( )
202
+ } ;
203
+ await service . deployTemplate ( deployment ) ;
204
+ expect ( Deployments . prototype . createOrUpdate ) . toBeCalled ( )
205
+ } ) ;
206
+
154
207
it ( "Appends environment variables into app settings of ARM template" , async ( ) => {
155
208
const environmentConfig : any = {
156
209
PARAM_1 : "1" ,
0 commit comments