Skip to content

Commit ed69e29

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

File tree

2 files changed

+85
-0
lines changed

2 files changed

+85
-0
lines changed

tests/test_middlewares/__init__.py

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

0 commit comments

Comments
 (0)