def test_from_raw(self, mocker):
        """Test parsing from raw json/dict."""
        parsed_number = matchers.from_raw(self.raw_number)
        assert isinstance(parsed_number, matchers.GreaterThanOrEqualMatcher)
        assert parsed_number._data_type == 'NUMBER'
        assert parsed_number._original_value == 5
        assert parsed_number._value == 5
        assert parsed_number.evaluate('a') is False
        assert parsed_number.evaluate([]) is False
        assert parsed_number.evaluate({}) is False
        assert parsed_number.evaluate(True) is False
        assert parsed_number.evaluate(object()) is False

        parsed_date = matchers.from_raw(self.raw_date)
        assert isinstance(parsed_date, matchers.GreaterThanOrEqualMatcher)
        assert parsed_date._data_type == 'DATETIME'
        assert parsed_date._original_value == int(
            calendar.timegm(
                (datetime(2019, 12, 21, 9, 30, 45, 0)).timetuple())) * 1000
        assert parsed_date._value == int(
            calendar.timegm((datetime(2019, 12, 21, 9, 30, 0)).timetuple()))
        assert parsed_date.evaluate('a') is False
        assert parsed_date.evaluate([]) is False
        assert parsed_date.evaluate({}) is False
        assert parsed_date.evaluate(True) is False
        assert parsed_date.evaluate(object()) is False
Exemple #2
0
def from_raw(raw_condition):
    """
    Parse a condition from a JSON portion of splitChanges.

    :param raw_condition: JSON object extracted from a split's conditions array.
    :type raw_condition: dict

    :return: A condition object.
    :rtype: Condition
    """
    parsed_partitions = [
        partitions.from_raw(raw_partition)
        for raw_partition in raw_condition['partitions']
    ]

    matcher_objects = [
        matchers.from_raw(x) for x in raw_condition['matcherGroup']['matchers']
    ]
    combiner = _MATCHER_COMBINERS[raw_condition['matcherGroup']['combiner']]
    label = raw_condition.get('label')

    condition_type = ConditionType(
        raw_condition.get('conditionType', ConditionType.WHITELIST))

    return Condition(matcher_objects, combiner, parsed_partitions, label,
                     condition_type)
    def test_from_raw(self, mocker):
        """Test parsing from raw json/dict."""
        parsed_number = matchers.from_raw(self.raw_number)
        assert isinstance(parsed_number, matchers.EqualToMatcher)
        assert parsed_number._data_type == 'NUMBER'
        assert parsed_number._original_value == 5
        assert parsed_number._value == 5

        parsed_date = matchers.from_raw(self.raw_date)
        assert isinstance(parsed_date, matchers.EqualToMatcher)
        assert parsed_date._data_type == 'DATETIME'
        assert parsed_date._original_value == int(
            calendar.timegm(
                (datetime(2019, 12, 21, 9, 30, 45, 0)).timetuple())) * 1000
        assert parsed_date._value == int(
            calendar.timegm((datetime(2019, 12, 21, 0, 0, 0)).timetuple()))
    def test_to_json(self):
        """Test that the object serializes to JSON properly."""
        as_json_number = matchers.from_raw(self.raw_number).to_json()
        assert as_json_number['unaryNumericMatcherData'][
            'dataType'] == 'NUMBER'
        assert as_json_number['unaryNumericMatcherData']['value'] == 5
        assert as_json_number['matcherType'] == 'LESS_THAN_OR_EQUAL_TO'
        assert as_json_number['negate'] is False

        as_json_number = matchers.from_raw(self.raw_date).to_json()
        assert as_json_number['unaryNumericMatcherData'][
            'dataType'] == 'DATETIME'
        assert as_json_number['unaryNumericMatcherData']['value'] == int(
            calendar.timegm(
                (datetime(2019, 12, 21, 9, 30, 45)).timetuple())) * 1000
        assert as_json_number['matcherType'] == 'LESS_THAN_OR_EQUAL_TO'
        assert as_json_number['negate'] is False
    def test_from_raw(self, mocker):
        """Test parsing from raw json/dict."""
        parsed_number = matchers.from_raw(self.raw_number)
        assert isinstance(parsed_number, matchers.BetweenMatcher)
        assert parsed_number._data_type == 'NUMBER'
        assert parsed_number._negate is False
        assert parsed_number._original_lower == 1
        assert parsed_number._original_upper == 3
        assert parsed_number._lower == 1
        assert parsed_number._upper == 3

        parsed_date = matchers.from_raw(self.raw_date)
        assert isinstance(parsed_number, matchers.BetweenMatcher)
        assert parsed_date._data_type == 'DATETIME'
        assert parsed_date._original_lower == int(
            calendar.timegm(
                (datetime(2019, 12, 21, 9, 30, 45)).timetuple())) * 1000
        assert parsed_date._original_upper == int(
            calendar.timegm(
                (datetime(2019, 12, 23, 9, 30, 45)).timetuple())) * 1000
        assert parsed_date._lower == int(
            calendar.timegm((datetime(2019, 12, 21, 9, 30, 0)).timetuple()))
        assert parsed_date._upper == int(
            calendar.timegm((datetime(2019, 12, 23, 9, 30, 0)).timetuple()))
 def test_from_raw(self, mocker):
     """Test parsing from raw json/dict."""
     parsed = matchers.from_raw(self.raw)
     assert isinstance(parsed, matchers.RegexMatcher)
     assert parsed._data == "^[a-z][A-Z][0-9]$"
     assert parsed._regex == re.compile("^[a-z][A-Z][0-9]$")
 def test_from_raw(self, mocker):
     """Test parsing from raw json/dict."""
     parsed = matchers.from_raw(self.raw)
     assert isinstance(parsed, matchers.BooleanMatcher)
     assert parsed._data
 def test_from_raw(self, mocker):
     """Test parsing from raw json/dict."""
     parsed = matchers.from_raw(self.raw)
     assert isinstance(parsed, matchers.DependencyMatcher)
     assert parsed._split_name == 'some_split'
     assert parsed._treatments == ['on', 'almost_on']
 def test_from_raw(self, mocker):
     """Test parsing from raw json/dict."""
     parsed = matchers.from_raw(self.raw)
     assert isinstance(parsed, matchers.PartOfSetMatcher)
     assert parsed._whitelist == frozenset(['key1', 'key2', 'key3'])
 def test_from_raw(self, mocker):
     """Test parsing from raw json/dict."""
     parsed = matchers.from_raw(self.raw)
     assert isinstance(parsed, matchers.UserDefinedSegmentMatcher)
     assert parsed._segment_name == 'some_segment'
 def test_from_raw(self, mocker):
     """Test parsing from raw json/dict."""
     parsed = matchers.from_raw(self.raw)
     assert isinstance(parsed, matchers.AllKeysMatcher)