From 7da29f7f336605711db67ceb687e1c20e52408c8 Mon Sep 17 00:00:00 2001 From: Roman Mogylatov Date: Tue, 28 Jul 2020 17:34:22 -0400 Subject: [PATCH] Add tests --- .../giphynav-aiohttp/giphynavigator/tests.py | 77 +++++++++++++++++++ .../giphynav-aiohttp/giphynavigator/views.py | 2 +- .../giphynav-aiohttp/requirements.txt | 2 + 3 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 examples/miniapps/giphynav-aiohttp/giphynavigator/tests.py diff --git a/examples/miniapps/giphynav-aiohttp/giphynavigator/tests.py b/examples/miniapps/giphynav-aiohttp/giphynavigator/tests.py new file mode 100644 index 00000000..c34dfc10 --- /dev/null +++ b/examples/miniapps/giphynav-aiohttp/giphynavigator/tests.py @@ -0,0 +1,77 @@ +"""Tests module.""" + +from unittest import mock + +import pytest + +from giphynavigator.application import create_app +from giphynavigator.giphy import GiphyClient + + +@pytest.fixture +def app(): + return create_app() + + +@pytest.fixture +def client(app, aiohttp_client, loop): + return loop.run_until_complete(aiohttp_client(app)) + + +async def test_index(client, app): + giphy_client_mock = mock.AsyncMock(spec=GiphyClient) + giphy_client_mock.search.return_value = { + 'data': [ + {'url': 'https://giphy/gif1.gif'}, + {'url': 'https://giphy/gif2.gif'}, + ], + } + + with app.container.giphy_client.override(giphy_client_mock): + response = await client.get( + '/', + params={ + 'query': 'test', + 'limit': 10, + }, + ) + + assert response.status == 200 + data = await response.json() + assert data == { + 'query': 'test', + 'limit': 10, + 'gifs': [ + {'url': 'https://giphy/gif1.gif'}, + {'url': 'https://giphy/gif2.gif'}, + ], + } + + +async def test_index_no_data(client, app): + giphy_client_mock = mock.AsyncMock(spec=GiphyClient) + giphy_client_mock.search.return_value = { + 'data': [], + } + + with app.container.giphy_client.override(giphy_client_mock): + response = await client.get('/') + + assert response.status == 200 + data = await response.json() + assert data['gifs'] == [] + + +async def test_index_default_params(client, app): + giphy_client_mock = mock.AsyncMock(spec=GiphyClient) + giphy_client_mock.search.return_value = { + 'data': [], + } + + with app.container.giphy_client.override(giphy_client_mock): + response = await client.get('/') + + assert response.status == 200 + data = await response.json() + assert data['query'] == app.container.config.search.default_query() + assert data['limit'] == app.container.config.search.default_limit() diff --git a/examples/miniapps/giphynav-aiohttp/giphynavigator/views.py b/examples/miniapps/giphynav-aiohttp/giphynavigator/views.py index cd621466..7af5a0f5 100644 --- a/examples/miniapps/giphynav-aiohttp/giphynavigator/views.py +++ b/examples/miniapps/giphynav-aiohttp/giphynavigator/views.py @@ -12,7 +12,7 @@ async def index( default_limit: int, ) -> web.Response: query = request.query.get('query', default_query) - limit = request.query.get('limit', default_limit) + limit = int(request.query.get('limit', default_limit)) gifs = await search_service.search(query, limit) diff --git a/examples/miniapps/giphynav-aiohttp/requirements.txt b/examples/miniapps/giphynav-aiohttp/requirements.txt index 72b0cc92..e849f0dc 100644 --- a/examples/miniapps/giphynav-aiohttp/requirements.txt +++ b/examples/miniapps/giphynav-aiohttp/requirements.txt @@ -2,3 +2,5 @@ dependency-injector aiohttp aiohttp-devtools pyyaml +pytest-aiohttp +pytest-cov