mirror of
https://github.com/sissbruecker/linkding
synced 2024-11-23 03:43:10 +00:00
ea240eefd9
* Make shared view public, add user profile fallback * Allow unauthenticated access to shared bookmarks API * Link shared bookmarks in unauthenticated layout * Add public sharing setting * Only show shared bookmarks link if there are publicly shared bookmarks * Disable public sharing if sharing is disabled * Show specific helper text when public sharing is enabled * Fix tests * Add more tests * Improve setting description
777 lines
34 KiB
Python
777 lines
34 KiB
Python
import operator
|
|
|
|
from django.contrib.auth import get_user_model
|
|
from django.db.models import QuerySet
|
|
from django.test import TestCase
|
|
|
|
from bookmarks import queries
|
|
from bookmarks.models import Bookmark, UserProfile
|
|
from bookmarks.tests.helpers import BookmarkFactoryMixin, random_sentence
|
|
from bookmarks.utils import unique
|
|
|
|
User = get_user_model()
|
|
|
|
|
|
class QueriesTestCase(TestCase, BookmarkFactoryMixin):
|
|
def setUp(self):
|
|
self.profile = self.get_or_create_test_user().profile
|
|
|
|
def setup_bookmark_search_data(self) -> None:
|
|
tag1 = self.setup_tag(name='tag1')
|
|
tag2 = self.setup_tag(name='tag2')
|
|
self.setup_tag(name='unused_tag1')
|
|
|
|
self.other_bookmarks = [
|
|
self.setup_bookmark(),
|
|
self.setup_bookmark(),
|
|
self.setup_bookmark(),
|
|
]
|
|
self.term1_bookmarks = [
|
|
self.setup_bookmark(url='http://example.com/term1'),
|
|
self.setup_bookmark(title=random_sentence(including_word='term1')),
|
|
self.setup_bookmark(title=random_sentence(including_word='TERM1')),
|
|
self.setup_bookmark(description=random_sentence(including_word='term1')),
|
|
self.setup_bookmark(description=random_sentence(including_word='TERM1')),
|
|
self.setup_bookmark(notes=random_sentence(including_word='term1')),
|
|
self.setup_bookmark(notes=random_sentence(including_word='TERM1')),
|
|
self.setup_bookmark(website_title=random_sentence(including_word='term1')),
|
|
self.setup_bookmark(website_title=random_sentence(including_word='TERM1')),
|
|
self.setup_bookmark(website_description=random_sentence(including_word='term1')),
|
|
self.setup_bookmark(website_description=random_sentence(including_word='TERM1')),
|
|
]
|
|
self.term1_term2_bookmarks = [
|
|
self.setup_bookmark(url='http://example.com/term1/term2'),
|
|
self.setup_bookmark(title=random_sentence(including_word='term1'),
|
|
description=random_sentence(including_word='term2')),
|
|
self.setup_bookmark(description=random_sentence(including_word='term1'),
|
|
title=random_sentence(including_word='term2')),
|
|
self.setup_bookmark(website_title=random_sentence(including_word='term1'),
|
|
title=random_sentence(including_word='term2')),
|
|
self.setup_bookmark(website_description=random_sentence(including_word='term1'),
|
|
title=random_sentence(including_word='term2')),
|
|
]
|
|
self.tag1_bookmarks = [
|
|
self.setup_bookmark(tags=[tag1]),
|
|
self.setup_bookmark(title=random_sentence(), tags=[tag1]),
|
|
self.setup_bookmark(description=random_sentence(), tags=[tag1]),
|
|
self.setup_bookmark(website_title=random_sentence(), tags=[tag1]),
|
|
self.setup_bookmark(website_description=random_sentence(), tags=[tag1]),
|
|
]
|
|
self.tag1_as_term_bookmarks = [
|
|
self.setup_bookmark(url='http://example.com/tag1'),
|
|
self.setup_bookmark(title=random_sentence(including_word='tag1')),
|
|
self.setup_bookmark(description=random_sentence(including_word='tag1')),
|
|
self.setup_bookmark(website_title=random_sentence(including_word='tag1')),
|
|
self.setup_bookmark(website_description=random_sentence(including_word='tag1')),
|
|
]
|
|
self.term1_tag1_bookmarks = [
|
|
self.setup_bookmark(url='http://example.com/term1', tags=[tag1]),
|
|
self.setup_bookmark(title=random_sentence(including_word='term1'), tags=[tag1]),
|
|
self.setup_bookmark(description=random_sentence(including_word='term1'), tags=[tag1]),
|
|
self.setup_bookmark(website_title=random_sentence(including_word='term1'), tags=[tag1]),
|
|
self.setup_bookmark(website_description=random_sentence(including_word='term1'), tags=[tag1]),
|
|
]
|
|
self.tag2_bookmarks = [
|
|
self.setup_bookmark(tags=[tag2]),
|
|
]
|
|
self.tag1_tag2_bookmarks = [
|
|
self.setup_bookmark(tags=[tag1, tag2]),
|
|
]
|
|
|
|
def setup_tag_search_data(self):
|
|
tag1 = self.setup_tag(name='tag1')
|
|
tag2 = self.setup_tag(name='tag2')
|
|
self.setup_tag(name='unused_tag1')
|
|
|
|
self.other_bookmarks = [
|
|
self.setup_bookmark(tags=[self.setup_tag()]),
|
|
self.setup_bookmark(tags=[self.setup_tag()]),
|
|
self.setup_bookmark(tags=[self.setup_tag()]),
|
|
]
|
|
self.term1_bookmarks = [
|
|
self.setup_bookmark(url='http://example.com/term1', tags=[self.setup_tag()]),
|
|
self.setup_bookmark(title=random_sentence(including_word='term1'), tags=[self.setup_tag()]),
|
|
self.setup_bookmark(title=random_sentence(including_word='TERM1'), tags=[self.setup_tag()]),
|
|
self.setup_bookmark(description=random_sentence(including_word='term1'), tags=[self.setup_tag()]),
|
|
self.setup_bookmark(description=random_sentence(including_word='TERM1'), tags=[self.setup_tag()]),
|
|
self.setup_bookmark(notes=random_sentence(including_word='term1'), tags=[self.setup_tag()]),
|
|
self.setup_bookmark(notes=random_sentence(including_word='TERM1'), tags=[self.setup_tag()]),
|
|
self.setup_bookmark(website_title=random_sentence(including_word='term1'), tags=[self.setup_tag()]),
|
|
self.setup_bookmark(website_title=random_sentence(including_word='TERM1'), tags=[self.setup_tag()]),
|
|
self.setup_bookmark(website_description=random_sentence(including_word='term1'), tags=[self.setup_tag()]),
|
|
self.setup_bookmark(website_description=random_sentence(including_word='TERM1'), tags=[self.setup_tag()]),
|
|
]
|
|
self.term1_term2_bookmarks = [
|
|
self.setup_bookmark(url='http://example.com/term1/term2', tags=[self.setup_tag()]),
|
|
self.setup_bookmark(title=random_sentence(including_word='term1'),
|
|
description=random_sentence(including_word='term2'),
|
|
tags=[self.setup_tag()]),
|
|
self.setup_bookmark(description=random_sentence(including_word='term1'),
|
|
title=random_sentence(including_word='term2'),
|
|
tags=[self.setup_tag()]),
|
|
self.setup_bookmark(website_title=random_sentence(including_word='term1'),
|
|
title=random_sentence(including_word='term2'),
|
|
tags=[self.setup_tag()]),
|
|
self.setup_bookmark(website_description=random_sentence(including_word='term1'),
|
|
title=random_sentence(including_word='term2'),
|
|
tags=[self.setup_tag()]),
|
|
]
|
|
self.tag1_bookmarks = [
|
|
self.setup_bookmark(tags=[tag1, self.setup_tag()]),
|
|
self.setup_bookmark(title=random_sentence(), tags=[tag1, self.setup_tag()]),
|
|
self.setup_bookmark(description=random_sentence(), tags=[tag1, self.setup_tag()]),
|
|
self.setup_bookmark(website_title=random_sentence(), tags=[tag1, self.setup_tag()]),
|
|
self.setup_bookmark(website_description=random_sentence(), tags=[tag1, self.setup_tag()]),
|
|
]
|
|
self.tag1_as_term_bookmarks = [
|
|
self.setup_bookmark(url='http://example.com/tag1'),
|
|
self.setup_bookmark(title=random_sentence(including_word='tag1')),
|
|
self.setup_bookmark(description=random_sentence(including_word='tag1')),
|
|
self.setup_bookmark(website_title=random_sentence(including_word='tag1')),
|
|
self.setup_bookmark(website_description=random_sentence(including_word='tag1')),
|
|
]
|
|
self.term1_tag1_bookmarks = [
|
|
self.setup_bookmark(url='http://example.com/term1', tags=[tag1, self.setup_tag()]),
|
|
self.setup_bookmark(title=random_sentence(including_word='term1'), tags=[tag1, self.setup_tag()]),
|
|
self.setup_bookmark(description=random_sentence(including_word='term1'), tags=[tag1, self.setup_tag()]),
|
|
self.setup_bookmark(website_title=random_sentence(including_word='term1'), tags=[tag1, self.setup_tag()]),
|
|
self.setup_bookmark(website_description=random_sentence(including_word='term1'),
|
|
tags=[tag1, self.setup_tag()]),
|
|
]
|
|
self.tag2_bookmarks = [
|
|
self.setup_bookmark(tags=[tag2, self.setup_tag()]),
|
|
]
|
|
self.tag1_tag2_bookmarks = [
|
|
self.setup_bookmark(tags=[tag1, tag2, self.setup_tag()]),
|
|
]
|
|
|
|
def get_tags_from_bookmarks(self, bookmarks: [Bookmark]):
|
|
all_tags = []
|
|
for bookmark in bookmarks:
|
|
all_tags = all_tags + list(bookmark.tags.all())
|
|
return all_tags
|
|
|
|
def assertQueryResult(self, query: QuerySet, item_lists: [[any]]):
|
|
expected_items = []
|
|
for item_list in item_lists:
|
|
expected_items = expected_items + item_list
|
|
|
|
expected_items = unique(expected_items, operator.attrgetter('id'))
|
|
|
|
self.assertCountEqual(list(query), expected_items)
|
|
|
|
def test_query_bookmarks_should_return_all_for_empty_query(self):
|
|
self.setup_bookmark_search_data()
|
|
|
|
query = queries.query_bookmarks(self.user, self.profile, '')
|
|
self.assertQueryResult(query, [
|
|
self.other_bookmarks,
|
|
self.term1_bookmarks,
|
|
self.term1_term2_bookmarks,
|
|
self.tag1_bookmarks,
|
|
self.tag1_as_term_bookmarks,
|
|
self.term1_tag1_bookmarks,
|
|
self.tag2_bookmarks,
|
|
self.tag1_tag2_bookmarks
|
|
])
|
|
|
|
def test_query_bookmarks_should_search_single_term(self):
|
|
self.setup_bookmark_search_data()
|
|
|
|
query = queries.query_bookmarks(self.user, self.profile, 'term1')
|
|
self.assertQueryResult(query, [
|
|
self.term1_bookmarks,
|
|
self.term1_term2_bookmarks,
|
|
self.term1_tag1_bookmarks
|
|
])
|
|
|
|
def test_query_bookmarks_should_search_multiple_terms(self):
|
|
self.setup_bookmark_search_data()
|
|
|
|
query = queries.query_bookmarks(self.user, self.profile, 'term2 term1')
|
|
|
|
self.assertQueryResult(query, [self.term1_term2_bookmarks])
|
|
|
|
def test_query_bookmarks_should_search_single_tag(self):
|
|
self.setup_bookmark_search_data()
|
|
|
|
query = queries.query_bookmarks(self.user, self.profile, '#tag1')
|
|
|
|
self.assertQueryResult(query, [self.tag1_bookmarks, self.tag1_tag2_bookmarks, self.term1_tag1_bookmarks])
|
|
|
|
def test_query_bookmarks_should_search_multiple_tags(self):
|
|
self.setup_bookmark_search_data()
|
|
|
|
query = queries.query_bookmarks(self.user, self.profile, '#tag1 #tag2')
|
|
|
|
self.assertQueryResult(query, [self.tag1_tag2_bookmarks])
|
|
|
|
def test_query_bookmarks_should_search_multiple_tags_ignoring_casing(self):
|
|
self.setup_bookmark_search_data()
|
|
|
|
query = queries.query_bookmarks(self.user, self.profile, '#Tag1 #TAG2')
|
|
|
|
self.assertQueryResult(query, [self.tag1_tag2_bookmarks])
|
|
|
|
def test_query_bookmarks_should_search_terms_and_tags_combined(self):
|
|
self.setup_bookmark_search_data()
|
|
|
|
query = queries.query_bookmarks(self.user, self.profile, 'term1 #tag1')
|
|
|
|
self.assertQueryResult(query, [self.term1_tag1_bookmarks])
|
|
|
|
def test_query_bookmarks_in_strict_mode_should_not_search_tags_as_terms(self):
|
|
self.setup_bookmark_search_data()
|
|
|
|
self.profile.tag_search = UserProfile.TAG_SEARCH_STRICT
|
|
self.profile.save()
|
|
|
|
query = queries.query_bookmarks(self.user, self.profile, 'tag1')
|
|
self.assertQueryResult(query, [self.tag1_as_term_bookmarks])
|
|
|
|
def test_query_bookmarks_in_lax_mode_should_search_tags_as_terms(self):
|
|
self.setup_bookmark_search_data()
|
|
|
|
self.profile.tag_search = UserProfile.TAG_SEARCH_LAX
|
|
self.profile.save()
|
|
|
|
query = queries.query_bookmarks(self.user, self.profile, 'tag1')
|
|
self.assertQueryResult(query, [
|
|
self.tag1_bookmarks,
|
|
self.tag1_as_term_bookmarks,
|
|
self.tag1_tag2_bookmarks,
|
|
self.term1_tag1_bookmarks
|
|
])
|
|
|
|
query = queries.query_bookmarks(self.user, self.profile, 'tag1 term1')
|
|
self.assertQueryResult(query, [
|
|
self.term1_tag1_bookmarks,
|
|
])
|
|
|
|
query = queries.query_bookmarks(self.user, self.profile, 'tag1 tag2')
|
|
self.assertQueryResult(query, [
|
|
self.tag1_tag2_bookmarks,
|
|
])
|
|
|
|
query = queries.query_bookmarks(self.user, self.profile, 'tag1 #tag2')
|
|
self.assertQueryResult(query, [
|
|
self.tag1_tag2_bookmarks,
|
|
])
|
|
|
|
def test_query_bookmarks_should_return_no_matches(self):
|
|
self.setup_bookmark_search_data()
|
|
|
|
query = queries.query_bookmarks(self.user, self.profile, 'term3')
|
|
self.assertQueryResult(query, [])
|
|
|
|
query = queries.query_bookmarks(self.user, self.profile, 'term1 term3')
|
|
self.assertQueryResult(query, [])
|
|
|
|
query = queries.query_bookmarks(self.user, self.profile, 'term1 #tag2')
|
|
self.assertQueryResult(query, [])
|
|
|
|
query = queries.query_bookmarks(self.user, self.profile, '#tag3')
|
|
self.assertQueryResult(query, [])
|
|
|
|
# Unused tag
|
|
query = queries.query_bookmarks(self.user, self.profile, '#unused_tag1')
|
|
self.assertQueryResult(query, [])
|
|
|
|
# Unused tag combined with tag that is used
|
|
query = queries.query_bookmarks(self.user, self.profile, '#tag1 #unused_tag1')
|
|
self.assertQueryResult(query, [])
|
|
|
|
# Unused tag combined with term that is used
|
|
query = queries.query_bookmarks(self.user, self.profile, 'term1 #unused_tag1')
|
|
self.assertQueryResult(query, [])
|
|
|
|
def test_query_bookmarks_should_not_return_archived_bookmarks(self):
|
|
bookmark1 = self.setup_bookmark()
|
|
bookmark2 = self.setup_bookmark()
|
|
self.setup_bookmark(is_archived=True)
|
|
self.setup_bookmark(is_archived=True)
|
|
self.setup_bookmark(is_archived=True)
|
|
|
|
query = queries.query_bookmarks(self.user, self.profile, '')
|
|
|
|
self.assertQueryResult(query, [[bookmark1, bookmark2]])
|
|
|
|
def test_query_archived_bookmarks_should_not_return_unarchived_bookmarks(self):
|
|
bookmark1 = self.setup_bookmark(is_archived=True)
|
|
bookmark2 = self.setup_bookmark(is_archived=True)
|
|
self.setup_bookmark()
|
|
self.setup_bookmark()
|
|
self.setup_bookmark()
|
|
|
|
query = queries.query_archived_bookmarks(self.user, self.profile, '')
|
|
|
|
self.assertQueryResult(query, [[bookmark1, bookmark2]])
|
|
|
|
def test_query_bookmarks_should_only_return_user_owned_bookmarks(self):
|
|
other_user = User.objects.create_user('otheruser', 'otheruser@example.com', 'password123')
|
|
owned_bookmarks = [
|
|
self.setup_bookmark(),
|
|
self.setup_bookmark(),
|
|
self.setup_bookmark(),
|
|
]
|
|
self.setup_bookmark(user=other_user)
|
|
self.setup_bookmark(user=other_user)
|
|
self.setup_bookmark(user=other_user)
|
|
|
|
query = queries.query_bookmarks(self.user, self.profile, '')
|
|
|
|
self.assertQueryResult(query, [owned_bookmarks])
|
|
|
|
def test_query_archived_bookmarks_should_only_return_user_owned_bookmarks(self):
|
|
other_user = User.objects.create_user('otheruser', 'otheruser@example.com', 'password123')
|
|
owned_bookmarks = [
|
|
self.setup_bookmark(is_archived=True),
|
|
self.setup_bookmark(is_archived=True),
|
|
self.setup_bookmark(is_archived=True),
|
|
]
|
|
self.setup_bookmark(is_archived=True, user=other_user)
|
|
self.setup_bookmark(is_archived=True, user=other_user)
|
|
self.setup_bookmark(is_archived=True, user=other_user)
|
|
|
|
query = queries.query_archived_bookmarks(self.user, self.profile, '')
|
|
|
|
self.assertQueryResult(query, [owned_bookmarks])
|
|
|
|
def test_query_bookmarks_untagged_should_return_untagged_bookmarks_only(self):
|
|
tag = self.setup_tag()
|
|
untagged_bookmark = self.setup_bookmark()
|
|
self.setup_bookmark(tags=[tag])
|
|
self.setup_bookmark(tags=[tag])
|
|
|
|
query = queries.query_bookmarks(self.user, self.profile, '!untagged')
|
|
self.assertCountEqual(list(query), [untagged_bookmark])
|
|
|
|
def test_query_bookmarks_untagged_should_be_combinable_with_search_terms(self):
|
|
tag = self.setup_tag()
|
|
untagged_bookmark = self.setup_bookmark(title='term1')
|
|
self.setup_bookmark(title='term2')
|
|
self.setup_bookmark(tags=[tag])
|
|
|
|
query = queries.query_bookmarks(self.user, self.profile, '!untagged term1')
|
|
self.assertCountEqual(list(query), [untagged_bookmark])
|
|
|
|
def test_query_bookmarks_untagged_should_not_be_combinable_with_tags(self):
|
|
tag = self.setup_tag()
|
|
self.setup_bookmark()
|
|
self.setup_bookmark(tags=[tag])
|
|
self.setup_bookmark(tags=[tag])
|
|
|
|
query = queries.query_bookmarks(self.user, self.profile, f'!untagged #{tag.name}')
|
|
self.assertCountEqual(list(query), [])
|
|
|
|
def test_query_archived_bookmarks_untagged_should_return_untagged_bookmarks_only(self):
|
|
tag = self.setup_tag()
|
|
untagged_bookmark = self.setup_bookmark(is_archived=True)
|
|
self.setup_bookmark(is_archived=True, tags=[tag])
|
|
self.setup_bookmark(is_archived=True, tags=[tag])
|
|
|
|
query = queries.query_archived_bookmarks(self.user, self.profile, '!untagged')
|
|
self.assertCountEqual(list(query), [untagged_bookmark])
|
|
|
|
def test_query_archived_bookmarks_untagged_should_be_combinable_with_search_terms(self):
|
|
tag = self.setup_tag()
|
|
untagged_bookmark = self.setup_bookmark(is_archived=True, title='term1')
|
|
self.setup_bookmark(is_archived=True, title='term2')
|
|
self.setup_bookmark(is_archived=True, tags=[tag])
|
|
|
|
query = queries.query_archived_bookmarks(self.user, self.profile, '!untagged term1')
|
|
self.assertCountEqual(list(query), [untagged_bookmark])
|
|
|
|
def test_query_archived_bookmarks_untagged_should_not_be_combinable_with_tags(self):
|
|
tag = self.setup_tag()
|
|
self.setup_bookmark(is_archived=True)
|
|
self.setup_bookmark(is_archived=True, tags=[tag])
|
|
self.setup_bookmark(is_archived=True, tags=[tag])
|
|
|
|
query = queries.query_archived_bookmarks(self.user, self.profile, f'!untagged #{tag.name}')
|
|
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()
|
|
|
|
query = queries.query_bookmarks(self.user, self.profile, '!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)
|
|
|
|
query = queries.query_archived_bookmarks(self.user, self.profile, '!unread')
|
|
self.assertCountEqual(list(query), unread_bookmarks)
|
|
|
|
def test_query_bookmark_tags_should_return_all_tags_for_empty_query(self):
|
|
self.setup_tag_search_data()
|
|
|
|
query = queries.query_bookmark_tags(self.user, self.profile, '')
|
|
|
|
self.assertQueryResult(query, [
|
|
self.get_tags_from_bookmarks(self.other_bookmarks),
|
|
self.get_tags_from_bookmarks(self.term1_bookmarks),
|
|
self.get_tags_from_bookmarks(self.term1_term2_bookmarks),
|
|
self.get_tags_from_bookmarks(self.tag1_bookmarks),
|
|
self.get_tags_from_bookmarks(self.term1_tag1_bookmarks),
|
|
self.get_tags_from_bookmarks(self.tag2_bookmarks),
|
|
self.get_tags_from_bookmarks(self.tag1_tag2_bookmarks),
|
|
])
|
|
|
|
def test_query_bookmark_tags_should_search_single_term(self):
|
|
self.setup_tag_search_data()
|
|
|
|
query = queries.query_bookmark_tags(self.user, self.profile, 'term1')
|
|
|
|
self.assertQueryResult(query, [
|
|
self.get_tags_from_bookmarks(self.term1_bookmarks),
|
|
self.get_tags_from_bookmarks(self.term1_term2_bookmarks),
|
|
self.get_tags_from_bookmarks(self.term1_tag1_bookmarks),
|
|
])
|
|
|
|
def test_query_bookmark_tags_should_search_multiple_terms(self):
|
|
self.setup_tag_search_data()
|
|
|
|
query = queries.query_bookmark_tags(self.user, self.profile, 'term2 term1')
|
|
|
|
self.assertQueryResult(query, [
|
|
self.get_tags_from_bookmarks(self.term1_term2_bookmarks),
|
|
])
|
|
|
|
def test_query_bookmark_tags_should_search_single_tag(self):
|
|
self.setup_tag_search_data()
|
|
|
|
query = queries.query_bookmark_tags(self.user, self.profile, '#tag1')
|
|
|
|
self.assertQueryResult(query, [
|
|
self.get_tags_from_bookmarks(self.tag1_bookmarks),
|
|
self.get_tags_from_bookmarks(self.term1_tag1_bookmarks),
|
|
self.get_tags_from_bookmarks(self.tag1_tag2_bookmarks),
|
|
])
|
|
|
|
def test_query_bookmark_tags_should_search_multiple_tags(self):
|
|
self.setup_tag_search_data()
|
|
|
|
query = queries.query_bookmark_tags(self.user, self.profile, '#tag1 #tag2')
|
|
|
|
self.assertQueryResult(query, [
|
|
self.get_tags_from_bookmarks(self.tag1_tag2_bookmarks),
|
|
])
|
|
|
|
def test_query_bookmark_tags_should_search_multiple_tags_ignoring_casing(self):
|
|
self.setup_tag_search_data()
|
|
|
|
query = queries.query_bookmark_tags(self.user, self.profile, '#Tag1 #TAG2')
|
|
|
|
self.assertQueryResult(query, [
|
|
self.get_tags_from_bookmarks(self.tag1_tag2_bookmarks),
|
|
])
|
|
|
|
def test_query_bookmark_tags_should_search_term_and_tag_combined(self):
|
|
self.setup_tag_search_data()
|
|
|
|
query = queries.query_bookmark_tags(self.user, self.profile, 'term1 #tag1')
|
|
|
|
self.assertQueryResult(query, [
|
|
self.get_tags_from_bookmarks(self.term1_tag1_bookmarks),
|
|
])
|
|
|
|
def test_query_bookmark_tags_in_strict_mode_should_not_search_tags_as_terms(self):
|
|
self.setup_tag_search_data()
|
|
|
|
self.profile.tag_search = UserProfile.TAG_SEARCH_STRICT
|
|
self.profile.save()
|
|
|
|
query = queries.query_bookmark_tags(self.user, self.profile, 'tag1')
|
|
self.assertQueryResult(query, self.get_tags_from_bookmarks(self.tag1_as_term_bookmarks))
|
|
|
|
def test_query_bookmark_tags_in_lax_mode_should_search_tags_as_terms(self):
|
|
self.setup_tag_search_data()
|
|
|
|
self.profile.tag_search = UserProfile.TAG_SEARCH_LAX
|
|
self.profile.save()
|
|
|
|
query = queries.query_bookmark_tags(self.user, self.profile, 'tag1')
|
|
self.assertQueryResult(query, [
|
|
self.get_tags_from_bookmarks(self.tag1_bookmarks),
|
|
self.get_tags_from_bookmarks(self.tag1_as_term_bookmarks),
|
|
self.get_tags_from_bookmarks(self.tag1_tag2_bookmarks),
|
|
self.get_tags_from_bookmarks(self.term1_tag1_bookmarks)
|
|
])
|
|
|
|
query = queries.query_bookmark_tags(self.user, self.profile, 'tag1 term1')
|
|
self.assertQueryResult(query, [
|
|
self.get_tags_from_bookmarks(self.term1_tag1_bookmarks),
|
|
])
|
|
|
|
query = queries.query_bookmark_tags(self.user, self.profile, 'tag1 tag2')
|
|
self.assertQueryResult(query, [
|
|
self.get_tags_from_bookmarks(self.tag1_tag2_bookmarks),
|
|
])
|
|
|
|
query = queries.query_bookmark_tags(self.user, self.profile, 'tag1 #tag2')
|
|
self.assertQueryResult(query, [
|
|
self.get_tags_from_bookmarks(self.tag1_tag2_bookmarks),
|
|
])
|
|
|
|
def test_query_bookmark_tags_should_return_no_matches(self):
|
|
self.setup_tag_search_data()
|
|
|
|
query = queries.query_bookmark_tags(self.user, self.profile, 'term3')
|
|
self.assertQueryResult(query, [])
|
|
|
|
query = queries.query_bookmark_tags(self.user, self.profile, 'term1 term3')
|
|
self.assertQueryResult(query, [])
|
|
|
|
query = queries.query_bookmark_tags(self.user, self.profile, 'term1 #tag2')
|
|
self.assertQueryResult(query, [])
|
|
|
|
query = queries.query_bookmark_tags(self.user, self.profile, '#tag3')
|
|
self.assertQueryResult(query, [])
|
|
|
|
# Unused tag
|
|
query = queries.query_bookmark_tags(self.user, self.profile, '#unused_tag1')
|
|
self.assertQueryResult(query, [])
|
|
|
|
# Unused tag combined with tag that is used
|
|
query = queries.query_bookmark_tags(self.user, self.profile, '#tag1 #unused_tag1')
|
|
self.assertQueryResult(query, [])
|
|
|
|
# Unused tag combined with term that is used
|
|
query = queries.query_bookmark_tags(self.user, self.profile, 'term1 #unused_tag1')
|
|
self.assertQueryResult(query, [])
|
|
|
|
def test_query_bookmark_tags_should_return_tags_for_unarchived_bookmarks_only(self):
|
|
tag1 = self.setup_tag()
|
|
tag2 = self.setup_tag()
|
|
self.setup_bookmark(tags=[tag1])
|
|
self.setup_bookmark()
|
|
self.setup_bookmark(is_archived=True, tags=[tag2])
|
|
|
|
query = queries.query_bookmark_tags(self.user, self.profile, '')
|
|
|
|
self.assertQueryResult(query, [[tag1]])
|
|
|
|
def test_query_bookmark_tags_should_return_distinct_tags(self):
|
|
tag = self.setup_tag()
|
|
self.setup_bookmark(tags=[tag])
|
|
self.setup_bookmark(tags=[tag])
|
|
self.setup_bookmark(tags=[tag])
|
|
|
|
query = queries.query_bookmark_tags(self.user, self.profile, '')
|
|
|
|
self.assertQueryResult(query, [[tag]])
|
|
|
|
def test_query_archived_bookmark_tags_should_return_tags_for_archived_bookmarks_only(self):
|
|
tag1 = self.setup_tag()
|
|
tag2 = self.setup_tag()
|
|
self.setup_bookmark(tags=[tag1])
|
|
self.setup_bookmark()
|
|
self.setup_bookmark(is_archived=True, tags=[tag2])
|
|
|
|
query = queries.query_archived_bookmark_tags(self.user, self.profile, '')
|
|
|
|
self.assertQueryResult(query, [[tag2]])
|
|
|
|
def test_query_archived_bookmark_tags_should_return_distinct_tags(self):
|
|
tag = self.setup_tag()
|
|
self.setup_bookmark(is_archived=True, tags=[tag])
|
|
self.setup_bookmark(is_archived=True, tags=[tag])
|
|
self.setup_bookmark(is_archived=True, tags=[tag])
|
|
|
|
query = queries.query_archived_bookmark_tags(self.user, self.profile, '')
|
|
|
|
self.assertQueryResult(query, [[tag]])
|
|
|
|
def test_query_bookmark_tags_should_only_return_user_owned_tags(self):
|
|
other_user = User.objects.create_user('otheruser', 'otheruser@example.com', 'password123')
|
|
owned_bookmarks = [
|
|
self.setup_bookmark(tags=[self.setup_tag()]),
|
|
self.setup_bookmark(tags=[self.setup_tag()]),
|
|
self.setup_bookmark(tags=[self.setup_tag()]),
|
|
]
|
|
self.setup_bookmark(user=other_user, tags=[self.setup_tag(user=other_user)])
|
|
self.setup_bookmark(user=other_user, tags=[self.setup_tag(user=other_user)])
|
|
self.setup_bookmark(user=other_user, tags=[self.setup_tag(user=other_user)])
|
|
|
|
query = queries.query_bookmark_tags(self.user, self.profile, '')
|
|
|
|
self.assertQueryResult(query, [self.get_tags_from_bookmarks(owned_bookmarks)])
|
|
|
|
def test_query_archived_bookmark_tags_should_only_return_user_owned_tags(self):
|
|
other_user = User.objects.create_user('otheruser', 'otheruser@example.com', 'password123')
|
|
owned_bookmarks = [
|
|
self.setup_bookmark(is_archived=True, tags=[self.setup_tag()]),
|
|
self.setup_bookmark(is_archived=True, tags=[self.setup_tag()]),
|
|
self.setup_bookmark(is_archived=True, tags=[self.setup_tag()]),
|
|
]
|
|
self.setup_bookmark(is_archived=True, user=other_user, tags=[self.setup_tag(user=other_user)])
|
|
self.setup_bookmark(is_archived=True, user=other_user, tags=[self.setup_tag(user=other_user)])
|
|
self.setup_bookmark(is_archived=True, user=other_user, tags=[self.setup_tag(user=other_user)])
|
|
|
|
query = queries.query_archived_bookmark_tags(self.user, self.profile, '')
|
|
|
|
self.assertQueryResult(query, [self.get_tags_from_bookmarks(owned_bookmarks)])
|
|
|
|
def test_query_bookmark_tags_untagged_should_never_return_any_tags(self):
|
|
tag = self.setup_tag()
|
|
self.setup_bookmark()
|
|
self.setup_bookmark(title='term1')
|
|
self.setup_bookmark(title='term1', tags=[tag])
|
|
self.setup_bookmark(tags=[tag])
|
|
|
|
query = queries.query_bookmark_tags(self.user, self.profile, '!untagged')
|
|
self.assertCountEqual(list(query), [])
|
|
|
|
query = queries.query_bookmark_tags(self.user, self.profile, '!untagged term1')
|
|
self.assertCountEqual(list(query), [])
|
|
|
|
query = queries.query_bookmark_tags(self.user, self.profile, f'!untagged #{tag.name}')
|
|
self.assertCountEqual(list(query), [])
|
|
|
|
def test_query_archived_bookmark_tags_untagged_should_never_return_any_tags(self):
|
|
tag = self.setup_tag()
|
|
self.setup_bookmark(is_archived=True)
|
|
self.setup_bookmark(is_archived=True, title='term1')
|
|
self.setup_bookmark(is_archived=True, title='term1', tags=[tag])
|
|
self.setup_bookmark(is_archived=True, tags=[tag])
|
|
|
|
query = queries.query_archived_bookmark_tags(self.user, self.profile, '!untagged')
|
|
self.assertCountEqual(list(query), [])
|
|
|
|
query = queries.query_archived_bookmark_tags(self.user, self.profile, '!untagged term1')
|
|
self.assertCountEqual(list(query), [])
|
|
|
|
query = queries.query_archived_bookmark_tags(self.user, self.profile, f'!untagged #{tag.name}')
|
|
self.assertCountEqual(list(query), [])
|
|
|
|
def test_query_shared_bookmarks(self):
|
|
user1 = self.setup_user(enable_sharing=True)
|
|
user2 = self.setup_user(enable_sharing=True)
|
|
user3 = self.setup_user(enable_sharing=True)
|
|
user4 = self.setup_user(enable_sharing=False)
|
|
tag = self.setup_tag()
|
|
|
|
shared_bookmarks = [
|
|
self.setup_bookmark(user=user1, shared=True, title='test title'),
|
|
self.setup_bookmark(user=user2, shared=True),
|
|
self.setup_bookmark(user=user3, shared=True, tags=[tag]),
|
|
]
|
|
|
|
# Unshared bookmarks
|
|
self.setup_bookmark(user=user1, shared=False, title='test title'),
|
|
self.setup_bookmark(user=user2, shared=False),
|
|
self.setup_bookmark(user=user3, shared=False, tags=[tag]),
|
|
self.setup_bookmark(user=user4, shared=True, tags=[tag]),
|
|
|
|
# Should return shared bookmarks from all users
|
|
query_set = queries.query_shared_bookmarks(None, self.profile, '', False)
|
|
self.assertQueryResult(query_set, [shared_bookmarks])
|
|
|
|
# Should respect search query
|
|
query_set = queries.query_shared_bookmarks(None, self.profile, 'test title', False)
|
|
self.assertQueryResult(query_set, [[shared_bookmarks[0]]])
|
|
|
|
query_set = queries.query_shared_bookmarks(None, self.profile, '#' + tag.name, False)
|
|
self.assertQueryResult(query_set, [[shared_bookmarks[2]]])
|
|
|
|
def test_query_publicly_shared_bookmarks(self):
|
|
user1 = self.setup_user(enable_sharing=True, enable_public_sharing=True)
|
|
user2 = self.setup_user(enable_sharing=True)
|
|
|
|
bookmark1 = self.setup_bookmark(user=user1, shared=True)
|
|
self.setup_bookmark(user=user2, shared=True)
|
|
|
|
query_set = queries.query_shared_bookmarks(None, self.profile, '', True)
|
|
self.assertQueryResult(query_set, [[bookmark1]])
|
|
|
|
def test_query_shared_bookmark_tags(self):
|
|
user1 = self.setup_user(enable_sharing=True)
|
|
user2 = self.setup_user(enable_sharing=True)
|
|
user3 = self.setup_user(enable_sharing=True)
|
|
user4 = self.setup_user(enable_sharing=False)
|
|
|
|
shared_tags = [
|
|
self.setup_tag(user=user1),
|
|
self.setup_tag(user=user2),
|
|
self.setup_tag(user=user3),
|
|
]
|
|
|
|
self.setup_bookmark(user=user1, shared=True, tags=[shared_tags[0]]),
|
|
self.setup_bookmark(user=user2, shared=True, tags=[shared_tags[1]]),
|
|
self.setup_bookmark(user=user3, shared=True, tags=[shared_tags[2]]),
|
|
|
|
self.setup_bookmark(user=user1, shared=False, tags=[self.setup_tag(user=user1)]),
|
|
self.setup_bookmark(user=user2, shared=False, tags=[self.setup_tag(user=user2)]),
|
|
self.setup_bookmark(user=user3, shared=False, tags=[self.setup_tag(user=user3)]),
|
|
self.setup_bookmark(user=user4, shared=True, tags=[self.setup_tag(user=user4)]),
|
|
|
|
query_set = queries.query_shared_bookmark_tags(None, self.profile, '', False)
|
|
|
|
self.assertQueryResult(query_set, [shared_tags])
|
|
|
|
def test_query_publicly_shared_bookmark_tags(self):
|
|
user1 = self.setup_user(enable_sharing=True, enable_public_sharing=True)
|
|
user2 = self.setup_user(enable_sharing=True)
|
|
|
|
tag1 = self.setup_tag(user=user1)
|
|
tag2 = self.setup_tag(user=user2)
|
|
|
|
self.setup_bookmark(user=user1, shared=True, tags=[tag1]),
|
|
self.setup_bookmark(user=user2, shared=True, tags=[tag2]),
|
|
|
|
query_set = queries.query_shared_bookmark_tags(None, self.profile, '', True)
|
|
|
|
self.assertQueryResult(query_set, [[tag1]])
|
|
|
|
def test_query_shared_bookmark_users(self):
|
|
users_with_shared_bookmarks = [
|
|
self.setup_user(enable_sharing=True),
|
|
self.setup_user(enable_sharing=True),
|
|
]
|
|
users_without_shared_bookmarks = [
|
|
self.setup_user(enable_sharing=True),
|
|
self.setup_user(enable_sharing=True),
|
|
self.setup_user(enable_sharing=False),
|
|
]
|
|
|
|
# Shared bookmarks
|
|
self.setup_bookmark(user=users_with_shared_bookmarks[0], shared=True, title='test title'),
|
|
self.setup_bookmark(user=users_with_shared_bookmarks[1], shared=True),
|
|
|
|
# Unshared bookmarks
|
|
self.setup_bookmark(user=users_without_shared_bookmarks[0], shared=False, title='test title'),
|
|
self.setup_bookmark(user=users_without_shared_bookmarks[1], shared=False),
|
|
self.setup_bookmark(user=users_without_shared_bookmarks[2], shared=True),
|
|
|
|
# Should return users with shared bookmarks
|
|
query_set = queries.query_shared_bookmark_users(self.profile, '', False)
|
|
self.assertQueryResult(query_set, [users_with_shared_bookmarks])
|
|
|
|
# Should respect search query
|
|
query_set = queries.query_shared_bookmark_users(self.profile, 'test title', False)
|
|
self.assertQueryResult(query_set, [[users_with_shared_bookmarks[0]]])
|
|
|
|
def test_query_publicly_shared_bookmark_users(self):
|
|
user1 = self.setup_user(enable_sharing=True, enable_public_sharing=True)
|
|
user2 = self.setup_user(enable_sharing=True)
|
|
|
|
self.setup_bookmark(user=user1, shared=True)
|
|
self.setup_bookmark(user=user2, shared=True)
|
|
|
|
query_set = queries.query_shared_bookmark_users(self.profile, '', True)
|
|
self.assertQueryResult(query_set, [[user1]])
|