mirror of
https://github.com/sissbruecker/linkding.git
synced 2025-08-13 13:39:27 +02:00
Allow configuring landing page for unauthenticated users (#808)
* allow configuring landing page * add tests
This commit is contained in:
@@ -24,6 +24,11 @@ class BookmarkFactoryMixin:
|
||||
|
||||
return self.user
|
||||
|
||||
def setup_superuser(self):
|
||||
return User.objects.create_superuser(
|
||||
"superuser", "superuser@example.com", "password123"
|
||||
)
|
||||
|
||||
def setup_bookmark(
|
||||
self,
|
||||
is_archived: bool = False,
|
||||
|
@@ -1,29 +0,0 @@
|
||||
from django.test import TestCase
|
||||
from django.urls import reverse
|
||||
|
||||
from bookmarks.tests.helpers import BookmarkFactoryMixin
|
||||
|
||||
|
||||
class AnonymousViewTestCase(TestCase, BookmarkFactoryMixin):
|
||||
def assertSharedBookmarksLinkCount(self, response, count):
|
||||
url = reverse("bookmarks:shared")
|
||||
self.assertContains(
|
||||
response,
|
||||
f'<a href="{url}" class="btn btn-link">Shared bookmarks</a>',
|
||||
count=count,
|
||||
)
|
||||
|
||||
def test_publicly_shared_bookmarks_link(self):
|
||||
# should not render link if no public shares exist
|
||||
user = self.setup_user(enable_sharing=True)
|
||||
self.setup_bookmark(user=user, shared=True)
|
||||
|
||||
response = self.client.get(reverse("login"))
|
||||
self.assertSharedBookmarksLinkCount(response, 0)
|
||||
|
||||
# should render link if public shares exist
|
||||
user.profile.enable_public_sharing = True
|
||||
user.profile.save()
|
||||
|
||||
response = self.client.get(reverse("login"))
|
||||
self.assertSharedBookmarksLinkCount(response, 1)
|
40
bookmarks/tests/test_root_view.py
Normal file
40
bookmarks/tests/test_root_view.py
Normal file
@@ -0,0 +1,40 @@
|
||||
from django.test import TestCase
|
||||
from django.urls import reverse
|
||||
|
||||
from bookmarks.models import GlobalSettings
|
||||
from bookmarks.tests.helpers import BookmarkFactoryMixin
|
||||
|
||||
|
||||
class AnonymousViewTestCase(TestCase, BookmarkFactoryMixin):
|
||||
def test_unauthenticated_user_redirect_to_login_by_default(self):
|
||||
response = self.client.get(reverse("bookmarks:root"))
|
||||
self.assertRedirects(response, reverse("login"))
|
||||
|
||||
def test_unauthenticated_redirect_to_shared_bookmarks_if_configured_in_global_settings(
|
||||
self,
|
||||
):
|
||||
settings = GlobalSettings.get()
|
||||
settings.landing_page = GlobalSettings.LANDING_PAGE_SHARED_BOOKMARKS
|
||||
settings.save()
|
||||
|
||||
response = self.client.get(reverse("bookmarks:root"))
|
||||
self.assertRedirects(response, reverse("bookmarks:shared"))
|
||||
|
||||
def test_authenticated_user_always_redirected_to_bookmarks(self):
|
||||
self.client.force_login(self.get_or_create_test_user())
|
||||
|
||||
response = self.client.get(reverse("bookmarks:root"))
|
||||
self.assertRedirects(response, reverse("bookmarks:index"))
|
||||
|
||||
settings = GlobalSettings.get()
|
||||
settings.landing_page = GlobalSettings.LANDING_PAGE_SHARED_BOOKMARKS
|
||||
settings.save()
|
||||
|
||||
response = self.client.get(reverse("bookmarks:root"))
|
||||
self.assertRedirects(response, reverse("bookmarks:index"))
|
||||
|
||||
settings.landing_page = GlobalSettings.LANDING_PAGE_LOGIN
|
||||
settings.save()
|
||||
|
||||
response = self.client.get(reverse("bookmarks:root"))
|
||||
self.assertRedirects(response, reverse("bookmarks:index"))
|
@@ -6,7 +6,7 @@ from django.test import TestCase, override_settings
|
||||
from django.urls import reverse
|
||||
from requests import RequestException
|
||||
|
||||
from bookmarks.models import UserProfile
|
||||
from bookmarks.models import UserProfile, GlobalSettings
|
||||
from bookmarks.services import tasks
|
||||
from bookmarks.tests.helpers import BookmarkFactoryMixin
|
||||
from bookmarks.views.settings import app_version, get_version_info
|
||||
@@ -465,3 +465,63 @@ class SettingsGeneralViewTestCase(TestCase, BookmarkFactoryMixin):
|
||||
self.assertSuccessMessage(
|
||||
html, "Queued 5 missing snapshots. This may take a while...", count=0
|
||||
)
|
||||
|
||||
def test_update_global_settings(self):
|
||||
superuser = self.setup_superuser()
|
||||
self.client.force_login(superuser)
|
||||
|
||||
form_data = {
|
||||
"update_global_settings": "",
|
||||
"landing_page": GlobalSettings.LANDING_PAGE_SHARED_BOOKMARKS,
|
||||
}
|
||||
response = self.client.post(reverse("bookmarks:settings.general"), form_data)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertSuccessMessage(response.content.decode(), "Global settings updated")
|
||||
|
||||
global_settings = GlobalSettings.get()
|
||||
self.assertEqual(global_settings.landing_page, form_data["landing_page"])
|
||||
|
||||
def test_update_global_settings_should_not_be_called_without_respective_form_action(
|
||||
self,
|
||||
):
|
||||
superuser = self.setup_superuser()
|
||||
self.client.force_login(superuser)
|
||||
|
||||
form_data = {
|
||||
"landing_page": GlobalSettings.LANDING_PAGE_SHARED_BOOKMARKS,
|
||||
}
|
||||
response = self.client.post(reverse("bookmarks:settings.general"), form_data)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertSuccessMessage(
|
||||
response.content.decode(), "Global settings updated", count=0
|
||||
)
|
||||
|
||||
def test_update_global_settings_checks_for_superuser(self):
|
||||
form_data = {
|
||||
"update_global_settings": "",
|
||||
"landing_page": GlobalSettings.LANDING_PAGE_SHARED_BOOKMARKS,
|
||||
}
|
||||
response = self.client.post(reverse("bookmarks:settings.general"), form_data)
|
||||
self.assertEqual(response.status_code, 403)
|
||||
|
||||
def test_global_settings_only_visible_for_superuser(self):
|
||||
response = self.client.get(reverse("bookmarks:settings.general"))
|
||||
html = response.content.decode()
|
||||
|
||||
self.assertInHTML(
|
||||
"<h2>Global settings</h2>",
|
||||
html,
|
||||
count=0,
|
||||
)
|
||||
|
||||
superuser = self.setup_superuser()
|
||||
self.client.force_login(superuser)
|
||||
|
||||
response = self.client.get(reverse("bookmarks:settings.general"))
|
||||
html = response.content.decode()
|
||||
|
||||
self.assertInHTML(
|
||||
"<h2>Global settings</h2>",
|
||||
html,
|
||||
count=1,
|
||||
)
|
||||
|
Reference in New Issue
Block a user