Merge pull request #127 from taigaio/bug/1188/issues-text-search
Fixing searchs, using an and for the words we search instead of an orremotes/origin/enhancement/email-actions
commit
742598a4f8
|
@ -246,8 +246,11 @@ class QFilter(FilterBackend):
|
|||
def filter_queryset(self, request, queryset, view):
|
||||
q = request.QUERY_PARAMS.get('q', None)
|
||||
if q:
|
||||
if q.isdigit():
|
||||
qs_args = [Q(ref=q)]
|
||||
else:
|
||||
qs_args = [Q(subject__icontains=x) for x in q.split()]
|
||||
qs_args += [Q(ref=x) for x in q.split() if x.isdigit()]
|
||||
queryset = queryset.filter(reduce(operator.or_, qs_args))
|
||||
|
||||
queryset = queryset.filter(reduce(operator.and_, qs_args))
|
||||
|
||||
return queryset
|
||||
|
|
|
@ -69,3 +69,81 @@ def test_api_filter_by_subject(client):
|
|||
|
||||
assert response.status_code == 200
|
||||
assert number_of_issues == 1, number_of_issues
|
||||
|
||||
|
||||
def test_api_filter_by_text_1(client):
|
||||
f.create_issue()
|
||||
issue = f.create_issue(subject="this is the issue one")
|
||||
f.create_issue(subject="this is the issue two", owner=issue.owner)
|
||||
url = reverse("issues-list") + "?q=one"
|
||||
|
||||
client.login(issue.owner)
|
||||
response = client.get(url)
|
||||
number_of_issues = len(response.data)
|
||||
|
||||
assert response.status_code == 200
|
||||
assert number_of_issues == 1
|
||||
|
||||
def test_api_filter_by_text_2(client):
|
||||
f.create_issue()
|
||||
issue = f.create_issue(subject="this is the issue one")
|
||||
f.create_issue(subject="this is the issue two", owner=issue.owner)
|
||||
url = reverse("issues-list") + "?q=this is the issue one"
|
||||
|
||||
client.login(issue.owner)
|
||||
response = client.get(url)
|
||||
number_of_issues = len(response.data)
|
||||
|
||||
assert response.status_code == 200
|
||||
assert number_of_issues == 1
|
||||
|
||||
def test_api_filter_by_text_3(client):
|
||||
f.create_issue()
|
||||
issue = f.create_issue(subject="this is the issue one")
|
||||
f.create_issue(subject="this is the issue two", owner=issue.owner)
|
||||
url = reverse("issues-list") + "?q=this is the issue"
|
||||
|
||||
client.login(issue.owner)
|
||||
response = client.get(url)
|
||||
number_of_issues = len(response.data)
|
||||
|
||||
assert response.status_code == 200
|
||||
assert number_of_issues == 2
|
||||
|
||||
def test_api_filter_by_text_4(client):
|
||||
f.create_issue()
|
||||
issue = f.create_issue(subject="this is the issue one")
|
||||
f.create_issue(subject="this is the issue two", owner=issue.owner)
|
||||
url = reverse("issues-list") + "?q=one two"
|
||||
|
||||
client.login(issue.owner)
|
||||
response = client.get(url)
|
||||
number_of_issues = len(response.data)
|
||||
|
||||
assert response.status_code == 200
|
||||
assert number_of_issues == 0
|
||||
|
||||
def test_api_filter_by_text_5(client):
|
||||
f.create_issue()
|
||||
issue = f.create_issue(subject="python 3")
|
||||
url = reverse("issues-list") + "?q=python 3"
|
||||
|
||||
client.login(issue.owner)
|
||||
response = client.get(url)
|
||||
number_of_issues = len(response.data)
|
||||
|
||||
assert response.status_code == 200
|
||||
assert number_of_issues == 1
|
||||
|
||||
|
||||
def test_api_filter_by_text_6(client):
|
||||
f.create_issue()
|
||||
issue = f.create_issue(subject="test")
|
||||
url = reverse("issues-list") + "?q=%s"%(issue.ref)
|
||||
|
||||
client.login(issue.owner)
|
||||
response = client.get(url)
|
||||
number_of_issues = len(response.data)
|
||||
|
||||
assert response.status_code == 200
|
||||
assert number_of_issues == 1
|
||||
|
|
Loading…
Reference in New Issue