|
11 | 11 | # See the License for the specific language governing permissions and
|
12 | 12 | # limitations under the License.
|
13 | 13 |
|
| 14 | +import sys |
14 | 15 | import unittest
|
| 16 | +from optimizely import logger |
15 | 17 |
|
16 | 18 | from optimizely.helpers import event_tag_utils
|
17 | 19 |
|
@@ -49,3 +51,78 @@ def test_get_revenue_value__revenue_tag(self):
|
49 | 51 | self.assertEqual(0, event_tag_utils.get_revenue_value({'revenue': 0}))
|
50 | 52 | self.assertEqual(65536, event_tag_utils.get_revenue_value({'revenue': 65536}))
|
51 | 53 | self.assertEqual(9223372036854775807, event_tag_utils.get_revenue_value({'revenue': 9223372036854775807}))
|
| 54 | + |
| 55 | + def test_get_numeric_metric__invalid_args(self): |
| 56 | + """ Test that numeric value is not returned for invalid arguments. """ |
| 57 | + self.assertIsNone(event_tag_utils.get_numeric_value(None)) |
| 58 | + self.assertIsNone(event_tag_utils.get_numeric_value(0.5)) |
| 59 | + self.assertIsNone(event_tag_utils.get_numeric_value(65536)) |
| 60 | + self.assertIsNone(event_tag_utils.get_numeric_value(9223372036854775807)) |
| 61 | + self.assertIsNone(event_tag_utils.get_numeric_value('9223372036854775807')) |
| 62 | + self.assertIsNone(event_tag_utils.get_numeric_value(True)) |
| 63 | + self.assertIsNone(event_tag_utils.get_numeric_value(False)) |
| 64 | + |
| 65 | + def test_get_numeric_metric__no_value_tag(self): |
| 66 | + """ Test that numeric value is not returned when there's no numeric event tag. """ |
| 67 | + self.assertIsNone(event_tag_utils.get_numeric_value([])) |
| 68 | + self.assertIsNone(event_tag_utils.get_numeric_value({})) |
| 69 | + self.assertIsNone(event_tag_utils.get_numeric_value({'non-value': 42})) |
| 70 | + |
| 71 | + def test_get_numeric_metric__invalid_value_tag(self): |
| 72 | + """ Test that numeric value is not returned when revenue event tag has invalid data type. """ |
| 73 | + self.assertIsNone(event_tag_utils.get_numeric_value({'non-value': None})) |
| 74 | + self.assertIsNone(event_tag_utils.get_numeric_value({'non-value': 0.5})) |
| 75 | + self.assertIsNone(event_tag_utils.get_numeric_value({'non-value': 12345})) |
| 76 | + self.assertIsNone(event_tag_utils.get_numeric_value({'non-value': '65536'})) |
| 77 | + self.assertIsNone(event_tag_utils.get_numeric_value({'non-value': True})) |
| 78 | + self.assertIsNone(event_tag_utils.get_numeric_value({'non-value': False})) |
| 79 | + self.assertIsNone(event_tag_utils.get_numeric_value({'non-value': [1, 2, 3]})) |
| 80 | + self.assertIsNone(event_tag_utils.get_numeric_value({'non-value': {'a', 'b', 'c'}})) |
| 81 | + |
| 82 | + def test_get_numeric_metric__value_tag(self): |
| 83 | + """ Test that the correct numeric value is returned. """ |
| 84 | + |
| 85 | + # An integer should be cast to a float |
| 86 | + self.assertEqual(12345.0, event_tag_utils.get_numeric_value({'value': 12345}, logger=logger.SimpleLogger())) |
| 87 | + |
| 88 | + # A string should be cast to a float |
| 89 | + self.assertEqual(12345.0, event_tag_utils.get_numeric_value({'value': '12345'}, logger=logger.SimpleLogger())) |
| 90 | + |
| 91 | + # Valid float values |
| 92 | + some_float = 1.2345 |
| 93 | + self.assertEqual(some_float, event_tag_utils.get_numeric_value({'value': some_float}, logger=logger.SimpleLogger())) |
| 94 | + |
| 95 | + max_float = sys.float_info.max |
| 96 | + self.assertEqual(max_float, event_tag_utils.get_numeric_value({'value': max_float}, logger=logger.SimpleLogger())) |
| 97 | + |
| 98 | + min_float = sys.float_info.min |
| 99 | + self.assertEqual(min_float, event_tag_utils.get_numeric_value({'value': min_float}, logger=logger.SimpleLogger())) |
| 100 | + |
| 101 | + # Invalid values |
| 102 | + self.assertIsNone(event_tag_utils.get_numeric_value({'value': False}, logger=logger.SimpleLogger())) |
| 103 | + self.assertIsNone(event_tag_utils.get_numeric_value({'value': None}, logger=logger.SimpleLogger())) |
| 104 | + |
| 105 | + numeric_value_nan = event_tag_utils.get_numeric_value({'value': float('nan')}, logger=logger.SimpleLogger()) |
| 106 | + self.assertIsNone(numeric_value_nan, 'nan numeric value is {}'.format(numeric_value_nan)) |
| 107 | + |
| 108 | + numeric_value_array = event_tag_utils.get_numeric_value({'value': []}, logger=logger.SimpleLogger()) |
| 109 | + self.assertIsNone(numeric_value_nan, 'Array numeric value is {}'.format(numeric_value_array)) |
| 110 | + |
| 111 | + numeric_value_none = event_tag_utils.get_numeric_value({'value': None}, logger=logger.SimpleLogger()) |
| 112 | + self.assertIsNone(numeric_value_none, 'None numeric value is {}'.format(numeric_value_none)) |
| 113 | + |
| 114 | + numeric_value_invalid_literal = event_tag_utils.get_numeric_value({'value': '1,234'}, logger=logger.SimpleLogger()) |
| 115 | + self.assertIsNone(numeric_value_invalid_literal, 'Invalid string literal value is {}' |
| 116 | + .format(numeric_value_invalid_literal)) |
| 117 | + |
| 118 | + numeric_value_overflow = event_tag_utils.get_numeric_value({'value': sys.float_info.max * 10}, |
| 119 | + logger=logger.SimpleLogger()) |
| 120 | + self.assertIsNone(numeric_value_overflow, 'Max numeric value is {}'.format(numeric_value_overflow)) |
| 121 | + |
| 122 | + numeric_value_inf = event_tag_utils.get_numeric_value({'value': float('inf')}, logger=logger.SimpleLogger()) |
| 123 | + self.assertIsNone(numeric_value_inf, 'Infinity numeric value is {}'.format(numeric_value_inf)) |
| 124 | + |
| 125 | + numeric_value_neg_inf = event_tag_utils.get_numeric_value({'value': float('-inf')}, logger=logger.SimpleLogger()) |
| 126 | + self.assertIsNone(numeric_value_neg_inf, 'Negative infinity numeric value is {}'.format(numeric_value_neg_inf)) |
| 127 | + |
| 128 | + self.assertEqual(0.0, event_tag_utils.get_numeric_value({'value': 0.0}, logger=logger.SimpleLogger())) |
0 commit comments