#35414: Issue with AsyncClient ignoring default headers compared to synchronous
Client
-------------------------------------+-------------------------------------
Reporter: 설원준(Wonjoon | Owner: nobody
Seol)/Dispatch squad |
Type: Bug | Status: closed
Component: HTTP handling | Version: 5.0
Severity: Normal | Resolution: needsinfo
Keywords: AsyncClient, | Triage Stage:
ASGIRequest | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Comment (by 설원준(Wonjoon Seol)/Dispatch squad):
Hi Sarah, the pytest fixture is only there to reduce boilerplates.
Here is your requested test case without dependencies.
**polls/views.py**
{{{
from django.http import JsonResponse
def index(request):
data = {"message": "This is an example API response"}
return JsonResponse(data)
}}}
**middleware.py (Not required, can just print self.META inside
ASGIRequest.**
{{{
class JWTMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
if 'HTTP_AUTHORIZATION' not in request.META:
return JsonResponse({'error': 'Authorization header is
missing'}, status=401)
return self.get_response(request)
}}}
**polls/tests.py**
{{{
from http import HTTPStatus
from django.test import TestCase, AsyncClient
from django.urls import reverse
class EXAMPLE_TESTS(TestCase):
async def test_should_return_ok( # Fails
self,
) -> None:
async_client = AsyncClient(HTTP_AUTHORIZATION=f"Bearer
I_AM_JWT_TOKEN") # AUTHORIZATION, HTTP_AUTHORIZATION both fails due to the
reason in the original post.
response = await async_client.get(
reverse("index"),
)
self.assertEqual(response.status_code, HTTPStatus.OK)
async def test_should_return_ok2( # Passes
self,
) -> None:
async_client = AsyncClient()
response = await async_client.get(
reverse("index"),
AUTHORIZATION=f"Bearer I_AM_JWT_TOKEN"
)
self.assertEqual(response.status_code, HTTPStatus.OK)
}}}
{{{
**printing META: (Customer header missing)**
{'REQUEST_METHOD': 'GET', 'QUERY_STRING': '', 'SCRIPT_NAME': '',
'PATH_INFO': '/polls/', 'wsgi.multithread': True, 'wsgi.multiprocess':
True, 'REMOTE_ADDR': '127.0.0.1', 'REMOTE_HOST': '127.0.0.1',
'REMOTE_PORT': 0, 'SERVER_NAME': '127.0.0.1', 'SERVER_PORT': '80',
'HTTP_HOST': 'testserver', 'HTTP_COOKIE': ''}
F
======================================================================
FAIL: test_should_return_ok
(polls.tests.EXAMPLE_TESTS.test_should_return_ok)
----------------------------------------------------------------------
Traceback (most recent call last):
...
File "/Users/.../workspace/django-mvp/mysite/polls/tests.py", line 17,
in test_should_return_ok
self.assertEqual(response.status_code, HTTPStatus.OK)
AssertionError: 401 != <HTTPStatus.OK: 200>
Ran 2 tests in 0.012s
FAILED (failures=1)
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/35414#comment:6>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/0107018f2e81f32f-9edb90e9-b9e4-467d-901c-afe3a3347e15-000000%40eu-central-1.amazonses.com.