예제 #1
0
    def test_forms_items_query_between_3_and_100_characters_long(self, *_):
        """The `query` param should be between 3 and 100 characters long."""
        form = ItemSearchForm(data=QueryDict(query_string="query=aa"))
        self.assertFalse(form.is_valid())
        self.assertEqual(
            form.errors,
            {
                "query":
                ["Ensure this value has at least 3 characters (it has 2)."]
            },
        )

        form = ItemSearchForm(data=QueryDict(query_string="query=aaa"))
        self.assertTrue(form.is_valid())

        form = ItemSearchForm(data=QueryDict(
            query_string="query={:s}".format("a" * 100)))
        self.assertTrue(form.is_valid())

        form = ItemSearchForm(data=QueryDict(
            query_string="query={:s}".format("a" * 101)))
        self.assertFalse(form.is_valid())
        self.assertEqual(
            form.errors,
            {
                "query":
                ["Ensure this value has at most 100 characters (it has 101)."]
            },
        )
예제 #2
0
    def test_forms_items_offset_integer(self, *_):
        """The `offset` param should be an integer."""
        form = ItemSearchForm(data=QueryDict(query_string="offset=a"))
        self.assertFalse(form.is_valid())
        self.assertEqual(form.errors, {"offset": ["Enter a whole number."]})

        form = ItemSearchForm(data=QueryDict(query_string="offset=1"))
        self.assertTrue(form.is_valid())
예제 #3
0
 def test_forms_items_limit_greater_than_1(self, *_):
     """The `limit` param should be greater than 1."""
     form = ItemSearchForm(data=QueryDict(query_string="limit=0"))
     self.assertFalse(form.is_valid())
     self.assertEqual(
         form.errors,
         {"limit": ["Ensure this value is greater than or equal to 1."]})
예제 #4
0
 def test_forms_items_build_es_query_search_by_match_text(self, *_):
     """
     Happy path: build a query that filters items by matching text
     """
     form = ItemSearchForm(data=QueryDict(
         query_string="limit=20&offset=2&query=some%20phrase%20terms"))
     self.assertTrue(form.is_valid())
     self.assertEqual(
         form.build_es_query(),
         (
             20,
             2,
             {
                 "query": {
                     "bool": {
                         "must": [{
                             "multi_match": {
                                 "analyzer": "english",
                                 "fields": ["title.*"],
                                 "query": "some phrase "
                                 "terms",
                             }
                         }]
                     }
                 }
             },
         ),
     )
예제 #5
0
 def test_forms_items_offset_greater_than_0(self, *_):
     """The `offset` param should be greater than 0."""
     form = ItemSearchForm(data=QueryDict(query_string="offset=-1"))
     self.assertFalse(form.is_valid())
     self.assertEqual(
         form.errors,
         {"offset": ["Ensure this value is greater than or equal to 0."]},
     )
예제 #6
0
 def test_forms_items_empty_querystring(self, *_):
     """The empty query string should be a valid search form."""
     form = ItemSearchForm(data=QueryDict())
     self.assertTrue(form.is_valid())
     self.assertEqual(form.cleaned_data, {
         "limit": None,
         "offset": None,
         "query": "",
         "scope": ""
     })
예제 #7
0
 def test_forms_items_build_es_query_search_all(self, *_):
     """
     Happy path: a match all query is returned
     """
     form = ItemSearchForm(data=QueryDict(query_string="limit=11&offset=4"))
     self.assertTrue(form.is_valid())
     self.assertEqual(form.build_es_query(), (11, 4, {
         "query": {
             "match_all": {}
         }
     }))
예제 #8
0
 def test_forms_items_single_values_in_querystring(self, *_):
     """
     The fields from filter definitions should be normalized as lists. The fields defined
     on the form should be single values (limit, offset and query).
     """
     form = ItemSearchForm(data=QueryDict(
         query_string=("limit=9&offset=3&query=maths")))
     self.assertTrue(form.is_valid())
     self.assertEqual(form.cleaned_data, {
         "limit": 9,
         "offset": 3,
         "query": "maths",
         "scope": ""
     })
예제 #9
0
 def test_forms_items_build_es_query_by_match_text_with_kind(self, *_):
     """
     Make sure the generated query filters the items by kind when one is provided
     as argument.
     """
     form = ItemSearchForm(data=QueryDict(
         query_string="limit=20&offset=2&query=some%20phrase%20terms"))
     self.assertTrue(form.is_valid())
     self.assertEqual(
         form.build_es_query(kind="subjects"),
         (
             20,
             2,
             {
                 "query": {
                     "bool": {
                         "must": [
                             {
                                 "term": {
                                     "kind": "subjects"
                                 }
                             },
                             {
                                 "multi_match": {
                                     "analyzer": "english",
                                     "fields": ["title.*"],
                                     "query": "some phrase "
                                     "terms",
                                 }
                             },
                         ]
                     }
                 }
             },
         ),
     )
예제 #10
0
 def test_forms_items_params_not_required(self, *_):
     """No params are required for the search form."""
     form = ItemSearchForm()
     self.assertTrue(form.is_valid())