示例#1
0
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),
    ]
示例#2
0
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),
    ])
示例#3
0
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),
        ])
示例#4
0
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)
    ])
示例#5
0
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'
示例#6
0
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)
示例#7
0
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
示例#8
0
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
    )