From 8851571ba71b1377152f1d8c68022d7ebac9050d Mon Sep 17 00:00:00 2001 From: Luiz Menezes Date: Thu, 4 Aug 2016 13:40:04 -0300 Subject: [PATCH] add integration tests for aiohttp --- tests/integration/test_aiohttp.py | 87 +++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 tests/integration/test_aiohttp.py diff --git a/tests/integration/test_aiohttp.py b/tests/integration/test_aiohttp.py new file mode 100644 index 0000000..ab1112c --- /dev/null +++ b/tests/integration/test_aiohttp.py @@ -0,0 +1,87 @@ +import asyncio + +import aiohttp +import pytest +import vcr + + +@asyncio.coroutine +def request(session, method, url, as_text, **kwargs): + response = yield from session.request(method, url, **kwargs) + return response, (yield from response.text()) if as_text else (yield from response.json()) + + +def get(url, as_text=True, **kwargs): + loop = asyncio.get_event_loop() + with aiohttp.ClientSession() as session: + task = loop.create_task(request(session, 'GET', url, as_text, **kwargs)) + return loop.run_until_complete(task) + + +def post(url, as_text=True, **kwargs): + loop = asyncio.get_event_loop() + with aiohttp.ClientSession() as session: + task = loop.create_task(request(session, 'POST', url, as_text, **kwargs)) + return loop.run_until_complete(task) + + +@pytest.fixture(params=["https", "http"]) +def scheme(request): + '''Fixture that returns both http and https.''' + return request.param + + +def test_status(tmpdir, scheme): + url = scheme + '://httpbin.org' + with vcr.use_cassette(str(tmpdir.join('status.yaml'))): + response, _ = get(url) + + with vcr.use_cassette(str(tmpdir.join('status.yaml'))) as cassette: + cassette_response, _ = get(url) + assert cassette_response.status == response.status + assert cassette.play_count == 1 + + +def test_headers(tmpdir, scheme): + url = scheme + '://httpbin.org' + with vcr.use_cassette(str(tmpdir.join('headers.yaml'))): + response, _ = get(url) + + with vcr.use_cassette(str(tmpdir.join('headers.yaml'))) as cassette: + cassette_response, _ = get(url) + assert cassette_response.headers == response.headers + assert cassette.play_count == 1 + + +def test_text(tmpdir, scheme): + url = scheme + '://httpbin.org' + with vcr.use_cassette(str(tmpdir.join('text.yaml'))): + _, response_text = get(url) + + with vcr.use_cassette(str(tmpdir.join('text.yaml'))) as cassette: + _, cassette_response_text = get(url) + assert cassette_response_text == response_text + assert cassette.play_count == 1 + + +def test_json(tmpdir, scheme): + url = scheme + '://httpbin.org/get' + with vcr.use_cassette(str(tmpdir.join('json.yaml'))): + _, response_json = get(url, as_text=False) + + with vcr.use_cassette(str(tmpdir.join('json.yaml'))) as cassette: + _, cassette_response_json = get(url, as_text=False) + assert cassette_response_json == response_json + assert cassette.play_count == 1 + + +def test_post(tmpdir, scheme): + data = {'key1': 'value1', 'key2': 'value2'} + url = scheme + '://httpbin.org/post' + with vcr.use_cassette(str(tmpdir.join('post.yaml'))): + _, response_json = post(url, data=data) + + with vcr.use_cassette(str(tmpdir.join('post.yaml'))) as cassette: + _, cassette_response_json = post(url, data=data) + assert cassette_response_json == response_json + assert cassette.play_count == 1