Commit d37aba7e by Clinton Blackburn Committed by GitHub

Revert "Ignoring empty query string parameters sent to search endpoint" (#351)

parent 6b2de5c7
...@@ -4,7 +4,6 @@ import django_filters ...@@ -4,7 +4,6 @@ import django_filters
from django.conf import settings from django.conf import settings
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.db.models import QuerySet from django.db.models import QuerySet
from django.http import QueryDict
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from drf_haystack.filters import HaystackFacetFilter, HaystackFilter as DefaultHaystackFilter from drf_haystack.filters import HaystackFacetFilter, HaystackFilter as DefaultHaystackFilter
from drf_haystack.query import FacetQueryBuilder from drf_haystack.query import FacetQueryBuilder
...@@ -60,29 +59,14 @@ class FacetQueryBuilderWithQueries(FacetQueryBuilder): ...@@ -60,29 +59,14 @@ class FacetQueryBuilderWithQueries(FacetQueryBuilder):
return query return query
class HaystackRequestFilterMixin: class HaystackFacetFilterWithQueries(HaystackFacetFilter):
@staticmethod
def get_request_filters(request):
filters = HaystackFacetFilter.get_request_filters(request)
# Remove items with empty values
filters = dict((k, v) for k, v in filters.items() if v)
# Convert the dict to a QueryDict to maintain the contract of the original method.
query_dict = QueryDict('', mutable=True)
query_dict.update(filters)
return query_dict
class HaystackFacetFilterWithQueries(HaystackRequestFilterMixin, HaystackFacetFilter):
query_builder_class = FacetQueryBuilderWithQueries query_builder_class = FacetQueryBuilderWithQueries
class HaystackFilter(HaystackRequestFilterMixin, DefaultHaystackFilter): class HaystackFilter(DefaultHaystackFilter):
@staticmethod @staticmethod
def get_request_filters(request): def get_request_filters(request):
filters = HaystackRequestFilterMixin.get_request_filters(request) filters = HaystackFacetFilter.get_request_filters(request)
# Return data for the default partner, if no partner is requested # Return data for the default partner, if no partner is requested
if not any(field in filters for field in ('partner', 'partner_exact')): if not any(field in filters for field in ('partner', 'partner_exact')):
......
import ddt
from django.test import TestCase
from rest_framework.test import APIRequestFactory
from rest_framework.views import APIView
from course_discovery.apps.api.filters import HaystackRequestFilterMixin
@ddt.ddt
class HaystackRequestFilterMixinTests(TestCase):
def test_get_request_filters(self):
""" Verify the method removes query parameters with empty values """
request = APIRequestFactory().get('/?q=')
request = APIView().initialize_request(request)
filters = HaystackRequestFilterMixin.get_request_filters(request)
self.assertDictEqual(filters, {})
...@@ -236,12 +236,3 @@ class AggregateSearchViewSet(DefaultPartnerMixin, SerializationMixin, LoginMixin ...@@ -236,12 +236,3 @@ class AggregateSearchViewSet(DefaultPartnerMixin, SerializationMixin, LoginMixin
response_data = json.loads(response.content.decode('utf-8')) response_data = json.loads(response.content.decode('utf-8'))
self.assertListEqual(response_data['objects']['results'], self.assertListEqual(response_data['objects']['results'],
[self.serialize_course_run(other_course_run), self.serialize_program(other_program)]) [self.serialize_course_run(other_course_run), self.serialize_program(other_program)])
def test_empty_query(self):
""" Verify, when the query (q) parameter is empty, the endpoint behaves as if the parameter
was not provided. """
course_run = CourseRunFactory(course__partner=self.partner, status=CourseRunStatus.Published)
response = self.get_search_response({'q': ''})
self.assertEqual(response.status_code, 200)
response_data = json.loads(response.content.decode('utf-8'))
self.assertListEqual(response_data['objects']['results'], [self.serialize_course_run(course_run)])
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment