Files
linkding/bookmarks/tests/test_bundles_new_view.py
Sascha Ißbrücker 1672dc0152 Add bundles for organizing bookmarks (#1097)
* add bundle model and query logic

* cleanup tests

* add basic form

* add success message

* Add form tests

* Add bundle list view

* fix edit view

* Add remove button

* Add basic preview logic

* Make pagination use absolute URLs

* Hide bookmark edits when rendering preview

* Render bookmark list in preview

* Reorder bundles

* Show bundles in bookmark view

* Make bookmark search respect selected bundle

* UI tweaks

* Fix bookmark scope

* Improve bundle preview

* Skip preview if form is submitted

* Show correct preview after invalid form submission

* Add option to hide bundles

* Merge new migrations

* Add tests for bundle menu

* Improve check for preview being removed
2025-06-19 16:47:29 +02:00

78 lines
3.0 KiB
Python

from django.test import TestCase
from django.urls import reverse
from bookmarks.models import BookmarkBundle
from bookmarks.tests.helpers import BookmarkFactoryMixin
class BundleNewViewTestCase(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 = {
"name": "Test Bundle",
"search": "test search",
"any_tags": "tag1 tag2",
"all_tags": "required-tag",
"excluded_tags": "excluded-tag",
}
return {**form_data, **overrides}
def test_should_create_new_bundle(self):
form_data = self.create_form_data()
response = self.client.post(reverse("linkding:bundles.new"), form_data)
self.assertEqual(BookmarkBundle.objects.count(), 1)
bundle = BookmarkBundle.objects.first()
self.assertEqual(bundle.owner, self.user)
self.assertEqual(bundle.name, form_data["name"])
self.assertEqual(bundle.search, form_data["search"])
self.assertEqual(bundle.any_tags, form_data["any_tags"])
self.assertEqual(bundle.all_tags, form_data["all_tags"])
self.assertEqual(bundle.excluded_tags, form_data["excluded_tags"])
self.assertRedirects(response, reverse("linkding:bundles.index"))
def test_should_increment_order_for_subsequent_bundles(self):
# Create first bundle
form_data_1 = self.create_form_data({"name": "Bundle 1"})
self.client.post(reverse("linkding:bundles.new"), form_data_1)
bundle1 = BookmarkBundle.objects.get(name="Bundle 1")
self.assertEqual(bundle1.order, 0)
# Create second bundle
form_data_2 = self.create_form_data({"name": "Bundle 2"})
self.client.post(reverse("linkding:bundles.new"), form_data_2)
bundle2 = BookmarkBundle.objects.get(name="Bundle 2")
self.assertEqual(bundle2.order, 1)
# Create another bundle with a higher order
self.setup_bundle(order=5)
# Create third bundle
form_data_3 = self.create_form_data({"name": "Bundle 3"})
self.client.post(reverse("linkding:bundles.new"), form_data_3)
bundle3 = BookmarkBundle.objects.get(name="Bundle 3")
self.assertEqual(bundle3.order, 6)
def test_incrementing_order_ignores_other_user_bookmark(self):
other_user = self.setup_user()
self.setup_bundle(user=other_user, order=10)
form_data = self.create_form_data({"name": "Bundle 1"})
self.client.post(reverse("linkding:bundles.new"), form_data)
bundle1 = BookmarkBundle.objects.get(name="Bundle 1")
self.assertEqual(bundle1.order, 0)
def test_should_return_422_with_invalid_form(self):
form_data = self.create_form_data({"name": ""})
response = self.client.post(reverse("linkding:bundles.new"), form_data)
self.assertEqual(response.status_code, 422)