def test_execute(self, mock_save, mock_execute, mock_now): """Test the execute class method.""" search = Search() sq = SearchQuery.execute(search) self.assertEqual(sq.user, None) self.assertEqual(sq.index, '_all') self.assertEqual(sq.query, search.to_dict()) self.assertEqual(sq.hits, []) self.assertEqual(sq.total_hits, mock_execute.return_value.hits.total) self.assertEqual(sq.reference, '') self.assertTrue(sq.duration > 0) self.assertEqual(sq.executed_at, mock_now.return_value) mock_save.assert_called_once_with() # try without saving mock_save.reset_mock() sq = SearchQuery.execute(search, save=False) mock_save.assert_not_called()
def test_execute_count(self, mock_count): mock_count.return_value = 100 search = Search() sq = execute_count(search, search_terms="foo", user=None, reference="bar") sq.refresh_from_db() # just to confirm it saves in / out self.assertIsNotNone(sq.id) self.assertEqual(sq.search_terms, "foo") self.assertEqual(sq.reference, "bar") self.assertEqual(sq.query, search.to_dict()) self.assertEqual(sq.index, "_all") self.assertEqual(sq.hits, []) self.assertEqual(sq.total_hits, 100) self.assertEqual(sq.total_hits_relation, SearchQuery.TotalHitsRelation.ACCURATE) self.assertEqual(sq.query_type, SearchQuery.QueryType.COUNT) self.assertEqual(sq.aggregations, {}) self.assertTrue(sq.duration > 0)
def test_execute_search(self, mock_search): # lots of mocking to get around lack of ES server during tests def mock_hit(meta_dict): # Returns a mock that looks like a Hit hm = mock.Mock(spec=HitMeta) hm.to_dict.return_value = meta_dict return mock.Mock(spec=Hit, meta=hm) response = mock.MagicMock(spec=Response) response.hits.__iter__.return_value = iter( [mock_hit(h) for h in ExecuteFunctionTests.hits]) response.hits.total.value = 100 response.hits.total.relation = "gte" response.aggregations = mock.Mock(spec=AggResponse) response.aggregations.to_dict.return_value = ExecuteFunctionTests.aggregations mock_search.return_value = response search = Search() sq = execute_search(search, search_terms="foo", user=None, reference="bar") sq.refresh_from_db() # just to confirm it saves in / out self.assertIsNotNone(sq.id) self.assertEqual(sq.search_terms, "foo") self.assertEqual(sq.reference, "bar") self.assertEqual(sq.query, search.to_dict()) self.assertEqual(sq.index, "_all") self.assertEqual(sq.hits, ExecuteFunctionTests.hits) self.assertEqual(sq.total_hits, 100) self.assertEqual(sq.total_hits_relation, SearchQuery.TotalHitsRelation.ESTIMATE) self.assertEqual(sq.query_type, SearchQuery.QueryType.SEARCH) self.assertEqual(sq.aggregations, ExecuteFunctionTests.aggregations) self.assertTrue(sq.duration > 0)