diff --git a/tests/helpers_tests/test_condition.py b/tests/helpers_tests/test_condition.py index 47daebf5..625a5c32 100644 --- a/tests/helpers_tests/test_condition.py +++ b/tests/helpers_tests/test_condition.py @@ -290,19 +290,27 @@ def test_exact__given_number_values__calls_is_finite_number(self): exact_int_condition_list, {'lasers_count': 9000} ) + # assert that isFiniteNumber only needs to reject condition value to stop evaluation. with mock.patch('optimizely.helpers.validator.is_finite_number', - return_value=True) as mock_is_finite: - self.assertTrue(evaluator.evaluate(0)) - mock_is_finite.assert_called_with(9000) + side_effect=[False, True]) as mock_is_finite: + self.assertIsNone(evaluator.evaluate(0)) - evaluator = condition_helper.CustomAttributeConditionEvaluator( - exact_int_condition_list, {'lasers_count': 9000.0} - ) + mock_is_finite.assert_called_once_with(9000) + # assert that isFiniteNumber evaluates user value only if it has accepted condition value. with mock.patch('optimizely.helpers.validator.is_finite_number', - return_value=False) as mock_is_finite: + side_effect=[True, False]) as mock_is_finite: self.assertIsNone(evaluator.evaluate(0)) - mock_is_finite.assert_called_with(9000.0) + + mock_is_finite.assert_has_calls([mock.call(9000), mock.call(9000)]) + + # assert CustomAttributeConditionEvaluator.evaluate returns True only when isFiniteNumber returns + # True both for condition and user values. + with mock.patch('optimizely.helpers.validator.is_finite_number', + side_effect=[True, True]) as mock_is_finite: + self.assertTrue(evaluator.evaluate(0)) + + mock_is_finite.assert_has_calls([mock.call(9000), mock.call(9000)]) def test_exact_bool__returns_true__when_user_provided_value_is_equal_to_condition_value(self): diff --git a/tests/helpers_tests/test_validator.py b/tests/helpers_tests/test_validator.py index cca4a0c5..a1daa282 100644 --- a/tests/helpers_tests/test_validator.py +++ b/tests/helpers_tests/test_validator.py @@ -173,23 +173,23 @@ def test_is_attribute_valid(self): # test if attribute value is a number, it calls is_finite_number and returns it's result with mock.patch('optimizely.helpers.validator.is_finite_number', - return_value=True) as is_finite: + return_value=True) as mock_is_finite: self.assertTrue(validator.is_attribute_valid('test_attribute', 5)) - is_finite.assert_called_once_with(5) + mock_is_finite.assert_called_once_with(5) with mock.patch('optimizely.helpers.validator.is_finite_number', - return_value=False) as is_finite: + return_value=False) as mock_is_finite: self.assertFalse(validator.is_attribute_valid('test_attribute', 5.5)) - is_finite.assert_called_once_with(5.5) + mock_is_finite.assert_called_once_with(5.5) if PY2: with mock.patch('optimizely.helpers.validator.is_finite_number', - return_value=None) as is_finite: + return_value=None) as mock_is_finite: self.assertIsNone(validator.is_attribute_valid('test_attribute', long(5))) - is_finite.assert_called_once_with(long(5)) + mock_is_finite.assert_called_once_with(long(5)) def test_is_finite_number(self): """ Test that it returns true if value is a number and not NAN, INF, -INF or greater than 2^53.