From 67da22f08e05018ea968fcacbac9ac37ea925d85 Mon Sep 17 00:00:00 2001 From: David Wobrock Date: Sun, 9 Oct 2022 22:33:35 +0200 Subject: Fixed #34074 -- Added headers argument to RequestFactory and Client classes. --- tests/i18n/tests.py | 4 ++-- tests/requests/tests.py | 9 +++++-- tests/test_client/tests.py | 58 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 4 deletions(-) (limited to 'tests') diff --git a/tests/i18n/tests.py b/tests/i18n/tests.py index 1fec6009a5..6fab454c1d 100644 --- a/tests/i18n/tests.py +++ b/tests/i18n/tests.py @@ -2139,7 +2139,7 @@ class UnprefixedDefaultLanguageTests(SimpleTestCase): def test_unprefixed_language_with_accept_language(self): """'Accept-Language' is respected.""" - response = self.client.get("/simple/", HTTP_ACCEPT_LANGUAGE="fr") + response = self.client.get("/simple/", headers={"accept-language": "fr"}) self.assertRedirects(response, "/fr/simple/") def test_unprefixed_language_with_cookie_language(self): @@ -2149,7 +2149,7 @@ class UnprefixedDefaultLanguageTests(SimpleTestCase): self.assertRedirects(response, "/fr/simple/") def test_unprefixed_language_with_non_valid_language(self): - response = self.client.get("/simple/", HTTP_ACCEPT_LANGUAGE="fi") + response = self.client.get("/simple/", headers={"accept-language": "fi"}) self.assertEqual(response.content, b"Yes") self.client.cookies.load({settings.LANGUAGE_COOKIE_NAME: "fi"}) response = self.client.get("/simple/") diff --git a/tests/requests/tests.py b/tests/requests/tests.py index 833d68946b..3cbcefbda7 100644 --- a/tests/requests/tests.py +++ b/tests/requests/tests.py @@ -5,9 +5,14 @@ from urllib.parse import urlencode from django.core.exceptions import DisallowedHost from django.core.handlers.wsgi import LimitedStream, WSGIRequest -from django.http import HttpRequest, RawPostDataException, UnreadablePostError +from django.http import ( + HttpHeaders, + HttpRequest, + RawPostDataException, + UnreadablePostError, +) from django.http.multipartparser import MultiPartParserError -from django.http.request import HttpHeaders, split_domain_port +from django.http.request import split_domain_port from django.test import RequestFactory, SimpleTestCase, override_settings from django.test.client import FakePayload diff --git a/tests/test_client/tests.py b/tests/test_client/tests.py index 5612ae4462..a0473c7310 100644 --- a/tests/test_client/tests.py +++ b/tests/test_client/tests.py @@ -1066,6 +1066,52 @@ class RequestFactoryTest(SimpleTestCase): echoed_request_line = "TRACE {} {}".format(url_path, protocol) self.assertContains(response, echoed_request_line) + def test_request_factory_default_headers(self): + request = RequestFactory( + HTTP_AUTHORIZATION="Bearer faketoken", + HTTP_X_ANOTHER_HEADER="some other value", + ).get("/somewhere/") + self.assertEqual(request.headers["authorization"], "Bearer faketoken") + self.assertIn("HTTP_AUTHORIZATION", request.META) + self.assertEqual(request.headers["x-another-header"], "some other value") + self.assertIn("HTTP_X_ANOTHER_HEADER", request.META) + + request = RequestFactory( + headers={ + "Authorization": "Bearer faketoken", + "X-Another-Header": "some other value", + } + ).get("/somewhere/") + self.assertEqual(request.headers["authorization"], "Bearer faketoken") + 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_sets_headers(self): + for method_name, view in self.http_methods_and_views: + method = getattr(self.request_factory, method_name) + request = method( + "/somewhere/", + HTTP_AUTHORIZATION="Bearer faketoken", + HTTP_X_ANOTHER_HEADER="some other value", + ) + self.assertEqual(request.headers["authorization"], "Bearer faketoken") + self.assertIn("HTTP_AUTHORIZATION", request.META) + self.assertEqual(request.headers["x-another-header"], "some other value") + self.assertIn("HTTP_X_ANOTHER_HEADER", request.META) + + request = method( + "/somewhere/", + headers={ + "Authorization": "Bearer faketoken", + "X-Another-Header": "some other value", + }, + ) + self.assertEqual(request.headers["authorization"], "Bearer faketoken") + self.assertIn("HTTP_AUTHORIZATION", request.META) + self.assertEqual(request.headers["x-another-header"], "some other value") + self.assertIn("HTTP_X_ANOTHER_HEADER", request.META) + @override_settings(ROOT_URLCONF="test_client.urls") class AsyncClientTest(TestCase): @@ -1176,6 +1222,18 @@ class AsyncRequestFactoryTest(SimpleTestCase): self.assertEqual(request.headers["x-another-header"], "some other value") self.assertIn("HTTP_X_ANOTHER_HEADER", request.META) + request = self.request_factory.get( + "/somewhere/", + headers={ + "Authorization": "Bearer faketoken", + "X-Another-Header": "some other value", + }, + ) + self.assertEqual(request.headers["authorization"], "Bearer faketoken") + 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) -- cgit v1.3