def test_parse_filters(): filters = FilterParser.parse( created_at='2018', points='5', num_comments__gt='10') assert filters._filters == [ CreatedAtFilter(datetime(2018, 1, 1), models.EQUALS_OPERATOR), PointsFilter(5, models.EQUALS_OPERATOR), NumCommentsFilter(10, models.GREATER_OPERATOR) ] filters = FilterParser.parse( created_at__lt='2017-09', points__gte='15', num_comments__lt='100') assert filters._filters == [ CreatedAtFilter(datetime(2017, 9, 1), models.LESS_OPERATOR), PointsFilter(15, models.GREATER_EQUALS_OPERATOR), NumCommentsFilter(100, models.LESS_OPERATOR) ] filters = FilterParser.parse( created_at__lte='2018-09', created_at__gt='2017-09', points__gte='15', points__lt=100, num_comments__lt='100', num_comments__gte='35') assert filters._filters == [ CreatedAtFilter(datetime(2018, 9, 1), models.LESS_EQUALS_OPERATOR), CreatedAtFilter(datetime(2017, 9, 1), models.GREATER_OPERATOR), PointsFilter(15, models.GREATER_EQUALS_OPERATOR), PointsFilter(100, models.LESS_OPERATOR), NumCommentsFilter(100, models.LESS_OPERATOR), NumCommentsFilter(35, models.GREATER_EQUALS_OPERATOR), ]
def test_filters_hashable(): filter_set = set([ NumCommentsFilter(10, models.EQUALS_OPERATOR), NumCommentsFilter(10, models.LESS_OPERATOR), NumCommentsFilter(10, models.EQUALS_OPERATOR), CreatedAtFilter(datetime(2018, 1, 1), models.EQUALS_OPERATOR), CreatedAtFilter(datetime(2018, 1, 1), models.GREATER_OPERATOR), CreatedAtFilter(datetime(2018, 1, 1), models.GREATER_OPERATOR), PointsFilter(5, models.LESS_EQUALS_OPERATOR), PointsFilter(50, models.LESS_EQUALS_OPERATOR), PointsFilter(5, models.EQUALS_OPERATOR), ]) assert len(filter_set) == 7 assert filter_set == set([ NumCommentsFilter(10, models.EQUALS_OPERATOR), NumCommentsFilter(10, models.LESS_OPERATOR), CreatedAtFilter(datetime(2018, 1, 1), models.EQUALS_OPERATOR), CreatedAtFilter(datetime(2018, 1, 1), models.GREATER_OPERATOR), PointsFilter(5, models.LESS_EQUALS_OPERATOR), PointsFilter(50, models.LESS_EQUALS_OPERATOR), PointsFilter(5, models.EQUALS_OPERATOR), ])
def test_filter_parser_duplicated_filters(): FilterParser([ CreatedAtFilter(datetime(2018, 1, 1), models.LESS_OPERATOR), PointsFilter(10, models.EQUALS_OPERATOR), PointsFilter(10, models.LESS_OPERATOR) ]) with pytest.raises(ValueError): FilterParser([ CreatedAtFilter(datetime(2018, 1, 1), models.LESS_OPERATOR), PointsFilter(10, models.EQUALS_OPERATOR), PointsFilter(10, models.LESS_OPERATOR), PointsFilter(10, models.EQUALS_OPERATOR), ])
def test_parse_filters_replace_with_new_one(): filters = FilterParser([ CreatedAtFilter(datetime(2017, 1, 1), models.GREATER_EQUALS_OPERATOR), PointsFilter(10, models.EQUALS_OPERATOR), NumCommentsFilter(5, models.GREATER_EQUALS_OPERATOR) ]) new_filters = filters.replace(created_at__lt='2018-11-01') assert set(new_filters._filters) == set([ CreatedAtFilter(datetime(2017, 1, 1), models.GREATER_EQUALS_OPERATOR), CreatedAtFilter(datetime(2018, 11, 1), models.LESS_OPERATOR), PointsFilter(10, models.EQUALS_OPERATOR), NumCommentsFilter(5, models.GREATER_EQUALS_OPERATOR) ])
def test_created_at_filter_str(): filter = CreatedAtFilter(datetime(2018, 1, 1), models.EQUALS_OPERATOR) assert str(filter) == 'created_at_i=1514764800' filter = CreatedAtFilter(datetime(2018, 1, 1), models.LESS_OPERATOR) assert str(filter) == 'created_at_i<1514764800' filter = CreatedAtFilter(datetime(2018, 1, 1), models.LESS_EQUALS_OPERATOR) assert str(filter) == 'created_at_i<=1514764800' filter = CreatedAtFilter(datetime(2018, 1, 1), models.GREATER_OPERATOR) assert str(filter) == 'created_at_i>1514764800' filter = CreatedAtFilter(datetime(2018, 1, 1), models.GREATER_EQUALS_OPERATOR) assert str(filter) == 'created_at_i>=1514764800'
def test_filter_equality(): assert CreatedAtFilter( datetime(2018, 1, 1), models.EQUALS_OPERATOR ) == CreatedAtFilter( datetime(2018, 1, 1), models.EQUALS_OPERATOR) assert CreatedAtFilter( datetime(2018, 1, 1), models.LESS_OPERATOR ) == CreatedAtFilter( datetime(2018, 1, 1), models.LESS_OPERATOR) assert CreatedAtFilter( datetime(2018, 1, 1), models.EQUALS_OPERATOR ) != CreatedAtFilter( datetime(2018, 1, 1), models.LESS_OPERATOR) assert PointsFilter(10, models.EQUALS_OPERATOR) == PointsFilter( 10, models.EQUALS_OPERATOR) assert PointsFilter(10, models.LESS_OPERATOR) == PointsFilter( 10, models.LESS_OPERATOR) assert PointsFilter(10, models.EQUALS_OPERATOR) != PointsFilter( 10, models.LESS_OPERATOR) assert NumCommentsFilter(10, models.EQUALS_OPERATOR) == NumCommentsFilter( 10, models.EQUALS_OPERATOR) assert NumCommentsFilter(10, models.LESS_OPERATOR) == NumCommentsFilter( 10, models.LESS_OPERATOR) assert NumCommentsFilter(10, models.EQUALS_OPERATOR) != NumCommentsFilter( 10, models.LESS_OPERATOR)
def test_less_equals_filter_mutually_exclusive(): filter = CreatedAtFilter(datetime(2018, 1, 1), models.LESS_EQUALS_OPERATOR) assert filter.mutually_exclusive( CreatedAtFilter(datetime(2018, 1, 1), models.EQUALS_OPERATOR) ) is True assert filter.mutually_exclusive( CreatedAtFilter(datetime(2018, 1, 1), models.LESS_OPERATOR) ) is True assert filter.mutually_exclusive( CreatedAtFilter(datetime(2018, 1, 1), models.LESS_EQUALS_OPERATOR) ) is True assert filter.mutually_exclusive( CreatedAtFilter(datetime(2018, 1, 1), models.GREATER_OPERATOR) ) is False assert filter.mutually_exclusive( CreatedAtFilter(datetime(2018, 1, 1), models.GREATER_EQUALS_OPERATOR) ) is False
def test_create_at_filter_parsing(): assert CreatedAtFilter.parse( 'created_at', '2018-01-01' ) == CreatedAtFilter( datetime(2018, 1, 1), models.EQUALS_OPERATOR ) assert CreatedAtFilter.parse( 'created_at', '2018-11-03T14:53:42.000Z' ) == CreatedAtFilter( datetime(2018, 11, 3, 14, 53, 42), models.EQUALS_OPERATOR ) assert CreatedAtFilter.parse( 'created_at', '2018' ) == CreatedAtFilter( datetime(2018, 1, 1), models.EQUALS_OPERATOR ) assert CreatedAtFilter.parse( 'created_at', datetime(2018, 1, 1) ) == CreatedAtFilter( datetime(2018, 1, 1), models.EQUALS_OPERATOR ) assert CreatedAtFilter.parse( 'created_at__lt', datetime(2018, 1, 1) ) == CreatedAtFilter( datetime(2018, 1, 1), models.LESS_OPERATOR ) assert CreatedAtFilter.parse( 'created_at__lte', datetime(2018, 1, 1) ) == CreatedAtFilter( datetime(2018, 1, 1), models.LESS_EQUALS_OPERATOR ) assert CreatedAtFilter.parse( 'created_at__gt', datetime(2018, 1, 1) ) == CreatedAtFilter( datetime(2018, 1, 1), models.GREATER_OPERATOR ) assert CreatedAtFilter.parse( 'created_at__gte', datetime(2018, 1, 1) ) == CreatedAtFilter( datetime(2018, 1, 1), models.GREATER_EQUALS_OPERATOR )