paperless-ngx/src/documents/tests/test_views.py

157 lines
5.1 KiB
Python
Raw Normal View History

import tempfile
from datetime import timedelta
from pathlib import Path
2021-01-07 16:58:38 +01:00
from django.conf import settings
from django.contrib.auth.models import Permission
2021-01-07 16:58:38 +01:00
from django.contrib.auth.models import User
from django.test import TestCase
from django.test import override_settings
from django.utils import timezone
from rest_framework import status
2021-01-07 16:58:38 +01:00
from documents.models import Document
from documents.models import ShareLink
from documents.tests.utils import DirectoriesMixin
from paperless.models import ApplicationConfiguration
2021-01-07 16:58:38 +01:00
class TestViews(DirectoriesMixin, TestCase):
2021-01-07 16:58:38 +01:00
def setUp(self) -> None:
self.user = User.objects.create_user("testuser")
super().setUp()
2021-01-07 16:58:38 +01:00
def test_login_redirect(self):
2022-02-27 15:26:41 +01:00
response = self.client.get("/")
self.assertEqual(response.status_code, status.HTTP_302_FOUND)
2021-01-07 16:58:38 +01:00
self.assertEqual(response.url, "/accounts/login/?next=/")
def test_index(self):
self.client.force_login(self.user)
2023-04-25 09:59:24 -07:00
for language_given, language_actual in [
2022-02-27 15:26:41 +01:00
("", "en-US"),
("en-US", "en-US"),
("de", "de-DE"),
("en", "en-US"),
("en-us", "en-US"),
("fr", "fr-FR"),
("jp", "en-US"),
]:
2021-01-07 16:58:38 +01:00
if language_given:
2022-02-27 15:26:41 +01:00
self.client.cookies.load(
{settings.LANGUAGE_COOKIE_NAME: language_given},
2022-02-27 15:26:41 +01:00
)
elif settings.LANGUAGE_COOKIE_NAME in self.client.cookies:
2021-01-07 16:58:38 +01:00
self.client.cookies.pop(settings.LANGUAGE_COOKIE_NAME)
2022-02-27 15:26:41 +01:00
response = self.client.get(
"/",
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
2022-02-27 15:26:41 +01:00
self.assertEqual(
response.context_data["webmanifest"],
f"frontend/{language_actual}/manifest.webmanifest",
)
self.assertEqual(
response.context_data["styles_css"],
f"frontend/{language_actual}/styles.css",
)
self.assertEqual(
response.context_data["runtime_js"],
f"frontend/{language_actual}/runtime.js",
)
self.assertEqual(
response.context_data["polyfills_js"],
f"frontend/{language_actual}/polyfills.js",
)
self.assertEqual(
response.context_data["main_js"],
f"frontend/{language_actual}/main.js",
2022-02-27 15:26:41 +01:00
)
@override_settings(BASE_URL="/paperless/")
def test_index_app_logo_with_base_url(self):
"""
GIVEN:
- Existing config with app_logo specified
WHEN:
- Index page is loaded
THEN:
- app_logo is prefixed with BASE_URL
"""
config = ApplicationConfiguration.objects.first()
config.app_logo = "/logo/example.jpg"
config.save()
self.client.force_login(self.user)
response = self.client.get("/")
self.assertEqual(
response.context["APP_LOGO"],
f"/paperless{config.app_logo}",
)
def test_share_link_views(self):
"""
GIVEN:
- Share link created
WHEN:
- Valid request for share link is made
- Invalid request for share link is made
- Request for expired share link is made
THEN:
- Document is returned without need for login
- User is redirected to login with error
- User is redirected to login with error
"""
_, filename = tempfile.mkstemp(dir=self.dirs.originals_dir)
content = b"This is a test"
with Path(filename).open("wb") as f:
f.write(content)
doc = Document.objects.create(
title="none",
filename=Path(filename).name,
mime_type="application/pdf",
)
sharelink_permissions = Permission.objects.filter(
codename__contains="sharelink",
)
self.user.user_permissions.add(*sharelink_permissions)
self.user.save()
self.client.force_login(self.user)
self.client.post(
"/api/share_links/",
{
"document": doc.pk,
"file_version": "original",
},
)
sl1 = ShareLink.objects.get(document=doc)
self.client.logout()
# Valid
response = self.client.get(f"/share/{sl1.slug}")
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.content, content)
# Invalid
response = self.client.get("/share/123notaslug", follow=True)
response.render()
self.assertEqual(response.request["PATH_INFO"], "/accounts/login/")
self.assertContains(response, b"Share link was not found")
# Expired
sl1.expiration = timezone.now() - timedelta(days=1)
sl1.save()
response = self.client.get(f"/share/{sl1.slug}", follow=True)
response.render()
self.assertEqual(response.request["PATH_INFO"], "/accounts/login/")
self.assertContains(response, b"Share link has expired")