From 9dc3521d5e62ac3f8b6414302d27f192f9c752a1 Mon Sep 17 00:00:00 2001 From: ab623 Date: Wed, 17 Apr 2024 22:08:18 +0100 Subject: [PATCH] Add option for marking bookmarks as unread by default (#706) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added new option to set Mark as unread with a default * Added additional test * tweak test a bit --------- Co-authored-by: Sascha Ißbrücker --- .../0033_userprofile_default_mark_unread.py | 18 +++++++++++++++ bookmarks/models.py | 2 ++ bookmarks/templates/settings/general.html | 11 ++++++++++ bookmarks/tests/test_bookmark_new_view.py | 22 +++++++++++++++++++ bookmarks/tests/test_settings_general_view.py | 4 ++++ bookmarks/views/bookmarks.py | 3 +++ 6 files changed, 60 insertions(+) create mode 100644 bookmarks/migrations/0033_userprofile_default_mark_unread.py diff --git a/bookmarks/migrations/0033_userprofile_default_mark_unread.py b/bookmarks/migrations/0033_userprofile_default_mark_unread.py new file mode 100644 index 0000000..e5bcfe5 --- /dev/null +++ b/bookmarks/migrations/0033_userprofile_default_mark_unread.py @@ -0,0 +1,18 @@ +# Generated by Django 5.0.3 on 2024-04-17 19:27 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookmarks", "0032_html_snapshots_hint_toast"), + ] + + operations = [ + migrations.AddField( + model_name="userprofile", + name="default_mark_unread", + field=models.BooleanField(default=False), + ), + ] diff --git a/bookmarks/models.py b/bookmarks/models.py index c27ae58..9087829 100644 --- a/bookmarks/models.py +++ b/bookmarks/models.py @@ -399,6 +399,7 @@ class UserProfile(models.Model): custom_css = models.TextField(blank=True, null=False) search_preferences = models.JSONField(default=dict, null=False) enable_automatic_html_snapshots = models.BooleanField(default=True, null=False) + default_mark_unread = models.BooleanField(default=False, null=False) class UserProfileForm(forms.ModelForm): @@ -422,6 +423,7 @@ class UserProfileForm(forms.ModelForm): "display_archive_bookmark_action", "display_remove_bookmark_action", "permanent_notes", + "default_mark_unread", "custom_css", ] diff --git a/bookmarks/templates/settings/general.html b/bookmarks/templates/settings/general.html index acec66d..436f404 100644 --- a/bookmarks/templates/settings/general.html +++ b/bookmarks/templates/settings/general.html @@ -175,6 +175,17 @@ {% endif %} +
+ +
+ Sets the default state for the "Mark as unread" option when creating a new bookmark. + Setting this option will make all new bookmarks default to unread. + This can be overridden when creating each new bookmark. +
+
Custom CSS diff --git a/bookmarks/tests/test_bookmark_new_view.py b/bookmarks/tests/test_bookmark_new_view.py index a8ebd44..cef1812 100644 --- a/bookmarks/tests/test_bookmark_new_view.py +++ b/bookmarks/tests/test_bookmark_new_view.py @@ -210,3 +210,25 @@ class BookmarkNewViewTestCase(TestCase, BookmarkFactoryMixin): response = self.client.get(reverse("bookmarks:edit", args=[bookmark.id])) self.assertContains(response, '
', count=1) + + def test_should_not_check_unread_by_default(self): + response = self.client.get(reverse("bookmarks:new")) + html = response.content.decode() + + self.assertInHTML( + '', + 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( + '', + html, + ) diff --git a/bookmarks/tests/test_settings_general_view.py b/bookmarks/tests/test_settings_general_view.py index 3f6c4c7..2598ae7 100644 --- a/bookmarks/tests/test_settings_general_view.py +++ b/bookmarks/tests/test_settings_general_view.py @@ -96,6 +96,7 @@ class SettingsGeneralViewTestCase(TestCase, BookmarkFactoryMixin): "display_archive_bookmark_action": False, "display_remove_bookmark_action": False, "permanent_notes": True, + "default_mark_unread": True, "custom_css": "body { background-color: #000; }", } response = self.client.post(reverse("bookmarks:settings.general"), form_data) @@ -155,6 +156,9 @@ class SettingsGeneralViewTestCase(TestCase, BookmarkFactoryMixin): self.assertEqual( self.user.profile.permanent_notes, form_data["permanent_notes"] ) + self.assertEqual( + self.user.profile.default_mark_unread, form_data["default_mark_unread"] + ) self.assertEqual(self.user.profile.custom_css, form_data["custom_css"]) self.assertSuccessMessage(html, "Profile updated") diff --git a/bookmarks/views/bookmarks.py b/bookmarks/views/bookmarks.py index 4cc4ee5..513f7bc 100644 --- a/bookmarks/views/bookmarks.py +++ b/bookmarks/views/bookmarks.py @@ -188,6 +188,7 @@ def new(request): initial_title = request.GET.get("title") initial_description = request.GET.get("description") initial_auto_close = "auto_close" in request.GET + initial_mark_unread = request.user.profile.default_mark_unread if request.method == "POST": form = BookmarkForm(request.POST) @@ -210,6 +211,8 @@ def new(request): form.initial["description"] = initial_description if initial_auto_close: form.initial["auto_close"] = "true" + if initial_mark_unread: + form.initial["unread"] = "true" context = { "form": form,