Skip to content

Commit ba678a9

Browse files
author
Pijush Chakraborty
committed
Config values must retrun default values from invalid get operations
1 parent 5f6f03e commit ba678a9

File tree

2 files changed

+37
-21
lines changed

2 files changed

+37
-21
lines changed

firebase_admin/remote_config.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,7 @@ def evaluate_custom_signal_condition(self, custom_signal_condition,
479479
return not self._compare_strings(target_custom_signal_values,
480480
actual_custom_signal_value,
481481
lambda target, actual: target in actual)
482-
if (custom_signal_operator == CustomSignalOperator.STRING_EXACTLY_MATCHES.value):
482+
if custom_signal_operator == CustomSignalOperator.STRING_EXACTLY_MATCHES.value:
483483
return self._compare_strings(target_custom_signal_values,
484484
actual_custom_signal_value,
485485
lambda target, actual: target.strip() == actual.strip())
@@ -676,7 +676,7 @@ def as_string(self) -> str:
676676
"""Returns the value as a string."""
677677
if self.source == 'static':
678678
return self.DEFAULT_VALUE_FOR_STRING
679-
return self.value
679+
return str(self.value)
680680

681681
def as_boolean(self) -> bool:
682682
"""Returns the value as a boolean."""
@@ -688,13 +688,19 @@ def as_int(self) -> float:
688688
"""Returns the value as a number."""
689689
if self.source == 'static':
690690
return self.DEFAULT_VALUE_FOR_INTEGER
691-
return self.value
691+
try:
692+
return int(self.value)
693+
except ValueError:
694+
return self.DEFAULT_VALUE_FOR_INTEGER
692695

693696
def as_float(self) -> float:
694697
"""Returns the value as a number."""
695698
if self.source == 'static':
696699
return self.DEFAULT_VALUE_FOR_FLOAT_NUMBER
697-
return float(self.value)
700+
try:
701+
return float(self.value)
702+
except ValueError:
703+
return self.DEFAULT_VALUE_FOR_FLOAT_NUMBER
698704

699705
def get_source(self) -> ValueSource:
700706
"""Returns the source of the value."""

tests/test_remote_config.py

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,16 @@
6767
'version': VERSION_INFO,
6868
}
6969

70-
SEMENTIC_VERSION_LESS_THAN_TRUE = [CustomSignalOperator.SEMANTIC_VERSION_LESS_THAN.value, ['12.1.3.444'], '12.1.3.443', True]
71-
SEMENTIC_VERSION_EQUAL_TRUE = [CustomSignalOperator.SEMANTIC_VERSION_EQUAL.value, ['12.1.3.444'], '12.1.3.444', True]
72-
SEMANTIC_VERSION_GREATER_THAN_FALSE = [CustomSignalOperator.SEMANTIC_VERSION_LESS_THAN.value, ['12.1.3.4'], '12.1.3.4', False]
73-
SEMANTIC_VERSION_INVALID_FORMAT_STRING = [CustomSignalOperator.SEMANTIC_VERSION_LESS_THAN.value, ['12.1.3.444'], '12.1.3.abc', False]
74-
SEMANTIC_VERSION_INVALID_FORMAT_NEGATIVE_INTEGER = [CustomSignalOperator.SEMANTIC_VERSION_LESS_THAN.value, ['12.1.3.444'], '12.1.3.-2', False]
70+
SEMENTIC_VERSION_LESS_THAN_TRUE = [
71+
CustomSignalOperator.SEMANTIC_VERSION_LESS_THAN.value, ['12.1.3.444'], '12.1.3.443', True]
72+
SEMENTIC_VERSION_EQUAL_TRUE = [
73+
CustomSignalOperator.SEMANTIC_VERSION_EQUAL.value, ['12.1.3.444'], '12.1.3.444', True]
74+
SEMANTIC_VERSION_GREATER_THAN_FALSE = [
75+
CustomSignalOperator.SEMANTIC_VERSION_LESS_THAN.value, ['12.1.3.4'], '12.1.3.4', False]
76+
SEMANTIC_VERSION_INVALID_FORMAT_STRING = [
77+
CustomSignalOperator.SEMANTIC_VERSION_LESS_THAN.value, ['12.1.3.444'], '12.1.3.abc', False]
78+
SEMANTIC_VERSION_INVALID_FORMAT_NEGATIVE_INTEGER = [
79+
CustomSignalOperator.SEMANTIC_VERSION_LESS_THAN.value, ['12.1.3.444'], '12.1.3.-2', False]
7580

7681
class TestEvaluate:
7782
@classmethod
@@ -279,7 +284,7 @@ def test_evaluate_default_when_no_param(self):
279284
)
280285
server_config = server_template.evaluate()
281286
assert server_config.get_boolean('promo_enabled') == default_config.get('promo_enabled')
282-
assert server_config.get_int('promo_discount') == default_config.get('promo_discount')
287+
assert server_config.get_int('promo_discount') == int(default_config.get('promo_discount'))
283288

284289
def test_evaluate_default_when_no_default_value(self):
285290
app = firebase_admin.get_app()
@@ -341,7 +346,7 @@ def test_evaluate_return_numeric_value(self):
341346
template_data=ServerTemplateData('etag', template_data)
342347
)
343348
server_config = server_template.evaluate()
344-
assert server_config.get_int('dog_age') == default_config.get('dog_age')
349+
assert server_config.get_int('dog_age') == int(default_config.get('dog_age'))
345350

346351
def test_evaluate_return_boolean_value(self):
347352
app = firebase_admin.get_app()
@@ -757,16 +762,21 @@ def evaluate_random_assignments(self, condition, num_of_assignments, mock_app, d
757762

758763
return eval_true_count
759764

760-
@pytest.mark.parametrize('custom_signal_opearator, target_custom_signal_value, actual_custom_signal_value, parameter_value',
761-
[
762-
SEMENTIC_VERSION_LESS_THAN_TRUE,
763-
SEMANTIC_VERSION_GREATER_THAN_FALSE,
764-
SEMENTIC_VERSION_EQUAL_TRUE,
765-
SEMANTIC_VERSION_INVALID_FORMAT_NEGATIVE_INTEGER,
766-
SEMANTIC_VERSION_INVALID_FORMAT_STRING
767-
])
768-
def test_evaluate_custom_signal_semantic_version(self, custom_signal_opearator,
769-
target_custom_signal_value, actual_custom_signal_value, parameter_value):
765+
@pytest.mark.parametrize(
766+
'custom_signal_opearator, \
767+
target_custom_signal_value, actual_custom_signal_value, parameter_value',
768+
[
769+
SEMENTIC_VERSION_LESS_THAN_TRUE,
770+
SEMANTIC_VERSION_GREATER_THAN_FALSE,
771+
SEMENTIC_VERSION_EQUAL_TRUE,
772+
SEMANTIC_VERSION_INVALID_FORMAT_NEGATIVE_INTEGER,
773+
SEMANTIC_VERSION_INVALID_FORMAT_STRING
774+
])
775+
def test_evaluate_custom_signal_semantic_version(self,
776+
custom_signal_opearator,
777+
target_custom_signal_value,
778+
actual_custom_signal_value,
779+
parameter_value):
770780
app = firebase_admin.get_app()
771781
condition = {
772782
'name': 'is_true',

0 commit comments

Comments
 (0)