"""Tests for `_paginate` and `_page_nav`.""" from handlers import _paginate, _page_nav, PER_PAGE def test_paginate_default_is_one(): assert _paginate({}) == 1 def test_paginate_reads_query_string(): assert _paginate({"p": ["3"]}) == 3 def test_paginate_clamps_to_one(): assert _paginate({"p": ["0"]}) == 1 assert _paginate({"p": ["-5"]}) == 1 def test_paginate_handles_bad_input(): assert _paginate({"p": ["not-a-number"]}) == 1 assert _paginate({"p": []}) == 1 def test_paginate_custom_key(): assert _paginate({"batch": ["7"]}, key="batch") == 7 def test_page_nav_empty_when_single_page(): assert _page_nav(1, PER_PAGE, "/?q=foo") == "" assert _page_nav(1, 0, "/?q=foo") == "" def test_page_nav_shows_next_on_first_page(): out = _page_nav(1, PER_PAGE * 3, "/?q=foo") assert "next" in out assert "prev" not in out assert "page 1 of 3" in out def test_page_nav_shows_both_in_middle(): out = _page_nav(2, PER_PAGE * 3, "/?q=foo") assert "next" in out assert "prev" in out def test_page_nav_shows_prev_on_last_page(): out = _page_nav(3, PER_PAGE * 3, "/?q=foo") assert "next" not in out assert "prev" in out assert "page 3 of 3" in out def test_page_nav_handles_query_string_separator(): # when base_url already has ?, pagination links must use & out = _page_nav(1, PER_PAGE * 2, "/?q=foo") assert "&p=2" in out # when base_url has no ?, pagination links use ? out = _page_nav(1, PER_PAGE * 2, "/pages") assert "?p=2" in out