Add filter for unread state (#535)

This commit is contained in:
Sascha Ißbrücker
2023-09-16 10:39:27 +02:00
committed by GitHub
parent 28acf3299c
commit 3e36f90b38
13 changed files with 149 additions and 31 deletions

View File

@@ -77,6 +77,7 @@ class BookmarkFactoryMixin:
suffix: str = '',
tag_prefix: str = '',
archived: bool = False,
unread: bool = False,
shared: bool = False,
with_tags: bool = False,
user: User = None):
@@ -106,7 +107,12 @@ class BookmarkFactoryMixin:
if with_tags:
tag_name = f'{tag_prefix} {i}{suffix}'
tags = [self.setup_tag(name=tag_name)]
bookmark = self.setup_bookmark(url=url, title=title, is_archived=archived, shared=shared, tags=tags,
bookmark = self.setup_bookmark(url=url,
title=title,
is_archived=archived,
unread=unread,
shared=shared,
tags=tags,
user=user)
bookmarks.append(bookmark)

View File

@@ -13,17 +13,20 @@ class BookmarkSearchFormTest(TestCase, BookmarkFactoryMixin):
self.assertEqual(form['sort'].initial, BookmarkSearch.SORT_ADDED_DESC)
self.assertEqual(form['user'].initial, '')
self.assertEqual(form['shared'].initial, '')
self.assertEqual(form['unread'].initial, '')
# with params
search = BookmarkSearch(q='search query',
sort=BookmarkSearch.SORT_ADDED_ASC,
user='user123',
shared=BookmarkSearch.FILTER_SHARED_SHARED)
shared=BookmarkSearch.FILTER_SHARED_SHARED,
unread=BookmarkSearch.FILTER_UNREAD_YES)
form = BookmarkSearchForm(search)
self.assertEqual(form['q'].initial, 'search query')
self.assertEqual(form['sort'].initial, BookmarkSearch.SORT_ADDED_ASC)
self.assertEqual(form['user'].initial, 'user123')
self.assertEqual(form['shared'].initial, BookmarkSearch.FILTER_SHARED_SHARED)
self.assertEqual(form['unread'].initial, BookmarkSearch.FILTER_UNREAD_YES)
def test_user_options(self):
users = [
@@ -57,9 +60,11 @@ class BookmarkSearchFormTest(TestCase, BookmarkFactoryMixin):
search = BookmarkSearch(q='search query',
sort=BookmarkSearch.SORT_ADDED_ASC,
user='user123',
shared=BookmarkSearch.FILTER_SHARED_SHARED)
shared=BookmarkSearch.FILTER_SHARED_SHARED,
unread=BookmarkSearch.FILTER_UNREAD_YES)
form = BookmarkSearchForm(search)
self.assertCountEqual(form.hidden_fields(), [form['q'], form['sort'], form['user'], form['shared']])
self.assertCountEqual(form.hidden_fields(),
[form['q'], form['sort'], form['user'], form['shared'], form['unread']])
# some modified params are editable fields
search = BookmarkSearch(q='search query',

View File

@@ -14,6 +14,7 @@ class BookmarkSearchModelTest(TestCase):
self.assertEqual(search.sort, BookmarkSearch.SORT_ADDED_DESC)
self.assertEqual(search.user, '')
self.assertEqual(search.shared, '')
self.assertEqual(search.unread, '')
# some params
mock_request.GET = {
@@ -26,6 +27,7 @@ class BookmarkSearchModelTest(TestCase):
self.assertEqual(bookmark_search.sort, BookmarkSearch.SORT_ADDED_DESC)
self.assertEqual(bookmark_search.user, 'user123')
self.assertEqual(bookmark_search.shared, '')
self.assertEqual(bookmark_search.unread, '')
# all params
mock_request.GET = {
@@ -33,6 +35,7 @@ class BookmarkSearchModelTest(TestCase):
'user': 'user123',
'sort': BookmarkSearch.SORT_TITLE_ASC,
'shared': BookmarkSearch.FILTER_SHARED_SHARED,
'unread': BookmarkSearch.FILTER_UNREAD_YES,
}
search = BookmarkSearch.from_request(mock_request)
@@ -40,6 +43,7 @@ class BookmarkSearchModelTest(TestCase):
self.assertEqual(search.user, 'user123')
self.assertEqual(search.sort, BookmarkSearch.SORT_TITLE_ASC)
self.assertEqual(search.shared, BookmarkSearch.FILTER_SHARED_SHARED)
self.assertEqual(search.unread, BookmarkSearch.FILTER_UNREAD_YES)
def test_modified_params(self):
# no params
@@ -58,6 +62,10 @@ class BookmarkSearchModelTest(TestCase):
self.assertCountEqual(modified_params, ['q', 'sort'])
# all modified params
bookmark_search = BookmarkSearch(q='search query', sort=BookmarkSearch.SORT_ADDED_ASC, user='user123', shared=BookmarkSearch.FILTER_SHARED_SHARED)
bookmark_search = BookmarkSearch(q='search query',
sort=BookmarkSearch.SORT_ADDED_ASC,
user='user123',
shared=BookmarkSearch.FILTER_SHARED_SHARED,
unread=BookmarkSearch.FILTER_UNREAD_YES)
modified_params = bookmark_search.modified_params
self.assertCountEqual(modified_params, ['q', 'sort', 'user', 'shared'])
self.assertCountEqual(modified_params, ['q', 'sort', 'user', 'shared', 'unread'])

View File

@@ -45,12 +45,14 @@ class BookmarkSearchTagTest(TestCase, BookmarkFactoryMixin):
self.assertNoHiddenInput(rendered_template, 'q')
self.assertNoHiddenInput(rendered_template, 'sort')
self.assertNoHiddenInput(rendered_template, 'shared')
self.assertNoHiddenInput(rendered_template, 'unread')
# With params
url = '/test?q=foo&user=john&sort=title_asc&shared=shared'
url = '/test?q=foo&user=john&sort=title_asc&shared=shared&unread=yes'
rendered_template = self.render_template(url)
self.assertHiddenInput(rendered_template, 'user', 'john')
self.assertNoHiddenInput(rendered_template, 'q')
self.assertNoHiddenInput(rendered_template, 'sort')
self.assertNoHiddenInput(rendered_template, 'shared')
self.assertNoHiddenInput(rendered_template, 'unread')

View File

@@ -70,6 +70,25 @@ class BookmarksApiTestCase(LinkdingApiTestCase, BookmarkFactoryMixin):
expected_status_code=status.HTTP_200_OK)
self.assertBookmarkListEqual(response.data['results'], bookmarks)
def test_list_bookmarks_filter_unread(self):
self.authenticate()
unread_bookmarks = self.setup_numbered_bookmarks(5, unread=True)
read_bookmarks = self.setup_numbered_bookmarks(5, unread=False)
# Filter off
response = self.get(reverse('bookmarks:bookmark-list'), expected_status_code=status.HTTP_200_OK)
self.assertBookmarkListEqual(response.data['results'], unread_bookmarks + read_bookmarks)
# Filter shared
response = self.get(reverse('bookmarks:bookmark-list') + '?unread=yes',
expected_status_code=status.HTTP_200_OK)
self.assertBookmarkListEqual(response.data['results'], unread_bookmarks)
# Filter unshared
response = self.get(reverse('bookmarks:bookmark-list') + '?unread=no',
expected_status_code=status.HTTP_200_OK)
self.assertBookmarkListEqual(response.data['results'], read_bookmarks)
def test_list_bookmarks_filter_shared(self):
self.authenticate()
unshared_bookmarks = self.setup_numbered_bookmarks(5)

View File

@@ -394,31 +394,51 @@ class QueriesTestCase(TestCase, BookmarkFactoryMixin):
self.assertCountEqual(list(query), [])
def test_query_bookmarks_unread_should_return_unread_bookmarks_only(self):
unread_bookmarks = [
self.setup_bookmark(unread=True),
self.setup_bookmark(unread=True),
self.setup_bookmark(unread=True),
]
self.setup_bookmark()
self.setup_bookmark()
self.setup_bookmark()
unread_bookmarks = self.setup_numbered_bookmarks(5, unread=True)
read_bookmarks = self.setup_numbered_bookmarks(5, unread=False)
# Legacy query filter
query = queries.query_bookmarks(self.user, self.profile, BookmarkSearch(query='!unread'))
self.assertCountEqual(list(query), unread_bookmarks)
def test_query_archived_bookmarks_unread_should_return_unread_bookmarks_only(self):
unread_bookmarks = [
self.setup_bookmark(is_archived=True, unread=True),
self.setup_bookmark(is_archived=True, unread=True),
self.setup_bookmark(is_archived=True, unread=True),
]
self.setup_bookmark(is_archived=True)
self.setup_bookmark(is_archived=True)
self.setup_bookmark(is_archived=True)
# Bookmark search filter - off
query = queries.query_bookmarks(self.user, self.profile,
BookmarkSearch(unread=BookmarkSearch.FILTER_UNREAD_OFF))
self.assertCountEqual(list(query), read_bookmarks + unread_bookmarks)
# Bookmark search filter - yes
query = queries.query_bookmarks(self.user, self.profile,
BookmarkSearch(unread=BookmarkSearch.FILTER_UNREAD_YES))
self.assertCountEqual(list(query), unread_bookmarks)
# Bookmark search filter - no
query = queries.query_bookmarks(self.user, self.profile,
BookmarkSearch(unread=BookmarkSearch.FILTER_UNREAD_NO))
self.assertCountEqual(list(query), read_bookmarks)
def test_query_archived_bookmarks_unread_should_return_unread_bookmarks_only(self):
unread_bookmarks = self.setup_numbered_bookmarks(5, unread=True, archived=True)
read_bookmarks = self.setup_numbered_bookmarks(5, unread=False, archived=True)
# Legacy query filter
query = queries.query_archived_bookmarks(self.user, self.profile, BookmarkSearch(query='!unread'))
self.assertCountEqual(list(query), unread_bookmarks)
# Bookmark search filter - off
query = queries.query_archived_bookmarks(self.user, self.profile,
BookmarkSearch(unread=BookmarkSearch.FILTER_UNREAD_OFF))
self.assertCountEqual(list(query), read_bookmarks + unread_bookmarks)
# Bookmark search filter - yes
query = queries.query_archived_bookmarks(self.user, self.profile,
BookmarkSearch(unread=BookmarkSearch.FILTER_UNREAD_YES))
self.assertCountEqual(list(query), unread_bookmarks)
# Bookmark search filter - no
query = queries.query_archived_bookmarks(self.user, self.profile,
BookmarkSearch(unread=BookmarkSearch.FILTER_UNREAD_NO))
self.assertCountEqual(list(query), read_bookmarks)
def test_query_bookmarks_filter_shared(self):
unshared_bookmarks = self.setup_numbered_bookmarks(5)
shared_bookmarks = self.setup_numbered_bookmarks(5, shared=True)
@@ -681,6 +701,31 @@ class QueriesTestCase(TestCase, BookmarkFactoryMixin):
BookmarkSearch(query=f'!untagged #{tag.name}'))
self.assertCountEqual(list(query), [])
def test_query_bookmark_tags_filter_unread(self):
unread_bookmarks = self.setup_numbered_bookmarks(5, unread=True, with_tags=True)
read_bookmarks = self.setup_numbered_bookmarks(5, unread=False, with_tags=True)
unread_tags = self.get_tags_from_bookmarks(unread_bookmarks)
read_tags = self.get_tags_from_bookmarks(read_bookmarks)
# Legacy query filter
query = queries.query_bookmark_tags(self.user, self.profile, BookmarkSearch(query='!unread'))
self.assertCountEqual(list(query), unread_tags)
# Bookmark search filter - off
query = queries.query_bookmark_tags(self.user, self.profile,
BookmarkSearch(unread=BookmarkSearch.FILTER_UNREAD_OFF))
self.assertCountEqual(list(query), read_tags + unread_tags)
# Bookmark search filter - yes
query = queries.query_bookmark_tags(self.user, self.profile,
BookmarkSearch(unread=BookmarkSearch.FILTER_UNREAD_YES))
self.assertCountEqual(list(query), unread_tags)
# Bookmark search filter - no
query = queries.query_bookmark_tags(self.user, self.profile,
BookmarkSearch(unread=BookmarkSearch.FILTER_UNREAD_NO))
self.assertCountEqual(list(query), read_tags)
def test_query_bookmark_tags_filter_shared(self):
unshared_bookmarks = self.setup_numbered_bookmarks(5, with_tags=True)
shared_bookmarks = self.setup_numbered_bookmarks(5, with_tags=True, shared=True)

View File

@@ -79,12 +79,14 @@ class UserSelectTagTest(TestCase, BookmarkFactoryMixin):
self.assertNoHiddenInput(rendered_template, 'q')
self.assertNoHiddenInput(rendered_template, 'sort')
self.assertNoHiddenInput(rendered_template, 'shared')
self.assertNoHiddenInput(rendered_template, 'unread')
# With params
url = '/test?q=foo&user=john&sort=title_asc&shared=shared'
url = '/test?q=foo&user=john&sort=title_asc&shared=shared&unread=yes'
rendered_template = self.render_template(url)
self.assertNoHiddenInput(rendered_template, 'user')
self.assertHiddenInput(rendered_template, 'q', 'foo')
self.assertHiddenInput(rendered_template, 'sort', 'title_asc')
self.assertHiddenInput(rendered_template, 'shared', 'shared')
self.assertHiddenInput(rendered_template, 'unread', 'yes')