1414
1515"""Tests for firebase_admin.remote_config."""
1616import uuid
17- from unittest import mock
1817import firebase_admin
1918from firebase_admin .remote_config import (
2019 PercentConditionOperator ,
2120 ServerTemplateData )
2221from firebase_admin import remote_config
22+ from tests import testutils
2323
2424VERSION_INFO = {
2525 'versionNumber' : '86' ,
6363 }
6464
6565class TestEvaluate :
66- def set_up (self ):
67- # Create a more specific mock for firebase_admin.App
68- self .mock_app = mock .create_autospec (firebase_admin .App )
69- self .mock_app .project_id = 'mock-project-id'
70- self .mock_app .name = 'mock-app-name'
66+ @classmethod
67+ def setup_class (cls ):
68+ cred = testutils .MockCredential ()
69+ firebase_admin .initialize_app (cred , {'projectId' : 'project-id' })
7170
72- # Mock initialize_app to return the mock App instance
73- self .mock_initialize_app = mock .patch ('firebase_admin.initialize_app' ).start ()
74- self .mock_initialize_app .return_value = self .mock_app
75-
76- # Mock the app registry
77- self .mock_get_app = mock .patch ('firebase_admin._utils.get_app_service' ).start ()
78- self .mock_get_app .return_value = self .mock_app
79-
80- def tear_down (self ):
81- mock .patch .stopall ()
71+ @classmethod
72+ def teardown_class (cls ):
73+ testutils .cleanup_apps ()
8274
8375 def test_evaluate_or_and_true_condition_true (self ):
84- self . set_up ()
76+ app = firebase_admin . get_app ()
8577 default_config = {'param1' : 'in_app_default_param1' , 'param3' : 'in_app_default_param3' }
8678 condition = {
8779 'name' : 'is_true' ,
@@ -116,17 +108,16 @@ def test_evaluate_or_and_true_condition_true(self):
116108 'etag' : '123'
117109 }
118110 server_template = remote_config .init_server_template (
119- app = self . mock_app ,
111+ app = app ,
120112 default_config = default_config ,
121113 template_data = ServerTemplateData ('etag' , template_data ) # Use ServerTemplateData here
122114 )
123115
124116 server_config = server_template .evaluate ()
125117 assert server_config .get_boolean ('is_enabled' )
126- self .tear_down ()
127118
128119 def test_evaluate_or_and_false_condition_false (self ):
129- self . set_up ()
120+ app = firebase_admin . get_app ()
130121 default_config = {'param1' : 'in_app_default_param1' , 'param3' : 'in_app_default_param3' }
131122 condition = {
132123 'name' : 'is_true' ,
@@ -161,17 +152,16 @@ def test_evaluate_or_and_false_condition_false(self):
161152 'etag' : '123'
162153 }
163154 server_template = remote_config .init_server_template (
164- app = self . mock_app ,
155+ app = app ,
165156 default_config = default_config ,
166157 template_data = ServerTemplateData ('etag' , template_data ) # Use ServerTemplateData here
167158 )
168159
169160 server_config = server_template .evaluate ()
170161 assert not server_config .get_boolean ('is_enabled' )
171- self .tear_down ()
172162
173163 def test_evaluate_non_or_condition (self ):
174- self . set_up ()
164+ app = firebase_admin . get_app ()
175165 default_config = {'param1' : 'in_app_default_param1' , 'param3' : 'in_app_default_param3' }
176166 condition = {
177167 'name' : 'is_true' ,
@@ -193,17 +183,16 @@ def test_evaluate_non_or_condition(self):
193183 'etag' : '123'
194184 }
195185 server_template = remote_config .init_server_template (
196- app = self . mock_app ,
186+ app = app ,
197187 default_config = default_config ,
198188 template_data = ServerTemplateData ('etag' , template_data ) # Use ServerTemplateData here
199189 )
200190
201191 server_config = server_template .evaluate ()
202192 assert server_config .get_boolean ('is_enabled' )
203- self .tear_down ()
204193
205194 def test_evaluate_return_conditional_values_honor_order (self ):
206- self . set_up ()
195+ app = firebase_admin . get_app ()
207196 default_config = {'param1' : 'in_app_default_param1' , 'param3' : 'in_app_default_param3' }
208197 template_data = {
209198 'conditions' : [
@@ -260,47 +249,44 @@ def test_evaluate_return_conditional_values_honor_order(self):
260249 'etag' : '123'
261250 }
262251 server_template = remote_config .init_server_template (
263- app = self . mock_app ,
252+ app = app ,
264253 default_config = default_config ,
265254 template_data = ServerTemplateData ('etag' , template_data ) # Use ServerTemplateData here
266255 )
267256 server_config = server_template .evaluate ()
268257 assert server_config .get_string ('dog_type' ) == 'corgi'
269- self .tear_down ()
270258
271259 def test_evaluate_default_when_no_param (self ):
272- self . set_up ()
260+ app = firebase_admin . get_app ()
273261 default_config = {'promo_enabled' : False , 'promo_discount' : 20 ,}
274262 template_data = SERVER_REMOTE_CONFIG_RESPONSE
275263 template_data ['parameters' ] = {}
276264 server_template = remote_config .init_server_template (
277- app = self . mock_app ,
265+ app = app ,
278266 default_config = default_config ,
279267 template_data = ServerTemplateData ('etag' , template_data ) # Use ServerTemplateData here
280268 )
281269 server_config = server_template .evaluate ()
282270 assert server_config .get_boolean ('promo_enabled' ) == default_config .get ('promo_enabled' )
283271 assert server_config .get_int ('promo_discount' ) == default_config .get ('promo_discount' )
284- self .tear_down ()
285272
286273 def test_evaluate_default_when_no_default_value (self ):
287- self . set_up ()
274+ app = firebase_admin . get_app ()
288275 default_config = {'default_value' : 'local default' }
289276 template_data = SERVER_REMOTE_CONFIG_RESPONSE
290277 template_data ['parameters' ] = {
291278 'default_value' : {}
292279 }
293280 server_template = remote_config .init_server_template (
294- app = self . mock_app ,
281+ app = app ,
295282 default_config = default_config ,
296283 template_data = ServerTemplateData ('etag' , template_data ) # Use ServerTemplateData here
297284 )
298285 server_config = server_template .evaluate ()
299286 assert server_config .get_string ('default_value' ) == default_config .get ('default_value' )
300- self .tear_down ()
301287
302288 def test_evaluate_default_when_in_default (self ):
303- self . set_up ()
289+ app = firebase_admin . get_app ()
304290 template_data = SERVER_REMOTE_CONFIG_RESPONSE
305291 template_data ['parameters' ] = {
306292 'remote_default_value' : {}
@@ -309,63 +295,59 @@ def test_evaluate_default_when_in_default(self):
309295 'inapp_default' : '🐕'
310296 }
311297 server_template = remote_config .init_server_template (
312- app = self . mock_app ,
298+ app = app ,
313299 default_config = default_config ,
314300 template_data = ServerTemplateData ('etag' , template_data ) # Use ServerTemplateData here
315301 )
316302 server_config = server_template .evaluate ()
317303 assert server_config .get_string ('inapp_default' ) == default_config .get ('inapp_default' )
318- self .tear_down ()
319304
320305 def test_evaluate_default_when_defined (self ):
321- self . set_up ()
306+ app = firebase_admin . get_app ()
322307 template_data = SERVER_REMOTE_CONFIG_RESPONSE
323308 template_data ['parameters' ] = {}
324309 default_config = {
325310 'dog_type' : 'shiba'
326311 }
327312 server_template = remote_config .init_server_template (
328- app = self . mock_app ,
313+ app = app ,
329314 default_config = default_config ,
330315 template_data = ServerTemplateData ('etag' , template_data ) # Use ServerTemplateData here
331316 )
332317 server_config = server_template .evaluate ()
333318 assert server_config .get_value ('dog_type' ).as_string () == 'shiba'
334319 assert server_config .get_value ('dog_type' ).get_source () == 'default'
335- self .tear_down ()
336320
337321 def test_evaluate_return_numeric_value (self ):
338- self . set_up ()
322+ app = firebase_admin . get_app ()
339323 template_data = SERVER_REMOTE_CONFIG_RESPONSE
340324 default_config = {
341325 'dog_age' : 12
342326 }
343327 server_template = remote_config .init_server_template (
344- app = self . mock_app ,
328+ app = app ,
345329 default_config = default_config ,
346330 template_data = ServerTemplateData ('etag' , template_data ) # Use ServerTemplateData here
347331 )
348332 server_config = server_template .evaluate ()
349333 assert server_config .get_int ('dog_age' ) == 12
350- self .tear_down ()
351334
352335 def test_evaluate_return__value (self ):
353- self . set_up ()
336+ app = firebase_admin . get_app ()
354337 template_data = SERVER_REMOTE_CONFIG_RESPONSE
355338 default_config = {
356339 'dog_is_cute' : True
357340 }
358341 server_template = remote_config .init_server_template (
359- app = self . mock_app ,
342+ app = app ,
360343 default_config = default_config ,
361344 template_data = ServerTemplateData ('etag' , template_data ) # Use ServerTemplateData here
362345 )
363346 server_config = server_template .evaluate ()
364347 assert server_config .get_int ('dog_is_cute' )
365- self .tear_down ()
366348
367349 def test_evaluate_unknown_operator_to_false (self ):
368- self . set_up ()
350+ app = firebase_admin . get_app ()
369351 condition = {
370352 'name' : 'is_true' ,
371353 'condition' : {
@@ -399,16 +381,15 @@ def test_evaluate_unknown_operator_to_false(self):
399381 }
400382 context = {'randomization_id' : '123' }
401383 server_template = remote_config .init_server_template (
402- app = self . mock_app ,
384+ app = app ,
403385 default_config = default_config ,
404386 template_data = ServerTemplateData ('etag' , template_data ) # Use ServerTemplateData here
405387 )
406388 server_config = server_template .evaluate (context )
407389 assert not server_config .get_boolean ('is_enabled' )
408- self .tear_down ()
409390
410391 def test_evaluate_less_or_equal_to_max_to_true (self ):
411- self . set_up ()
392+ app = firebase_admin . get_app ()
412393 condition = {
413394 'name' : 'is_true' ,
414395 'condition' : {
@@ -444,16 +425,15 @@ def test_evaluate_less_or_equal_to_max_to_true(self):
444425 }
445426 context = {'randomization_id' : '123' }
446427 server_template = remote_config .init_server_template (
447- app = self . mock_app ,
428+ app = app ,
448429 default_config = default_config ,
449430 template_data = ServerTemplateData ('etag' , template_data ) # Use ServerTemplateData here
450431 )
451432 server_config = server_template .evaluate (context )
452433 assert server_config .get_boolean ('is_enabled' )
453- self .tear_down ()
454434
455435 def test_evaluate_undefined_micropercent_to_false (self ):
456- self . set_up ()
436+ app = firebase_admin . get_app ()
457437 condition = {
458438 'name' : 'is_true' ,
459439 'condition' : {
@@ -488,16 +468,15 @@ def test_evaluate_undefined_micropercent_to_false(self):
488468 }
489469 context = {'randomization_id' : '123' }
490470 server_template = remote_config .init_server_template (
491- app = self . mock_app ,
471+ app = app ,
492472 default_config = default_config ,
493473 template_data = ServerTemplateData ('etag' , template_data ) # Use ServerTemplateData here
494474 )
495475 server_config = server_template .evaluate (context )
496476 assert not server_config .get_boolean ('is_enabled' )
497- self .tear_down ()
498477
499478 def test_evaluate_undefined_micropercentrange_to_false (self ):
500- self . set_up ()
479+ app = firebase_admin . get_app ()
501480 condition = {
502481 'name' : 'is_true' ,
503482 'condition' : {
@@ -532,16 +511,15 @@ def test_evaluate_undefined_micropercentrange_to_false(self):
532511 }
533512 context = {'randomization_id' : '123' }
534513 server_template = remote_config .init_server_template (
535- app = self . mock_app ,
514+ app = app ,
536515 default_config = default_config ,
537516 template_data = ServerTemplateData ('etag' , template_data ) # Use ServerTemplateData here
538517 )
539518 server_config = server_template .evaluate (context )
540519 assert not server_config .get_boolean ('is_enabled' )
541- self .tear_down ()
542520
543521 def test_evaluate_between_min_max_to_true (self ):
544- self . set_up ()
522+ app = firebase_admin . get_app ()
545523 condition = {
546524 'name' : 'is_true' ,
547525 'condition' : {
@@ -580,16 +558,15 @@ def test_evaluate_between_min_max_to_true(self):
580558 }
581559 context = {'randomization_id' : '123' }
582560 server_template = remote_config .init_server_template (
583- app = self . mock_app ,
561+ app = app ,
584562 default_config = default_config ,
585563 template_data = ServerTemplateData ('etag' , template_data ) # Use ServerTemplateData here
586564 )
587565 server_config = server_template .evaluate (context )
588566 assert server_config .get_boolean ('is_enabled' )
589- self .tear_down ()
590567
591568 def test_evaluate_between_equal_bounds_to_false (self ):
592- self . set_up ()
569+ app = firebase_admin . get_app ()
593570 condition = {
594571 'name' : 'is_true' ,
595572 'condition' : {
@@ -628,16 +605,15 @@ def test_evaluate_between_equal_bounds_to_false(self):
628605 }
629606 context = {'randomization_id' : '123' }
630607 server_template = remote_config .init_server_template (
631- app = self . mock_app ,
608+ app = app ,
632609 default_config = default_config ,
633610 template_data = ServerTemplateData ('etag' , template_data ) # Use ServerTemplateData here
634611 )
635612 server_config = server_template .evaluate (context )
636613 assert not server_config .get_boolean ('is_enabled' )
637- self .tear_down ()
638614
639615 def test_evaluate_less_or_equal_to_approx (self ):
640- self . set_up ()
616+ app = firebase_admin . get_app ()
641617 condition = {
642618 'name' : 'is_true' ,
643619 'condition' : {
@@ -661,14 +637,13 @@ def test_evaluate_less_or_equal_to_approx(self):
661637 }
662638
663639 truthy_assignments = self .evaluate_random_assignments (condition , 100000 ,
664- self . mock_app , default_config )
640+ app , default_config )
665641 tolerance = 284
666642 assert truthy_assignments >= 10000 - tolerance
667643 assert truthy_assignments <= 10000 + tolerance
668- self .tear_down ()
669644
670645 def test_evaluate_between_approx (self ):
671- self . set_up ()
646+ app = firebase_admin . get_app ()
672647 condition = {
673648 'name' : 'is_true' ,
674649 'condition' : {
@@ -695,14 +670,13 @@ def test_evaluate_between_approx(self):
695670 }
696671
697672 truthy_assignments = self .evaluate_random_assignments (condition , 100000 ,
698- self . mock_app , default_config )
673+ app , default_config )
699674 tolerance = 379
700675 assert truthy_assignments >= 20000 - tolerance
701676 assert truthy_assignments <= 20000 + tolerance
702- self .tear_down ()
703677
704678 def test_evaluate_between_interquartile_range_accuracy (self ):
705- self . set_up ()
679+ app = firebase_admin . get_app ()
706680 condition = {
707681 'name' : 'is_true' ,
708682 'condition' : {
@@ -729,11 +703,10 @@ def test_evaluate_between_interquartile_range_accuracy(self):
729703 }
730704
731705 truthy_assignments = self .evaluate_random_assignments (condition , 100000 ,
732- self . mock_app , default_config )
706+ app , default_config )
733707 tolerance = 474
734708 assert truthy_assignments >= 50000 - tolerance
735709 assert truthy_assignments <= 50000 + tolerance
736- self .tear_down ()
737710
738711 def evaluate_random_assignments (self , condition , num_of_assignments , mock_app , default_config ):
739712 """Evaluates random assignments based on a condition.
0 commit comments