def index(request): page = request.GET.get('page') query_string = request.GET.get('q') query_set = queries.query_bookmarks(request.user, query_string) paginator = Paginator(query_set, _default_page_size) bookmarks = paginator.get_page(page) tags = queries.query_tags(request.user, query_string) tag_names = [tag.name for tag in tags] tags_string = build_tag_string(tag_names, ' ') return_url = generate_index_return_url(page, query_string) if request.GET.get('tag'): mod = request.GET.copy() mod.pop('tag') request.GET = mod context = { 'bookmarks': bookmarks, 'tags': tags, 'tags_string': tags_string, 'query': query_string if query_string else '', 'empty': paginator.count == 0, 'return_url': return_url } return render(request, 'bookmarks/index.html', context)
def test_query_bookmarks_should_search_multiple_tags_ignoring_casing(self): self.setup_bookmark_search_data() query = queries.query_bookmarks(self.get_or_create_test_user(), '#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.get_or_create_test_user(), 'term1 #tag1') self.assertQueryResult(query, [self.term1_tag1_bookmarks])
def test_query_bookmarks_should_search_multiple_terms(self): self.setup_bookmark_search_data() query = queries.query_bookmarks(self.get_or_create_test_user(), 'term2 term1') self.assertQueryResult(query, [self.term1_term2_bookmarks])
def index(request): query_string = request.GET.get('q') query_set = queries.query_bookmarks(request.user, query_string) tags = queries.query_bookmark_tags(request.user, query_string) base_url = reverse('bookmarks:index') context = get_bookmark_view_context(request, query_set, tags, base_url) return render(request, 'bookmarks/index.html', context)
def get_queryset(self): user = self.request.user # For list action, use query set that applies search and tag projections if self.action == 'list': query_string = self.request.GET.get('q') return queries.query_bookmarks(user, query_string) # For single entity actions use default query set without projections return Bookmark.objects.all().filter(owner=user)
def test_query_bookmark_tags_should_return_no_matches(self): self.setup_tag_search_data() query = queries.query_bookmarks(self.get_or_create_test_user(), 'term3') self.assertQueryResult(query, []) query = queries.query_bookmarks(self.get_or_create_test_user(), 'term1 term3') self.assertQueryResult(query, []) query = queries.query_bookmarks(self.get_or_create_test_user(), 'term1 #tag2') self.assertQueryResult(query, []) query = queries.query_bookmarks(self.get_or_create_test_user(), '#tag3') self.assertQueryResult(query, [])
def test_query_bookmarks_should_use_tag_projection(self): self.setup_bookmark_search_data() # Test projection on bookmarks with tags query = queries.query_bookmarks(self.user, '#tag1 #tag2') for bookmark in query: self.assertEqual(bookmark.tag_count, 2) self.assertEqual(bookmark.tag_string, 'tag1,tag2') self.assertTrue(bookmark.tag_projection) # Test projection on bookmarks without tags query = queries.query_bookmarks(self.user, 'term2') for bookmark in query: self.assertEqual(bookmark.tag_count, 0) self.assertEqual(bookmark.tag_string, None) self.assertTrue(bookmark.tag_projection)
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.get_or_create_test_user(), '') self.assertCountEqual([bookmark1, bookmark2], list(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.get_or_create_test_user(), '') self.assertQueryResult(query, [[bookmark1, bookmark2]])
def test_query_bookmarks_should_search_single_tag(self): self.setup_bookmark_search_data() query = queries.query_bookmarks(self.get_or_create_test_user(), '#tag1') self.assertQueryResult(query, [ self.tag1_bookmarks, self.tag1_tag2_bookmarks, self.term1_tag1_bookmarks ])
def test_query_bookmarks_should_return_all_for_empty_query(self): self.setup_bookmark_search_data() query = queries.query_bookmarks(self.get_or_create_test_user(), '') self.assertQueryResult(query, [ self.other_bookmarks, self.term1_bookmarks, self.term1_term2_bookmarks, self.tag1_bookmarks, self.term1_tag1_bookmarks, self.tag2_bookmarks, self.tag1_tag2_bookmarks ])
def bookmark_export(request): try: bookmarks = query_bookmarks(request.user, '') file_content = export_netscape_html(bookmarks) response = HttpResponse(content_type='text/plain; charset=UTF-8') response[ 'Content-Disposition'] = 'attachment; filename="bookmarks.html"' response.write(file_content) return response except Exception: return render( request, 'settings/index.html', {'export_error': 'An error occurred during bookmark export.'})
def test_query_bookmarks_should_only_return_user_owned_bookmarks(self): other_user = User.objects.create_user('otheruser', '*****@*****.**', '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.assertQueryResult(query, [owned_bookmarks])
def index(request): page = request.GET.get('page') query_string = request.GET.get('q') query_set = queries.query_bookmarks(request.user, query_string) paginator = Paginator(query_set, _default_page_size) bookmarks = paginator.get_page(page) tags = queries.query_tags(request.user, query_string) if request.GET.get('tag'): mod = request.GET.copy() mod.pop('tag') request.GET = mod context = { 'bookmarks': bookmarks, 'tags': tags, 'query': query_string if query_string else '', 'empty': paginator.count == 0 } return render(request, 'bookmarks/index.html', context)