Skip to content
Snippets Groups Projects
Select Git revision
  • 422437b9ece0c86840e51321585882c0c47efc0c
  • test default protected
  • master protected
  • feat/custom-css
  • feat/redesign-improvements-10
  • feat/redesign-improvements-8
  • feat/redesign-fixes-3
  • feat/pirstan-changes
  • feat/separate-import-thread
  • feat/dary-improvements
  • features/add-pdf-page
  • features/add-typed-table
  • features/fix-broken-calendar-categories
  • features/add-embed-to-articles
  • features/create-mastodon-feed-block
  • features/add-custom-numbering-for-candidates
  • features/add-timeline
  • features/create-wordcloud-from-article-page
  • features/create-collapsible-extra-legal-info
  • features/extend-hero-banner
  • features/add-link-to-images
21 results

utils.py

Blame
  • test_paginator.py 3.36 KiB
    import pytest
    
    from openlobby.core.api.paginator import (
        PER_PAGE,
        encode_cursor,
        decode_cursor,
        Paginator,
        MissingBeforeValueError,
    )
    
    
    @pytest.mark.parametrize("num, cursor", [(5, "NQ=="), (777, "Nzc3"), (12, "MTI=")])
    def test_encode_cursor(num, cursor):
        assert encode_cursor(num) == cursor
    
    
    @pytest.mark.parametrize("num, cursor", [(8, "OA=="), (123, "MTIz"), (65, "NjU=")])
    def test_decode_cursor(num, cursor):
        assert decode_cursor(cursor) == num
    
    
    def test_encode_and_decode_cursor():
        assert decode_cursor(encode_cursor(42)) == 42
    
    
    def test_paginator__defaults():
        paginator = Paginator()
        assert paginator.slice_from == 0
        assert paginator.slice_to == PER_PAGE
    
    
    def test_paginator__custom_per_page():
        paginator = Paginator(per_page=5)
        assert paginator.per_page == 5
        assert paginator.slice_from == 0
        assert paginator.slice_to == 5
    
    
    @pytest.mark.parametrize(
        "kw, slice_from, slice_to",
        [
            ({"first": 15}, 0, 15),
            ({"first": 5, "after": encode_cursor(3)}, 3, 8),
            ({"last": 8, "before": encode_cursor(20)}, 11, 19),
            # overflow of slice_from
            ({"last": 100, "before": encode_cursor(42)}, 0, 41),
            # preffer first before last if both provided
            ({"first": 20, "last": 4}, 0, 20),
        ],
    )
    def test_paginator__input_combinations(kw, slice_from, slice_to):
        paginator = Paginator(**kw)
        assert paginator.slice_from == slice_from
        assert paginator.slice_to == slice_to
    
    
    def test_paginator__last_without_before():
        with pytest.raises(MissingBeforeValueError):
            Paginator(last=1)
    
    
    @pytest.mark.parametrize(
        "kw, total, previous, next, start, end",
        [
            ({}, 10, False, False, 1, 10),
            ({}, 15, False, True, 1, 10),
            ({}, 5, False, False, 1, 5),
            ({"first": 1}, 10, False, True, 1, 1),
            ({"first": 6}, 10, False, True, 1, 6),
            ({"first": 6}, 4, False, False, 1, 4),
            ({"first": 6}, 6, False, False, 1, 6),
            ({"first": 3, "after": encode_cursor(7)}, 20, True, True, 8, 10),
            ({"first": 3, "after": encode_cursor(17)}, 20, True, False, 18, 20),
            ({"first": 5, "after": encode_cursor(17)}, 20, True, False, 18, 20),
            ({"last": 4, "before": encode_cursor(10)}, 20, True, True, 6, 9),
            ({"last": 4, "before": encode_cursor(5)}, 20, False, True, 1, 4),
            ({"last": 4, "before": encode_cursor(3)}, 20, False, True, 1, 2),
            # out of bounds
            ({"first": 3, "after": encode_cursor(10)}, 10, False, False, None, None),
            ({"last": 3, "before": encode_cursor(1)}, 10, False, False, None, None),
        ],
    )
    def test_paginator__get_page_info(kw, total, previous, next, start, end):
        paginator = Paginator(**kw)
        page_info = paginator.get_page_info(total)
        assert page_info.has_previous_page is previous
        assert page_info.has_next_page is next
        assert page_info.start_cursor == start if start is None else encode_cursor(start)
        assert page_info.end_cursor == end if end is None else encode_cursor(end)
    
    
    @pytest.mark.parametrize(
        "kw, num, cursor",
        [
            ({}, 3, encode_cursor(3)),
            ({"first": 6, "after": encode_cursor(1)}, 3, encode_cursor(4)),
            ({"last": 6, "before": encode_cursor(11)}, 3, encode_cursor(7)),
        ],
    )
    def test_paginator__get_edge_cursor(kw, num, cursor):
        paginator = Paginator(**kw)
        assert paginator.get_edge_cursor(num) == cursor