From 090d0766b8808f05b8d9c5d75fdbfeb136d222e4 Mon Sep 17 00:00:00 2001 From: Danial Keimasi Date: Mon, 13 May 2024 16:04:20 +0330 Subject: [PATCH] Add more tests --- .github/workflows/test.yml | 2 +- tests/settings.py | 3 ++- tests/templates/custom_document.html | 10 ++++++++++ tests/test_render.py | 22 +++++++++++++++++++--- 4 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 tests/templates/custom_document.html diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a1cd328..0e56196 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -37,4 +37,4 @@ jobs: pip install -e ".[dev]" - name: Run tests run: | - py.test --cov + pytest --cov diff --git a/tests/settings.py b/tests/settings.py index 827d5cd..6255f75 100644 --- a/tests/settings.py +++ b/tests/settings.py @@ -12,6 +12,7 @@ "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", + "django_nextjs.apps.DjangoNextJSConfig", ] MIDDLEWARE = [ @@ -27,7 +28,7 @@ TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", - "DIRS": [], + "DIRS": [os.path.join(BASE_DIR, "templates")], "APP_DIRS": True, "OPTIONS": { "context_processors": [ diff --git a/tests/templates/custom_document.html b/tests/templates/custom_document.html new file mode 100644 index 0000000..a0a945d --- /dev/null +++ b/tests/templates/custom_document.html @@ -0,0 +1,10 @@ +{% extends "django_nextjs/document_base.html" %} +{% block head %} + before_head + {{ block.super }} + after_head +{% endblock %} + +{% block body %} + {{ block.super }} +{% endblock %} diff --git a/tests/test_render.py b/tests/test_render.py index 6b7f68e..e29d77f 100644 --- a/tests/test_render.py +++ b/tests/test_render.py @@ -5,7 +5,8 @@ from django.utils.datastructures import MultiValueDict from django_nextjs.app_settings import NEXTJS_SERVER_URL -from django_nextjs.render import _get_render_context, render_nextjs_page +from django_nextjs.render import _get_render_context, render_nextjs_page_to_string +from django_nextjs.views import nextjs_page def test_get_render_context_empty_html(): @@ -48,7 +49,7 @@ def test_get_render_context_html_with_sections_and_content(): @pytest.mark.asyncio -async def test_render_nextjs_page(rf: RequestFactory): +async def test_nextjs_page(rf: RequestFactory): path = "random/path" params = MultiValueDict({"name": ["Adrian", "Simon"], "position": ["Developer"]}) request = rf.get(f"/{path}", data=params) @@ -61,7 +62,7 @@ async def test_render_nextjs_page(rf: RequestFactory): mock_get.return_value.__aenter__.return_value.headers = {"Location": "target_value", "unimportant": ""} mock_session.return_value.__aenter__ = AsyncMock(return_value=MagicMock(get=mock_get)) - http_response = await render_nextjs_page(request, allow_redirects=True, headers={"extra": "headers"}) + http_response = await nextjs_page(allow_redirects=True, headers={"extra": "headers"})(request) assert http_response.content == nextjs_response.encode() assert http_response.status_code == 200 @@ -80,3 +81,18 @@ async def test_render_nextjs_page(rf: RequestFactory): assert kwargs["headers"]["user-agent"] == "" assert kwargs["headers"]["x-real-ip"] == "127.0.0.1" assert kwargs["headers"]["extra"] == "headers" + + +@pytest.mark.asyncio +async def test_render_nextjs_page_to_string(rf: RequestFactory): + request = rf.get(f"/random/path") + nextjs_response = """
""" + + with patch("aiohttp.ClientSession") as mock_session: + with patch("aiohttp.ClientSession.get") as mock_get: + mock_get.return_value.__aenter__.return_value.text = AsyncMock(return_value=nextjs_response) + mock_session.return_value.__aenter__ = AsyncMock(return_value=MagicMock(get=mock_get)) + + response_text = await render_nextjs_page_to_string(request, template_name="custom_document.html") + assert "before_head" in response_text + assert "after_head" in response_text