コード例 #1
0
 def test_index_returns_result(self, mock_index):
     """Test returns 'OK' + status 200 when index returns results."""
     mock_index.search.return_value = DocumentSet({}, [Document()])
     response, status_code, _ = health_check()
     self.assertEqual(response, 'OK', "Response content should be OK")
     self.assertEqual(status_code, status.HTTP_200_OK,
                      "Should return 200 status code.")
コード例 #2
0
 def test_index_returns_no_result(self, mock_index):
     """Test returns 'DOWN' + status 500 when index returns no results."""
     mock_index.search.return_value = DocumentSet({}, [])
     response, status_code, _ = health_check()
     self.assertEqual(response, 'DOWN', "Response content should be DOWN")
     self.assertEqual(status_code, status.HTTP_500_INTERNAL_SERVER_ERROR,
                      "Should return 500 status code.")
コード例 #3
0
 def test_single_field_term(self, mock_index):
     """Form data are present."""
     mock_index.search.return_value = DocumentSet(metadata={}, results=[])
     request_data = MultiDict({'searchtype': 'title', 'query': 'foo title'})
     response_data, code, headers = simple.search(request_data)
     self.assertEqual(mock_index.search.call_count, 1,
                      "A search should be attempted")
     call_args, call_kwargs = mock_index.search.call_args
     self.assertIsInstance(call_args[0], SimpleQuery,
                           "An SimpleQuery is passed to the search index")
     self.assertEqual(code, status.HTTP_200_OK, "Response should be OK.")
コード例 #4
0
    def test_title_search_contains_classic_syntax(self, mock_index):
        """User has entered a `surname_f` query in a title search."""
        request_data = MultiDict({
            'searchtype': 'title',
            'query': 'franklin_r',
            'size': 50,
            'order': ''
        })
        mock_index.search.return_value = DocumentSet(metadata={}, results=[])

        data, code, headers = simple.search(request_data)
        self.assertEqual(data['query'].value, "franklin_r",
                         "The query should not be rewritten.")
        self.assertFalse(data['has_classic_format'],
                         "Flag should not be set, as no rewrite has occurred.")
コード例 #5
0
ファイル: results.py プロジェクト: katsby-skye/arxiv-search
def to_documentset(query: Query, response: Response, highlight: bool = True) \
        -> DocumentSet:
    """
    Transform a response from ES to a :class:`.DocumentSet`.

    Parameters
    ----------
    query : :class:`.Query`
        The original search query.
    response : :class:`.Response`
        The response from Elasticsearch.

    Returns
    -------
    :class:`.DocumentSet`
        The set of :class:`.Document`s responding to the query on the current
        page, along with pagination metadata.

    """
    max_pages = int(MAX_RESULTS / query.size)
    N_pages_raw = response['hits']['total'] / query.size
    N_pages = int(floor(N_pages_raw)) + \
        int(N_pages_raw % query.size > 0)
    logger.debug('got %i results', response['hits']['total'])

    return DocumentSet(
        **{  # type: ignore
            'metadata': {
                'start':
                query.page_start,
                'end':
                min(query.page_start + query.size, response['hits']['total']),
                'total':
                response['hits']['total'],
                'current_page':
                query.page,
                'total_pages':
                N_pages,
                'size':
                query.size,
                'max_pages':
                max_pages
            },
            'results':
            [to_document(raw, highlight=highlight) for raw in response]
        })
コード例 #6
0
    def test_all_fields_search_multiple_classic_syntax(self, mock_index):
        """User has entered a classic query with multiple authors."""
        request_data = MultiDict({
            'searchtype': 'all',
            'query': 'j franklin_r hawking_s',
            'size': 50,
            'order': ''
        })
        mock_index.search.return_value = DocumentSet(metadata={}, results=[])

        data, code, headers = simple.search(request_data)
        self.assertEqual(data['query'].value, "j franklin, r; hawking, s",
                         "The query should be rewritten.")
        self.assertTrue(data['has_classic_format'],
                        "A flag denoting the syntax interception should be set"
                        " in the response context, so that a message may be"
                        " rendered in the template.")
コード例 #7
0
    def test_author_search_contains_classic_syntax(self, mock_index):
        """User has entered a `surname_f` query in an author search."""
        request_data = MultiDict({
            'searchtype': 'author',
            'query': 'franklin_r',
            'size': 50,
            'order': ''
        })
        mock_index.search.return_value = DocumentSet(metadata={}, results=[])

        data, code, headers = simple.search(request_data)
        self.assertEqual(data['query'].value, "franklin, r",
                         "The query should be rewritten.")
        self.assertTrue(data['has_classic_format'],
                        "A flag denoting the syntax interception should be set"
                        " in the response context, so that a message may be"
                        " rendered in the template.")
コード例 #8
0
    def test_single_field_term(self, mock_index):
        """Form data and ``advanced`` param are present."""
        mock_index.search.return_value = DocumentSet(metadata={}, results=[])

        request_data = MultiDict({
            'advanced': True,
            'terms-0-operator': 'AND',
            'terms-0-field': 'title',
            'terms-0-term': 'foo'
        })
        response_data, code, headers = advanced.search(request_data)
        self.assertEqual(mock_index.search.call_count, 1,
                         "A search should be attempted")
        call_args, call_kwargs = mock_index.search.call_args
        self.assertIsInstance(call_args[0], AdvancedQuery,
                              "An AdvancedQuery is passed to the search index")
        self.assertEqual(code, status.HTTP_200_OK, "Response should be OK.")
コード例 #9
0
    def test_all_fields_search_contains_classic_syntax(self, mock_index):
        """User has entered a `surname_f` query in an all-fields term."""
        request_data = MultiDict({
            'advanced': True,
            'terms-0-operator': 'AND',
            'terms-0-field': 'all',
            'terms-0-term': 'franklin_r',
            'size': 50,
            'order': ''
        })
        mock_index.search.return_value = DocumentSet(metadata={}, results=[])

        data, code, headers = advanced.search(request_data)
        self.assertEqual(data['query'].terms[0].term, "franklin, r",
                         "The query should be rewritten.")
        self.assertTrue(data['has_classic_format'],
                        "A flag denoting the syntax interception should be set"
                        " in the response context, so that a message may be"
                        " rendered in the template.")