Skip to content

Commit

Permalink
Add more test coverage for Paginator
Browse files Browse the repository at this point in the history
  • Loading branch information
JWCook committed Sep 12, 2021
1 parent 2ed9ff4 commit 108e163
Show file tree
Hide file tree
Showing 3 changed files with 128 additions and 9 deletions.
59 changes: 52 additions & 7 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ ipython = {optional=true, version="^7.25.0", python=">=3.7"}
linkify-it-py = {optional=true, version="^1.0.1"}
myst-parser = {optional=true, version="^0.15.1"}
nbsphinx = {optional=true, version="^0.8.5" }
sphinx = {optional=true, version="^4.0.2" }
sphinx = {optional=true, version="^4.2.0" }
sphinx-automodapi = {optional=true, version="^0.13" }
sphinx-autodoc-typehints = {optional=true, version="^1.11" }
sphinx-copybutton = {optional=true, version=">=0.3,<0.5" }
Expand All @@ -60,6 +60,7 @@ nox-poetry = "^0.8.6"
pre-commit = "^2.12"
pretty-errors = "^1.2.23"
pytest = "^6.2"
pytest-asyncio = "^0.15.1"
pytest-cov = ">=2.11"
pytest-xdist = ">=2.2"
requests-mock = "^1.8"
Expand Down
75 changes: 74 additions & 1 deletion test/test_paginator.py
Original file line number Diff line number Diff line change
@@ -1 +1,74 @@
# TODO
import pytest

from pyinaturalist.constants import API_V1_BASE_URL
from pyinaturalist.models import Observation
from pyinaturalist.paginator import Paginator
from pyinaturalist.v1 import get_observations
from test.sample_data import SAMPLE_DATA


def test_iter(requests_mock):
requests_mock.get(
f'{API_V1_BASE_URL}/observations',
[
{'json': SAMPLE_DATA['get_observations_node_page1'], 'status_code': 200},
{'json': SAMPLE_DATA['get_observations_node_page2'], 'status_code': 200},
],
)

paginator = Paginator(get_observations, Observation, id=[57754375, 57707611])
observations = list(paginator)
assert len(observations) == 2


def test_iter__with_limit(requests_mock):
requests_mock.get(
f'{API_V1_BASE_URL}/observations',
[
{'json': SAMPLE_DATA['get_observations_node_page1'], 'status_code': 200},
{'json': SAMPLE_DATA['get_observations_node_page2'], 'status_code': 200},
],
)

paginator = Paginator(get_observations, Observation, id=[57754375, 57707611], limit=1)
observations = list(paginator)
assert len(observations) == 1


@pytest.mark.asyncio
async def test_async_iter(requests_mock):
requests_mock.get(
f'{API_V1_BASE_URL}/observations',
[
{'json': SAMPLE_DATA['get_observations_node_page1'], 'status_code': 200},
{'json': SAMPLE_DATA['get_observations_node_page2'], 'status_code': 200},
],
)

paginator = Paginator(get_observations, Observation, id=[57754375, 57707611], page='all')
observations = [obs async for obs in paginator]
assert len(observations) == 2


def test_total_results_count(requests_mock):
requests_mock.get(
f'{API_V1_BASE_URL}/observations?per_page=0', json={'results': [], 'total_results': 50}
)

paginator = Paginator(get_observations, Observation, q='asdf')
assert paginator.total_results == 50


def test_next_page__exhausted():
paginator = Paginator(get_observations, Observation)
paginator.exhausted = True
assert paginator.next_page() == []


def test_str():
def get_observations(**kwargs):
return {'total_results': 0}

paginator = Paginator(get_observations, Observation)
assert 'get_observations' in str(paginator)
assert '0/0' in str(paginator)

0 comments on commit 108e163

Please sign in to comment.