Skip to content

Commit d8e40e2

Browse files
committed
add test for async base middleware
1 parent 16fbb9b commit d8e40e2

File tree

2 files changed

+91
-0
lines changed

2 files changed

+91
-0
lines changed

tests/test_middlewares/__init__.py

Whitespace-only changes.
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
from inspect import iscoroutinefunction
2+
3+
import pytest
4+
5+
from django.core.exceptions import ImproperlyConfigured
6+
from django.http.response import HttpResponse
7+
8+
from django_async_extensions.amiddleware.base import AsyncMiddlewareMixin
9+
10+
11+
class TestMiddlewareMixin:
12+
def test_repr(self):
13+
class GetResponse:
14+
async def __call__(self):
15+
return HttpResponse()
16+
17+
async def get_response():
18+
return HttpResponse()
19+
20+
assert (
21+
repr(AsyncMiddlewareMixin(GetResponse()))
22+
== "<AsyncMiddlewareMixin get_response=GetResponse>"
23+
)
24+
assert (
25+
repr(AsyncMiddlewareMixin(get_response))
26+
== "<AsyncMiddlewareMixin get_response="
27+
"TestMiddlewareMixin.test_repr.<locals>.get_response>"
28+
)
29+
30+
def test_call_is_async(self):
31+
assert iscoroutinefunction(AsyncMiddlewareMixin.__call__)
32+
33+
def test_middleware_raises_if_get_response_is_sync(self):
34+
def get_response():
35+
return HttpResponse()
36+
37+
with pytest.raises(ImproperlyConfigured):
38+
AsyncMiddlewareMixin(get_response)
39+
40+
async def test_middleware_get_response(self, client):
41+
resp = HttpResponse()
42+
43+
async def get_response(request):
44+
return resp
45+
46+
middleware = AsyncMiddlewareMixin(get_response)
47+
assert await middleware(client) is resp
48+
49+
async def test_middleware_process_request(self, client, mocker):
50+
resp = HttpResponse()
51+
52+
class RequestMiddleware(AsyncMiddlewareMixin):
53+
async def process_request(self, request):
54+
return resp
55+
56+
spy = mocker.spy(RequestMiddleware, "process_request")
57+
58+
async def get_response(request):
59+
return HttpResponse()
60+
61+
middleware = RequestMiddleware(get_response)
62+
assert await middleware(client) is resp is spy.spy_return
63+
assert spy.call_count == 1
64+
spy.assert_called_once_with(middleware, client)
65+
66+
async def test_middleware_process_response(self, client, mocker):
67+
req = HttpResponse()
68+
resp = HttpResponse()
69+
70+
class ResponseMiddleware(AsyncMiddlewareMixin):
71+
async def process_request(self, request):
72+
return req
73+
74+
async def process_response(self, request, response):
75+
return resp
76+
77+
spy1 = mocker.spy(ResponseMiddleware, "process_request")
78+
spy2 = mocker.spy(ResponseMiddleware, "process_response")
79+
80+
async def get_response(request):
81+
return HttpResponse()
82+
83+
middleware = ResponseMiddleware(get_response)
84+
result = await middleware(client)
85+
86+
assert result is resp is spy2.spy_return
87+
assert spy2.call_count == 1
88+
spy2.assert_called_once_with(middleware, client, req)
89+
90+
assert spy1.call_count == 1
91+
assert spy1.spy_return == req

0 commit comments

Comments
 (0)