@@ -45,7 +45,6 @@ const RULESET_NAME_PATTERN = /[0-9a-zA-Z-]+/;
45
45
46
46
describe ( 'admin.securityRules' , ( ) => {
47
47
48
- let testRuleset : admin . securityRules . Ruleset = null ;
49
48
const rulesetsToDelete : string [ ] = [ ] ;
50
49
51
50
function scheduleForDelete ( ruleset : admin . securityRules . Ruleset ) {
@@ -65,7 +64,17 @@ describe('admin.securityRules', () => {
65
64
return Promise . all ( promises ) ;
66
65
}
67
66
68
- after ( ( ) => {
67
+ function createTemporaryRuleset ( ) : Promise < admin . securityRules . Ruleset > {
68
+ const name = 'firestore.rules' ;
69
+ const rulesFile = admin . securityRules ( ) . createRulesFileFromSource ( name , SAMPLE_FIRESTORE_RULES ) ;
70
+ return admin . securityRules ( ) . createRuleset ( rulesFile )
71
+ . then ( ( ruleset ) => {
72
+ scheduleForDelete ( ruleset ) ;
73
+ return ruleset ;
74
+ } ) ;
75
+ }
76
+
77
+ afterEach ( ( ) => {
69
78
return deleteTempRulesets ( ) ;
70
79
} ) ;
71
80
@@ -91,7 +100,6 @@ describe('admin.securityRules', () => {
91
100
RULES_FILE_NAME , SAMPLE_FIRESTORE_RULES ) ;
92
101
return admin . securityRules ( ) . createRuleset ( rulesFile )
93
102
. then ( ( ruleset ) => {
94
- testRuleset = ruleset ;
95
103
scheduleForDelete ( ruleset ) ;
96
104
verifyFirestoreRuleset ( ruleset ) ;
97
105
} ) ;
@@ -107,38 +115,41 @@ describe('admin.securityRules', () => {
107
115
108
116
describe ( 'getRuleset()' , ( ) => {
109
117
it ( 'rejects with not-found when the Ruleset does not exist' , ( ) => {
110
- const name = 'e1212' + testRuleset . name . substring ( 5 ) ;
111
- return admin . securityRules ( ) . getRuleset ( name )
118
+ const nonExistingName = '00000000-1111-2222-3333-444444444444' ;
119
+ return admin . securityRules ( ) . getRuleset ( nonExistingName )
112
120
. should . eventually . be . rejected . and . have . property ( 'code' , 'security-rules/not-found' ) ;
113
121
} ) ;
114
122
115
123
it ( 'rejects with invalid-argument when the Ruleset name is invalid' , ( ) => {
116
- return admin . securityRules ( ) . getRuleset ( 'invalid' )
124
+ return admin . securityRules ( ) . getRuleset ( 'invalid uuid ' )
117
125
. should . eventually . be . rejected . and . have . property ( 'code' , 'security-rules/invalid-argument' ) ;
118
126
} ) ;
119
127
120
128
it ( 'resolves with existing Ruleset' , ( ) => {
121
- return admin . securityRules ( ) . getRuleset ( testRuleset . name )
122
- . then ( ( ruleset ) => {
123
- verifyFirestoreRuleset ( ruleset ) ;
124
- } ) ;
129
+ return createTemporaryRuleset ( )
130
+ . then ( ( expectedRuleset ) =>
131
+ admin . securityRules ( ) . getRuleset ( expectedRuleset . name )
132
+ . then ( ( actualRuleset ) => {
133
+ expect ( actualRuleset ) . to . deep . equal ( expectedRuleset ) ;
134
+ } ) ,
135
+ ) ;
125
136
} ) ;
126
137
} ) ;
127
138
128
139
describe ( 'Cloud Firestore' , ( ) => {
129
140
let oldRuleset : admin . securityRules . Ruleset = null ;
130
141
let newRuleset : admin . securityRules . Ruleset = null ;
131
142
132
- function revertFirestoreRuleset ( ) : Promise < void > {
143
+ function revertFirestoreRulesetIfModified ( ) : Promise < void > {
133
144
if ( ! newRuleset ) {
134
145
return Promise . resolve ( ) ;
135
146
}
136
147
137
148
return admin . securityRules ( ) . releaseFirestoreRuleset ( oldRuleset ) ;
138
149
}
139
150
140
- after ( ( ) => {
141
- return revertFirestoreRuleset ( ) ;
151
+ afterEach ( ( ) => {
152
+ return revertFirestoreRulesetIfModified ( ) ;
142
153
} ) ;
143
154
144
155
it ( 'getFirestoreRuleset() returns the Ruleset currently in effect' , ( ) => {
@@ -177,16 +188,16 @@ describe('admin.securityRules', () => {
177
188
let oldRuleset : admin . securityRules . Ruleset = null ;
178
189
let newRuleset : admin . securityRules . Ruleset = null ;
179
190
180
- function revertStorageRuleset ( ) : Promise < void > {
191
+ function revertStorageRulesetIfModified ( ) : Promise < void > {
181
192
if ( ! newRuleset ) {
182
193
return Promise . resolve ( ) ;
183
194
}
184
195
185
196
return admin . securityRules ( ) . releaseStorageRuleset ( oldRuleset ) ;
186
197
}
187
198
188
- after ( ( ) => {
189
- return revertStorageRuleset ( ) ;
199
+ afterEach ( ( ) => {
200
+ return revertStorageRulesetIfModified ( ) ;
190
201
} ) ;
191
202
192
203
it ( 'getStorageRuleset() returns the currently applied Storage rules' , ( ) => {
@@ -240,9 +251,13 @@ describe('admin.securityRules', () => {
240
251
} ) ;
241
252
}
242
253
243
- return listAllRulesets ( )
244
- . then ( ( rulesets ) => {
245
- expect ( rulesets . some ( ( rs ) => rs . name === testRuleset . name ) ) . to . be . true ;
254
+ return Promise . all ( [ createTemporaryRuleset ( ) , createTemporaryRuleset ( ) ] )
255
+ . then ( ( expectedRulesets ) => {
256
+ return listAllRulesets ( ) . then ( ( actualRulesets ) => {
257
+ expectedRulesets . forEach ( ( expectedRuleset ) => {
258
+ expect ( actualRulesets . map ( ( r ) => r . name ) ) . to . deep . include ( expectedRuleset . name ) ;
259
+ } ) ;
260
+ } ) ;
246
261
} ) ;
247
262
} ) ;
248
263
@@ -257,26 +272,27 @@ describe('admin.securityRules', () => {
257
272
258
273
describe ( 'deleteRuleset()' , ( ) => {
259
274
it ( 'rejects with not-found when the Ruleset does not exist' , ( ) => {
260
- const name = 'e1212' + testRuleset . name . substring ( 5 ) ;
261
- return admin . securityRules ( ) . deleteRuleset ( name )
275
+ const nonExistingName = '00000000-1111-2222-3333-444444444444' ;
276
+ return admin . securityRules ( ) . deleteRuleset ( nonExistingName )
262
277
. should . eventually . be . rejected . and . have . property ( 'code' , 'security-rules/not-found' ) ;
263
278
} ) ;
264
279
265
280
it ( 'rejects with invalid-argument when the Ruleset name is invalid' , ( ) => {
266
- return admin . securityRules ( ) . deleteRuleset ( 'invalid' )
281
+ return admin . securityRules ( ) . deleteRuleset ( 'invalid uuid ' )
267
282
. should . eventually . be . rejected . and . have . property ( 'code' , 'security-rules/invalid-argument' ) ;
268
283
} ) ;
269
284
270
285
it ( 'deletes existing Ruleset' , ( ) => {
271
- return admin . securityRules ( ) . deleteRuleset ( testRuleset . name )
272
- . then ( ( ) => {
273
- return admin . securityRules ( ) . getRuleset ( testRuleset . name )
274
- . should . eventually . be . rejected . and . have . property ( 'code' , 'security-rules/not-found' ) ;
275
- } )
276
- . then ( ( ) => {
277
- unscheduleForDelete ( testRuleset ) ; // Already deleted.
278
- testRuleset = null ;
279
- } ) ;
286
+ return createTemporaryRuleset ( ) . then ( ( ruleset ) => {
287
+ return admin . securityRules ( ) . deleteRuleset ( ruleset . name )
288
+ . then ( ( ) => {
289
+ return admin . securityRules ( ) . getRuleset ( ruleset . name )
290
+ . should . eventually . be . rejected . and . have . property ( 'code' , 'security-rules/not-found' ) ;
291
+ } )
292
+ . then ( ( ) => {
293
+ unscheduleForDelete ( ruleset ) ; // Already deleted.
294
+ } ) ;
295
+ } ) ;
280
296
} ) ;
281
297
} ) ;
282
298
0 commit comments