From f6d3557aa13f33cfe2fa41094fc3d8a8b09c368c Mon Sep 17 00:00:00 2001 From: pochangl Date: Thu, 15 Jul 2021 19:09:29 +0800 Subject: [PATCH] Fixed #32929 -- Fixed handling query strings in AsyncRequestFactory. --- django/test/client.py | 2 ++ tests/test_client/tests.py | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/django/test/client.py b/django/test/client.py index 4a0b6b45f4..b4c091aa5c 100644 --- a/django/test/client.py +++ b/django/test/client.py @@ -547,6 +547,8 @@ class AsyncRequestFactory(RequestFactory): follow = extra.pop('follow', None) if follow is not None: s['follow'] = follow + if query_string := extra.pop('QUERY_STRING', None): + s['query_string'] = query_string s['headers'] += [ (key.lower().encode('ascii'), value.encode('latin1')) for key, value in extra.items() diff --git a/tests/test_client/tests.py b/tests/test_client/tests.py index d9be3416f2..3799dada91 100644 --- a/tests/test_client/tests.py +++ b/tests/test_client/tests.py @@ -1010,6 +1010,10 @@ class AsyncClientTest(TestCase): with self.assertRaisesMessage(NotImplementedError, msg): await method('/redirect_view/', follow=True) + async def test_get_data(self): + response = await self.async_client.get('/get_view/', {'var': 'val'}) + self.assertContains(response, 'This is a test. val is the value.') + @override_settings(ROOT_URLCONF='test_client.urls') class AsyncRequestFactoryTest(SimpleTestCase): @@ -1063,3 +1067,8 @@ class AsyncRequestFactoryTest(SimpleTestCase): self.assertIn('HTTP_AUTHORIZATION', request.META) self.assertEqual(request.headers['x-another-header'], 'some other value') self.assertIn('HTTP_X_ANOTHER_HEADER', request.META) + + def test_request_factory_query_string(self): + request = self.request_factory.get('/somewhere/', {'example': 'data'}) + self.assertNotIn('Query-String', request.headers) + self.assertEqual(request.GET['example'], 'data')