Skip to content

Commit 52bd543

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

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed

tests/test_middlewares/__init__.py

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

0 commit comments

Comments
 (0)