diff options
Diffstat (limited to 'tests/unit/test_urldispatcher_router_adapter.py')
-rw-r--r-- | tests/unit/test_urldispatcher_router_adapter.py | 153 |
1 files changed, 76 insertions, 77 deletions
diff --git a/tests/unit/test_urldispatcher_router_adapter.py b/tests/unit/test_urldispatcher_router_adapter.py index ad5d9c1..d81d2a3 100644 --- a/tests/unit/test_urldispatcher_router_adapter.py +++ b/tests/unit/test_urldispatcher_router_adapter.py @@ -15,10 +15,9 @@ """aiohttp_cors.urldispatcher_router_adapter unit tests. """ -import asyncio -import unittest from unittest import mock +import pytest from aiohttp import web from aiohttp_cors.urldispatcher_router_adapter import \ @@ -26,90 +25,90 @@ from aiohttp_cors.urldispatcher_router_adapter import \ from aiohttp_cors import ResourceOptions -def _handler(request): +async def _handler(request): return web.Response(text="Done") -class TestResourcesUrlDispatcherRouterAdapter(unittest.TestCase): - """Unit tests for CorsConfig""" - - def setUp(self): - self.loop = asyncio.new_event_loop() - self.app = web.Application(loop=self.loop) - - self.adapter = ResourcesUrlDispatcherRouterAdapter( - self.app.router, defaults={ - "*": ResourceOptions() - }) - self.get_route = self.app.router.add_route( - "GET", "/get_path", _handler) - self.options_route = self.app.router.add_route( - "OPTIONS", "/options_path", _handler) - - def tearDown(self): - self.loop.close() - - def test_add_get_route(self): - """Test configuring GET route""" - result = self.adapter.add_preflight_handler( - self.get_route.resource, _handler) - self.assertIsNone(result) - - self.assertEqual(len(self.adapter._resource_config), 0) - self.assertEqual( - len(self.adapter._resources_with_preflight_handlers), 1) - self.assertEqual(len(self.adapter._preflight_routes), 1) - - def test_add_options_route(self): - """Test configuring OPTIONS route""" - - with self.assertRaisesRegex( - ValueError, - "CORS must be enabled for route's resource first"): - self.adapter.add_preflight_handler(self.options_route, _handler) - - self.assertFalse(self.adapter._resources_with_preflight_handlers) - self.assertFalse(self.adapter._preflight_routes) - - def test_get_non_preflight_request_config(self): - self.adapter.add_preflight_handler( - self.get_route.resource, _handler) - self.adapter.set_config_for_routing_entity( - self.get_route.resource, { - 'http://example.org': ResourceOptions(), - }) - - self.adapter.add_preflight_handler( - self.get_route, _handler) - self.adapter.set_config_for_routing_entity( - self.get_route, { - 'http://test.example.org': ResourceOptions(), - }) - - request = mock.Mock() - - with mock.patch('aiohttp_cors.urldispatcher_router_adapter.' - 'ResourcesUrlDispatcherRouterAdapter.' - 'is_cors_enabled_on_request' - ) as is_cors_enabled_on_request, \ - mock.patch('aiohttp_cors.urldispatcher_router_adapter.' - 'ResourcesUrlDispatcherRouterAdapter.' - '_request_resource' - ) as _request_resource: - is_cors_enabled_on_request.return_value = True - _request_resource.return_value = self.get_route.resource - - self.assertEqual( - self.adapter.get_non_preflight_request_config(request), +@pytest.fixture +def app(): + return web.Application() + + +@pytest.fixture +def adapter(app): + return ResourcesUrlDispatcherRouterAdapter( + app.router, defaults={ + "*": ResourceOptions() + }) + + +@pytest.fixture +def get_route(app): + return app.router.add_route( + "GET", "/get_path", _handler) + + +@pytest.fixture +def options_route(app): + return app.router.add_route( + "OPTIONS", "/options_path", _handler) + + +def test_add_get_route(adapter, get_route): + """Test configuring GET route""" + result = adapter.add_preflight_handler( + get_route.resource, _handler) + assert result is None + + assert len(adapter._resource_config) == 0 + assert len(adapter._resources_with_preflight_handlers) == 1 + assert len(adapter._preflight_routes) == 1 + + +def test_add_options_route(adapter, options_route): + """Test configuring OPTIONS route""" + + adapter.add_preflight_handler(options_route, _handler) + + assert not adapter._resources_with_preflight_handlers + assert not adapter._preflight_routes + + +def test_get_non_preflight_request_config(adapter, get_route): + adapter.add_preflight_handler(get_route.resource, _handler) + adapter.set_config_for_routing_entity( + get_route.resource, { + 'http://example.org': ResourceOptions(), + }) + + adapter.add_preflight_handler(get_route, _handler) + adapter.set_config_for_routing_entity( + get_route, { + 'http://test.example.org': ResourceOptions(), + }) + + request = mock.Mock() + + with mock.patch('aiohttp_cors.urldispatcher_router_adapter.' + 'ResourcesUrlDispatcherRouterAdapter.' + 'is_cors_enabled_on_request' + ) as is_cors_enabled_on_request, \ + mock.patch('aiohttp_cors.urldispatcher_router_adapter.' + 'ResourcesUrlDispatcherRouterAdapter.' + '_request_resource' + ) as _request_resource: + is_cors_enabled_on_request.return_value = True + _request_resource.return_value = get_route.resource + + assert (adapter.get_non_preflight_request_config(request) == { '*': ResourceOptions(), 'http://example.org': ResourceOptions(), }) - request.method = 'GET' + request.method = 'GET' - self.assertEqual( - self.adapter.get_non_preflight_request_config(request), + assert (adapter.get_non_preflight_request_config(request) == { '*': ResourceOptions(), 'http://example.org': ResourceOptions(), |