From b5ce7a0c259580b8d1343c2d07bbfb0491c1afdf Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 3 Jan 2021 07:48:57 -0800 Subject: [PATCH 1/2] Search on username and localname in user search --- bookwyrm/views.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/bookwyrm/views.py b/bookwyrm/views.py index 10137684..40c2c9dc 100644 --- a/bookwyrm/views.py +++ b/bookwyrm/views.py @@ -5,6 +5,7 @@ from django.contrib.auth.decorators import login_required, permission_required from django.contrib.postgres.search import TrigramSimilarity from django.core.paginator import Paginator from django.db.models import Avg, Q +from django.db.models.functions import Greatest from django.http import HttpResponseNotFound, JsonResponse from django.core.exceptions import PermissionDenied from django.shortcuts import get_object_or_404, redirect @@ -227,7 +228,10 @@ def search(request): # do a local user search user_results = models.User.objects.annotate( - similarity=TrigramSimilarity('username', query), + similarity=Greatest( + TrigramSimilarity('username', query), + TrigramSimilarity('localname', query), + ) ).filter( similarity__gt=0.5, ).order_by('-similarity')[:10] From e54e1f245996737c5ebbd7dc9fb51a365324b974 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 3 Jan 2021 07:57:57 -0800 Subject: [PATCH 2/2] Tests user search --- bookwyrm/tests/test_views.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/bookwyrm/tests/test_views.py b/bookwyrm/tests/test_views.py index 34321e83..69188e2b 100644 --- a/bookwyrm/tests/test_views.py +++ b/bookwyrm/tests/test_views.py @@ -211,6 +211,19 @@ class Views(TestCase): response.context_data['book_results'][0].title, 'Gideon the Ninth') + def test_search_html_response_users(self): + ''' searches remote connectors ''' + request = self.factory.get('', {'q': 'mouse'}) + with patch('bookwyrm.views.is_api_request') as is_api: + is_api.return_value = False + with patch('bookwyrm.connectors.connector_manager.search'): + response = views.search(request) + self.assertIsInstance(response, TemplateResponse) + self.assertEqual(response.template_name, 'search_results.html') + self.assertEqual( + response.context_data['user_results'][0], self.local_user) + + def test_import_page(self): ''' there are so many views, this just makes sure it LOADS ''' request = self.factory.get('')