From 1e2ac076e89f75744832bd82cc263bf7ed5e4c30 Mon Sep 17 00:00:00 2001 From: Roman Mogylatov Date: Mon, 27 Jul 2020 22:33:01 -0400 Subject: [PATCH] Add aiohttp extension tests --- tests/unit/ext/test_aiohttp_py3.py | 93 ++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 tests/unit/ext/test_aiohttp_py3.py diff --git a/tests/unit/ext/test_aiohttp_py3.py b/tests/unit/ext/test_aiohttp_py3.py new file mode 100644 index 00000000..e34cefa9 --- /dev/null +++ b/tests/unit/ext/test_aiohttp_py3.py @@ -0,0 +1,93 @@ +"""Dependency injector Aiohttp extension unit tests.""" + +from aiohttp import web +from aiohttp.test_utils import AioHTTPTestCase, unittest_run_loop + +from dependency_injector import containers, providers +from dependency_injector.ext import aiohttp + + +async def index(_): + return web.Response(text='Hello World!') + + +async def test(_): + return web.Response(text='Test!') + + +class Test(web.View): + async def get(self): + return web.Response(text='Test class-based!') + + +@web.middleware +async def middleware(request, handler): + resp = await handler(request) + resp.text = resp.text + ' wink1' + return resp + + +def middleware_factory(text): + @web.middleware + async def sample_middleware(request, handler): + resp = await handler(request) + resp.text = resp.text + text + return resp + return sample_middleware + + +class ApplicationContainer(containers.DeclarativeContainer): + + app = aiohttp.Application( + web.Application, + middlewares=providers.List( + aiohttp.Middleware(middleware), + aiohttp.MiddlewareFactory(middleware_factory, text=' wink2'), + ), + ) + + index_view = aiohttp.View(index) + test_view = aiohttp.View(test) + test_class_view = aiohttp.ClassBasedView(Test) + + +class ApplicationTests(AioHTTPTestCase): + + async def get_application(self): + """ + Override the get_app method to return your application. + """ + container = ApplicationContainer() + app: web.Application = container.app() + app.container = container + app.add_routes([ + web.get('/', container.index_view.as_view()), + web.get('/test', container.test_view.as_view(), name='test'), + web.get('/test-class', container.test_class_view.as_view()), + ]) + return app + + @unittest_run_loop + async def test_index(self): + response = await self.client.get('/') + + self.assertEqual(response.status, 200) + self.assertEqual(await response.text(), 'Hello World! wink2 wink1') + + @unittest_run_loop + async def test_test(self): + response = await self.client.get('/test') + + self.assertEqual(response.status, 200) + self.assertEqual(await response.text(), 'Test! wink2 wink1') + + @unittest_run_loop + async def test_test_class_based(self): + response = await self.client.get('/test-class') + + self.assertEqual(response.status, 200) + self.assertEqual(await response.text(), 'Test class-based! wink2 wink1') + + @unittest_run_loop + async def test_endpoints(self): + self.assertEqual(str(self.app.router['test'].url_for()), '/test')