diff --git a/tests/asgi/tests.py b/tests/asgi/tests.py index 94ec5dc560..d3cc09cc50 100644 --- a/tests/asgi/tests.py +++ b/tests/asgi/tests.py @@ -78,6 +78,16 @@ class ASGITest(SimpleTestCase): # Allow response.close() to finish. await communicator.wait() + async def test_asgi_cookies(self): + application = get_asgi_application() + scope = self.async_request_factory._base_scope(path="/cookie/") + communicator = ApplicationCommunicator(application, scope) + await communicator.send_input({"type": "http.request"}) + response_start = await communicator.receive_output() + self.assertIn((b"Set-Cookie", b"key=value; Path=/"), response_start["headers"]) + # Allow response.close() to finish. + await communicator.wait() + # Python's file API is not async compatible. A third-party library such # as https://github.com/Tinche/aiofiles allows passing the file to # FileResponse as an async iterator. With a sync iterator diff --git a/tests/asgi/urls.py b/tests/asgi/urls.py index 931b7d5206..0311cf3f76 100644 --- a/tests/asgi/urls.py +++ b/tests/asgi/urls.py @@ -25,6 +25,12 @@ def hello_meta(request): ) +def hello_cookie(request): + response = HttpResponse("Hello World!") + response.set_cookie("key", "value") + return response + + def sync_waiter(request): with sync_waiter.lock: sync_waiter.active_threads.add(threading.current_thread()) @@ -61,6 +67,7 @@ test_filename = __file__ urlpatterns = [ path("", hello), + path("cookie/", hello_cookie), path("file/", lambda x: FileResponse(open(test_filename, "rb"))), path("meta/", hello_meta), path("post/", post_echo),