diff --git a/taiga/base/filters.py b/taiga/base/filters.py index 25287800..986a0192 100644 --- a/taiga/base/filters.py +++ b/taiga/base/filters.py @@ -246,8 +246,11 @@ class QFilter(FilterBackend): def filter_queryset(self, request, queryset, view): q = request.QUERY_PARAMS.get('q', None) if q: - 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)) + if q.isdigit(): + qs_args = [Q(ref=q)] + else: + qs_args = [Q(subject__icontains=x) for x in q.split()] + + queryset = queryset.filter(reduce(operator.and_, qs_args)) return queryset diff --git a/tests/integration/test_issues.py b/tests/integration/test_issues.py index b0b2f67a..a40cd418 100644 --- a/tests/integration/test_issues.py +++ b/tests/integration/test_issues.py @@ -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