from django.contrib.auth.models import User
from django.test import TestCase
from django.urls import reverse
from bookmarks.models import build_tag_string
from bookmarks.tests.helpers import BookmarkFactoryMixin
class BookmarkEditViewTestCase(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 = {
"url": "http://example.com/edited",
"tag_string": "editedtag1 editedtag2",
"title": "edited title",
"description": "edited description",
"notes": "edited notes",
"unread": False,
"shared": False,
}
return {**form_data, **overrides}
def test_should_render_successfully(self):
bookmark = self.setup_bookmark()
response = self.client.get(
reverse("linkding:bookmarks.edit", args=[bookmark.id])
)
self.assertEqual(response.status_code, 200)
def test_should_edit_bookmark(self):
bookmark = self.setup_bookmark()
form_data = self.create_form_data({"id": bookmark.id})
self.client.post(
reverse("linkding:bookmarks.edit", args=[bookmark.id]), form_data
)
bookmark.refresh_from_db()
self.assertEqual(bookmark.owner, self.user)
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"])
self.assertEqual(bookmark.tags.count(), 2)
tags = bookmark.tags.order_by("name").all()
self.assertEqual(tags[0].name, "editedtag1")
self.assertEqual(tags[1].name, "editedtag2")
def test_should_return_422_with_invalid_form(self):
bookmark = self.setup_bookmark()
form_data = self.create_form_data({"id": bookmark.id, "url": ""})
response = self.client.post(
reverse("linkding:bookmarks.edit", args=[bookmark.id]), form_data
)
self.assertEqual(response.status_code, 422)
def test_should_edit_unread_state(self):
bookmark = self.setup_bookmark()
form_data = self.create_form_data({"id": bookmark.id, "unread": True})
self.client.post(
reverse("linkding:bookmarks.edit", args=[bookmark.id]), form_data
)
bookmark.refresh_from_db()
self.assertTrue(bookmark.unread)
form_data = self.create_form_data({"id": bookmark.id, "unread": False})
self.client.post(
reverse("linkding:bookmarks.edit", args=[bookmark.id]), form_data
)
bookmark.refresh_from_db()
self.assertFalse(bookmark.unread)
def test_should_edit_shared_state(self):
bookmark = self.setup_bookmark()
form_data = self.create_form_data({"id": bookmark.id, "shared": True})
self.client.post(
reverse("linkding:bookmarks.edit", args=[bookmark.id]), form_data
)
bookmark.refresh_from_db()
self.assertTrue(bookmark.shared)
form_data = self.create_form_data({"id": bookmark.id, "shared": False})
self.client.post(
reverse("linkding:bookmarks.edit", args=[bookmark.id]), form_data
)
bookmark.refresh_from_db()
self.assertFalse(bookmark.shared)
def test_should_prefill_bookmark_form_fields(self):
tag1 = self.setup_tag()
tag2 = self.setup_tag()
bookmark = self.setup_bookmark(
tags=[tag1, tag2],
title="edited title",
description="edited description",
notes="edited notes",
)
response = self.client.get(
reverse("linkding:bookmarks.edit", args=[bookmark.id])
)
html = response.content.decode()
self.assertInHTML(
f"""
""",
html,
)
tag_string = build_tag_string(bookmark.tag_names, " ")
self.assertInHTML(
f"""