def test_clear_index_delete_error(self, mock_range, mock_delete, mock_logging): mock_range.return_value = [ search.ScoredDocument(doc_id='unused_doc_id') ] mock_delete.side_effect = search.DeleteError(message='Delete Fail!', results=[]) base_model.BaseModel.clear_index() self.assertEqual(mock_logging.exception.call_count, 1)
def test_audit_remove_devices(self, mock_get_shelf, mock_model_device_search): shelf = self.device2_key.get() shelf.shelf = self.shelf.key shelf.put() mock_model_device_search.return_value = (search.SearchResults( results=[ search.ScoredDocument(doc_id=self.device2_key.urlsafe()), search.ScoredDocument(doc_id=self.device3_key.urlsafe()), search.ScoredDocument(doc_id=self.device4_key.urlsafe()) ], number_found=3)) mock_get_shelf.return_value = self.shelf request = shelf_messages.ShelfAuditRequest( shelf_request=shelf_messages.ShelfRequest( location=self.shelf.location), device_identifiers=[self.device3_key.get().serial_number]) self.service.audit(request) self.assertEqual(self.device3_key.get().shelf, self.shelf.key) self.assertEqual(self.device2_key.get().shelf, None) self.assertEqual(self.device4_key.get().shelf, None)
def test_document_to_message(self, mock_logging): """Tests the creation of a protorpc message from a search document.""" test_search_document = search.ScoredDocument( doc_id='test_doc_id', fields=[ search.NumberField(name='capacity', value=20.0), search.TextField(name='location', value='US MTV'), search.AtomField(name='location', value='US-MTV'), search.AtomField(name='enabled', value='True'), search.GeoField(name='lat_long', value=search.GeoPoint(52.37, 4.88)), search.TextField(name='not_present', value='MTV') ]) expected_message = shelf_messages.Shelf(enabled=True, location='US-MTV', capacity=20, latitude=52.37, longitude=4.88) response_message = search_utils.document_to_message( test_search_document, shelf_messages.Shelf()) self.assertEqual(response_message, expected_message) self.assertTrue(response_message.enabled) assert mock_logging.error.call_count == 1
class SearchTest(loanertest.EndpointsTestCase, parameterized.TestCase): _ASSIGNED_DATE = datetime.datetime(year=2017, month=1, day=1) @parameterized.parameters(( shelf_messages.Shelf(location='NY', capacity=50), 'location:NY capacity:50 enabled:True', ), ( shelf_messages.Shelf(location='NY', capacity=50, enabled=False), 'location:NY capacity:50 enabled:False', )) def test_to_query(self, message, expected_query): """Tests the creation of a valid search query from ndb properties.""" query = search_utils.to_query(message, shelf_model.Shelf) # The query is split because ndb properties are unordered when called by # model_class._properties. This test would be flaky otherwise. self.assertCountEqual(query.split(' '), expected_query.split(' ')) @parameterized.named_parameters( ('Shelf Message', shelf_messages.Shelf(), search.ScoredDocument( doc_id='test_doc_id', fields=[ search.NumberField(name='capacity', value=20.0), search.TextField(name='location', value='US MTV'), search.AtomField(name='location', value='US-MTV'), search.AtomField(name='enabled', value='True'), search.GeoField(name='lat_long', value=search.GeoPoint(52.37, 4.88)), search.TextField(name='not_present', value='MTV') ]), shelf_messages.Shelf(enabled=True, location='US-MTV', capacity=20, latitude=52.37, longitude=4.88), 1), ('Device Message', device_messages.Device(), search.ScoredDocument( doc_id='test_doc_id', fields=[ search.DateField(name='assignment_date', value=_ASSIGNED_DATE), search.TextField(name='serial_number', value='1234'), search.AtomField(name='enrolled', value='True'), search.TextField(name='assigned_user', value='user') ]), device_messages.Device( enrolled=True, serial_number='1234', assigned_user='******', max_extend_date=_ASSIGNED_DATE + datetime.timedelta(days=14), assignment_date=_ASSIGNED_DATE), 0)) def test_document_to_message(self, message, test_search_document, expected_message, log_call_count): """Tests the creation of a protorpc message from a search document.""" with mock.patch.object(search_utils, 'logging', autospec=True) as mock_logging: response_message = search_utils.document_to_message( test_search_document, message) self.assertEqual(response_message, expected_message) self.assertEqual(mock_logging.error.call_count, log_call_count) def test_calculate_page_offset(self): """Tests the calculation of page offset.""" page_size = 10 page_number = 5 offset = search_utils.calculate_page_offset(page_size, page_number) self.assertEqual(40, offset) def test_calculate_total_pages(self): """Tests the calculation of total pages.""" page_size = 6 total_results = 11 total_pages = search_utils.calculate_total_pages( page_size, total_results) self.assertEqual(2, total_pages) @parameterized.named_parameters( { 'testcase_name': 'QueryStringOnly', 'request': shared_messages.SearchRequest(query_string='enrolled:True'), 'expected_values': ('enrolled:True', None, []) }, { 'testcase_name': 'QueryStringWithReturnedFields', 'request': shared_messages.SearchRequest(query_string='location:US-NYC', returned_fields=['location']), 'expected_values': ('location:US-NYC', None, ['location']) }, ) def test_set_search_query_options(self, request, expected_values): """Tests setting the query options without sort options from message.""" returned_query, returned_sort_options, returned_returned_fields = ( search_utils.set_search_query_options(request)) expected_query, expected_sort_options, expcted_returned_fields = ( expected_values) self.assertEqual(expected_sort_options, returned_sort_options) self.assertEqual(expected_query, returned_query) self.assertEqual(expcted_returned_fields, returned_returned_fields) @parameterized.named_parameters( { 'testcase_name': 'ExpressionWithDirection', 'request': shared_messages.SearchRequest( query_string='enrolled:True', expressions=[ shared_messages.SearchExpression( expression='enrolled', direction=shared_messages.SortDirection.ASCENDING) ]), 'expected_sort_options_expressions': [ search.SortExpression( expression='enrolled', direction=search.SortExpression.ASCENDING) ] }, { 'testcase_name': 'MultipleExpressionsWithDirection', 'request': shared_messages.SearchRequest( query_string='enrolled:True', expressions=[ shared_messages.SearchExpression( expression='enrolled', direction=shared_messages.SortDirection.ASCENDING), shared_messages.SearchExpression( expression='serial_number', direction=shared_messages.SortDirection.DESCENDING) ]), 'expected_sort_options_expressions': [ search.SortExpression( expression='enrolled', direction=search.SortExpression.ASCENDING), search.SortExpression( expression='serial_number', direction=search.SortExpression.DESCENDING) ] }, { 'testcase_name': 'ExpressionWithoutDirection', 'request': shared_messages.SearchRequest( query_string='enrolled:True', expressions=[ shared_messages.SearchExpression(expression='enrolled') ]), 'expected_sort_options_expressions': [search.SortExpression(expression='enrolled')] }, { 'testcase_name': 'MultipleExpressionsWithoutDirection', 'request': shared_messages.SearchRequest( query_string='enrolled:True', expressions=[ shared_messages.SearchExpression(expression='enrolled'), shared_messages.SearchExpression( expression='serial_number') ]), 'expected_sort_options_expressions': [ search.SortExpression( expression='enrolled', direction=search.SortExpression.DESCENDING), search.SortExpression( expression='serial_number', direction=search.SortExpression.DESCENDING) ] }, ) def test_set_search_query_options_with_sort_options( self, request, expected_sort_options_expressions): """Tests setting query options with sort options from message.""" returned_query, returned_sort_options, returned_returned_fields = ( search_utils.set_search_query_options(request)) del returned_query # Unused. del returned_returned_fields # Unused. for i in range(len(returned_sort_options.expressions)): self.assertEqual(returned_sort_options.expressions[i].expression, expected_sort_options_expressions[i].expression) self.assertEqual(returned_sort_options.expressions[i].direction, expected_sort_options_expressions[i].direction)