2021-05-14 00:32:19 +00:00
|
|
|
from django.test import TestCase
|
|
|
|
from django.urls import reverse
|
|
|
|
|
|
|
|
from bookmarks.models import Bookmark
|
|
|
|
from bookmarks.tests.helpers import BookmarkFactoryMixin
|
|
|
|
|
|
|
|
|
|
|
|
class BookmarkNewViewTestCase(TestCase, BookmarkFactoryMixin):
|
|
|
|
|
|
|
|
def setUp(self) -> None:
|
|
|
|
user = self.get_or_create_test_user()
|
|
|
|
self.client.force_login(user)
|
|
|
|
|
|
|
|
def create_form_data(self, overrides=None):
|
|
|
|
if overrides is None:
|
|
|
|
overrides = {}
|
|
|
|
form_data = {
|
2024-01-27 10:29:16 +00:00
|
|
|
"url": "http://example.com",
|
|
|
|
"tag_string": "tag1 tag2",
|
|
|
|
"title": "test title",
|
|
|
|
"description": "test description",
|
|
|
|
"notes": "test notes",
|
|
|
|
"unread": False,
|
|
|
|
"shared": False,
|
|
|
|
"auto_close": "",
|
2021-05-14 00:32:19 +00:00
|
|
|
}
|
|
|
|
return {**form_data, **overrides}
|
|
|
|
|
|
|
|
def test_should_create_new_bookmark(self):
|
|
|
|
form_data = self.create_form_data()
|
|
|
|
|
2024-01-27 10:29:16 +00:00
|
|
|
self.client.post(reverse("bookmarks:new"), form_data)
|
2021-05-14 00:32:19 +00:00
|
|
|
|
|
|
|
self.assertEqual(Bookmark.objects.count(), 1)
|
|
|
|
|
|
|
|
bookmark = Bookmark.objects.first()
|
|
|
|
self.assertEqual(bookmark.owner, self.user)
|
2024-01-27 10:29:16 +00:00
|
|
|
self.assertEqual(bookmark.url, form_data["url"])
|
|
|
|
self.assertEqual(bookmark.title, form_data["title"])
|
|
|
|
self.assertEqual(bookmark.description, form_data["description"])
|
|
|
|
self.assertEqual(bookmark.notes, form_data["notes"])
|
|
|
|
self.assertEqual(bookmark.unread, form_data["unread"])
|
|
|
|
self.assertEqual(bookmark.shared, form_data["shared"])
|
2021-05-14 00:32:19 +00:00
|
|
|
self.assertEqual(bookmark.tags.count(), 2)
|
2024-01-27 10:29:16 +00:00
|
|
|
tags = bookmark.tags.order_by("name").all()
|
|
|
|
self.assertEqual(tags[0].name, "tag1")
|
|
|
|
self.assertEqual(tags[1].name, "tag2")
|
2021-05-14 00:32:19 +00:00
|
|
|
|
2022-07-23 20:17:20 +00:00
|
|
|
def test_should_create_new_unread_bookmark(self):
|
2024-01-27 10:29:16 +00:00
|
|
|
form_data = self.create_form_data({"unread": True})
|
2022-07-23 20:17:20 +00:00
|
|
|
|
2024-01-27 10:29:16 +00:00
|
|
|
self.client.post(reverse("bookmarks:new"), form_data)
|
2022-07-23 20:17:20 +00:00
|
|
|
|
|
|
|
self.assertEqual(Bookmark.objects.count(), 1)
|
|
|
|
|
|
|
|
bookmark = Bookmark.objects.first()
|
|
|
|
self.assertTrue(bookmark.unread)
|
|
|
|
|
2022-08-04 17:37:16 +00:00
|
|
|
def test_should_create_new_shared_bookmark(self):
|
2024-01-27 10:29:16 +00:00
|
|
|
form_data = self.create_form_data({"shared": True})
|
2022-08-04 17:37:16 +00:00
|
|
|
|
2024-01-27 10:29:16 +00:00
|
|
|
self.client.post(reverse("bookmarks:new"), form_data)
|
2022-08-04 17:37:16 +00:00
|
|
|
|
|
|
|
self.assertEqual(Bookmark.objects.count(), 1)
|
|
|
|
|
|
|
|
bookmark = Bookmark.objects.first()
|
|
|
|
self.assertTrue(bookmark.shared)
|
|
|
|
|
2021-05-14 00:32:19 +00:00
|
|
|
def test_should_prefill_url_from_url_parameter(self):
|
2024-01-27 10:29:16 +00:00
|
|
|
response = self.client.get(reverse("bookmarks:new") + "?url=http://example.com")
|
2021-05-14 00:32:19 +00:00
|
|
|
html = response.content.decode()
|
|
|
|
|
|
|
|
self.assertInHTML(
|
|
|
|
'<input type="text" name="url" value="http://example.com" '
|
|
|
|
'placeholder=" " autofocus class="form-input" required '
|
|
|
|
'id="id_url">',
|
2024-01-27 10:29:16 +00:00
|
|
|
html,
|
|
|
|
)
|
2023-08-14 22:20:52 +00:00
|
|
|
|
2023-05-30 07:19:17 +00:00
|
|
|
def test_should_prefill_title_from_url_parameter(self):
|
2024-01-27 10:29:16 +00:00
|
|
|
response = self.client.get(reverse("bookmarks:new") + "?title=Example%20Title")
|
2023-05-30 07:19:17 +00:00
|
|
|
html = response.content.decode()
|
|
|
|
|
|
|
|
self.assertInHTML(
|
|
|
|
'<input type="text" name="title" value="Example Title" '
|
|
|
|
'class="form-input" maxlength="512" autocomplete="off" '
|
|
|
|
'id="id_title">',
|
2024-01-27 10:29:16 +00:00
|
|
|
html,
|
|
|
|
)
|
2023-08-14 22:20:52 +00:00
|
|
|
|
2023-05-30 07:19:17 +00:00
|
|
|
def test_should_prefill_description_from_url_parameter(self):
|
2024-01-27 10:29:16 +00:00
|
|
|
response = self.client.get(
|
|
|
|
reverse("bookmarks:new") + "?description=Example%20Site%20Description"
|
|
|
|
)
|
2023-05-30 07:19:17 +00:00
|
|
|
html = response.content.decode()
|
|
|
|
|
|
|
|
self.assertInHTML(
|
|
|
|
'<textarea name="description" class="form-input" cols="40" '
|
|
|
|
'rows="2" id="id_description">Example Site Description</textarea>',
|
2024-01-27 10:29:16 +00:00
|
|
|
html,
|
|
|
|
)
|
2021-05-14 00:32:19 +00:00
|
|
|
|
|
|
|
def test_should_enable_auto_close_when_specified_in_url_parameter(self):
|
2024-01-27 10:29:16 +00:00
|
|
|
response = self.client.get(reverse("bookmarks:new") + "?auto_close")
|
2021-05-14 00:32:19 +00:00
|
|
|
html = response.content.decode()
|
|
|
|
|
|
|
|
self.assertInHTML(
|
|
|
|
'<input type="hidden" name="auto_close" value="true" '
|
|
|
|
'id="id_auto_close">',
|
2024-01-27 10:29:16 +00:00
|
|
|
html,
|
|
|
|
)
|
2021-05-14 00:32:19 +00:00
|
|
|
|
2024-01-27 10:29:16 +00:00
|
|
|
def test_should_not_enable_auto_close_when_not_specified_in_url_parameter(self):
|
|
|
|
response = self.client.get(reverse("bookmarks:new"))
|
2021-05-14 00:32:19 +00:00
|
|
|
html = response.content.decode()
|
|
|
|
|
2024-01-27 10:29:16 +00:00
|
|
|
self.assertInHTML(
|
|
|
|
'<input type="hidden" name="auto_close" id="id_auto_close">', html
|
|
|
|
)
|
2021-05-14 00:32:19 +00:00
|
|
|
|
|
|
|
def test_should_redirect_to_index_view(self):
|
|
|
|
form_data = self.create_form_data()
|
|
|
|
|
2024-01-27 10:29:16 +00:00
|
|
|
response = self.client.post(reverse("bookmarks:new"), form_data)
|
2021-05-14 00:32:19 +00:00
|
|
|
|
2024-01-27 10:29:16 +00:00
|
|
|
self.assertRedirects(response, reverse("bookmarks:index"))
|
2021-05-14 00:32:19 +00:00
|
|
|
|
2022-03-25 17:29:54 +00:00
|
|
|
def test_should_not_redirect_to_external_url(self):
|
|
|
|
form_data = self.create_form_data()
|
|
|
|
|
2024-01-27 10:29:16 +00:00
|
|
|
response = self.client.post(
|
|
|
|
reverse("bookmarks:new") + "?return_url=https://example.com", form_data
|
|
|
|
)
|
2022-03-25 17:29:54 +00:00
|
|
|
|
2024-01-27 10:29:16 +00:00
|
|
|
self.assertRedirects(response, reverse("bookmarks:index"))
|
2022-03-25 17:29:54 +00:00
|
|
|
|
2021-05-14 00:32:19 +00:00
|
|
|
def test_auto_close_should_redirect_to_close_view(self):
|
2024-01-27 10:29:16 +00:00
|
|
|
form_data = self.create_form_data({"auto_close": "true"})
|
2021-05-14 00:32:19 +00:00
|
|
|
|
2024-01-27 10:29:16 +00:00
|
|
|
response = self.client.post(reverse("bookmarks:new"), form_data)
|
2021-05-14 00:32:19 +00:00
|
|
|
|
2024-01-27 10:29:16 +00:00
|
|
|
self.assertRedirects(response, reverse("bookmarks:close"))
|
2022-08-04 17:37:16 +00:00
|
|
|
|
|
|
|
def test_should_respect_share_profile_setting(self):
|
|
|
|
self.user.profile.enable_sharing = False
|
|
|
|
self.user.profile.save()
|
2024-01-27 10:29:16 +00:00
|
|
|
response = self.client.get(reverse("bookmarks:new"))
|
2022-08-04 17:37:16 +00:00
|
|
|
html = response.content.decode()
|
|
|
|
|
2024-01-27 10:29:16 +00:00
|
|
|
self.assertInHTML(
|
|
|
|
"""
|
2022-08-04 17:37:16 +00:00
|
|
|
<label for="id_shared" class="form-checkbox">
|
|
|
|
<input type="checkbox" name="shared" id="id_shared">
|
|
|
|
<i class="form-icon"></i>
|
|
|
|
<span>Share</span>
|
|
|
|
</label>
|
2024-01-27 10:29:16 +00:00
|
|
|
""",
|
|
|
|
html,
|
|
|
|
count=0,
|
|
|
|
)
|
2022-08-04 17:37:16 +00:00
|
|
|
|
|
|
|
self.user.profile.enable_sharing = True
|
|
|
|
self.user.profile.save()
|
2024-01-27 10:29:16 +00:00
|
|
|
response = self.client.get(reverse("bookmarks:new"))
|
2022-08-04 17:37:16 +00:00
|
|
|
html = response.content.decode()
|
|
|
|
|
2024-01-27 10:29:16 +00:00
|
|
|
self.assertInHTML(
|
|
|
|
"""
|
2022-08-04 17:37:16 +00:00
|
|
|
<label for="id_shared" class="form-checkbox">
|
|
|
|
<input type="checkbox" name="shared" id="id_shared">
|
|
|
|
<i class="form-icon"></i>
|
|
|
|
<span>Share</span>
|
|
|
|
</label>
|
2024-01-27 10:29:16 +00:00
|
|
|
""",
|
|
|
|
html,
|
|
|
|
count=1,
|
|
|
|
)
|
2023-05-20 09:54:26 +00:00
|
|
|
|
2023-08-14 22:20:52 +00:00
|
|
|
def test_should_show_respective_share_hint(self):
|
|
|
|
self.user.profile.enable_sharing = True
|
|
|
|
self.user.profile.save()
|
|
|
|
|
2024-01-27 10:29:16 +00:00
|
|
|
response = self.client.get(reverse("bookmarks:new"))
|
2023-08-14 22:20:52 +00:00
|
|
|
html = response.content.decode()
|
2024-01-27 10:29:16 +00:00
|
|
|
self.assertInHTML(
|
|
|
|
"""
|
2023-08-14 22:20:52 +00:00
|
|
|
<div class="form-input-hint">
|
|
|
|
Share this bookmark with other registered users.
|
|
|
|
</div>
|
2024-01-27 10:29:16 +00:00
|
|
|
""",
|
|
|
|
html,
|
|
|
|
)
|
2023-08-14 22:20:52 +00:00
|
|
|
|
|
|
|
self.user.profile.enable_public_sharing = True
|
|
|
|
self.user.profile.save()
|
|
|
|
|
2024-01-27 10:29:16 +00:00
|
|
|
response = self.client.get(reverse("bookmarks:new"))
|
2023-08-14 22:20:52 +00:00
|
|
|
html = response.content.decode()
|
2024-01-27 10:29:16 +00:00
|
|
|
self.assertInHTML(
|
|
|
|
"""
|
2023-08-14 22:20:52 +00:00
|
|
|
<div class="form-input-hint">
|
|
|
|
Share this bookmark with other registered users and anonymous users.
|
|
|
|
</div>
|
2024-01-27 10:29:16 +00:00
|
|
|
""",
|
|
|
|
html,
|
|
|
|
)
|
2023-08-14 22:20:52 +00:00
|
|
|
|
2024-01-27 09:28:46 +00:00
|
|
|
def test_should_hide_notes_if_there_are_no_notes(self):
|
|
|
|
bookmark = self.setup_bookmark()
|
2024-01-27 10:29:16 +00:00
|
|
|
response = self.client.get(reverse("bookmarks:edit", args=[bookmark.id]))
|
2023-08-14 22:20:52 +00:00
|
|
|
|
2024-01-27 09:28:46 +00:00
|
|
|
self.assertContains(response, '<details class="notes">', count=1)
|
2024-04-17 21:08:18 +00:00
|
|
|
|
|
|
|
def test_should_not_check_unread_by_default(self):
|
|
|
|
response = self.client.get(reverse("bookmarks:new"))
|
|
|
|
html = response.content.decode()
|
|
|
|
|
|
|
|
self.assertInHTML(
|
|
|
|
'<input type="checkbox" name="unread" id="id_unread">',
|
|
|
|
html,
|
|
|
|
)
|
|
|
|
|
|
|
|
def test_should_check_unread_when_configured_in_profile(self):
|
|
|
|
self.user.profile.default_mark_unread = True
|
|
|
|
self.user.profile.save()
|
|
|
|
|
|
|
|
response = self.client.get(reverse("bookmarks:new"))
|
|
|
|
html = response.content.decode()
|
|
|
|
|
|
|
|
self.assertInHTML(
|
|
|
|
'<input type="checkbox" name="unread" value="true" '
|
|
|
|
'id="id_unread" checked="">',
|
|
|
|
html,
|
|
|
|
)
|