def test_load_swagger_resource_aggregate_raises_exception(
            self, mock_perform_request, mock_utils, mock_app):
        # mock schema urls and app
        product_schema_url = {self.lm.endpoint_name: self.lm.endpoint}
        msg = 'Service "crm" not found.'
        exception_obj = exceptions.ServiceDoesNotExist(msg=msg)
        mock_utils.get_swagger_urls.side_effect = [
            product_schema_url, exception_obj
        ]
        mock_app.return_value = Mock(App)

        # mock service response
        headers = {'Content-Type': ['application/json']}
        service_response = Mock(PySwaggerResponse)
        service_response.status = 200
        service_response.data = self.response_data
        service_response.header = headers
        mock_perform_request.return_value = service_response

        # make api request
        path = '/old/{}/{}/'.format(self.lm.endpoint_name, 'products')
        response = self.client.get(path, {'aggregate': 'true'})

        # validate result
        expected_data = self.response_data
        self.assertEqual(response.status_code, 200)
        self.assertEqual(json.loads(response.content), expected_data)
    def test_aggregate_data_raises_exception(self, mock_logic_module_get,
                                             mock_perform_request, mock_app,
                                             mock_logger):
        # mock app
        mock_app.return_value = Mock(App)

        # mock response
        headers = {'Content-Type': ['application/json']}
        pyswagger_response = Mock(PySwaggerResponse)
        pyswagger_response.status = 200
        pyswagger_response.data = self.response_data
        pyswagger_response.header = headers
        mock_perform_request.return_value = pyswagger_response

        # mock logic module get
        msg = 'Service "{}" not found.'.format(self.lm.endpoint_name)
        exception_obj = exceptions.ServiceDoesNotExist(msg=msg)
        mock_logic_module_get.side_effect = exception_obj

        # make api request
        path = '/old/{}/{}/'.format(self.lm.endpoint_name, 'products')
        response = self.client.get(path, {'aggregate': 'true'})

        # validate result
        self.assertEqual(response.status_code, 200)
        mock_logger.error.assert_called_with(json.dumps({'detail': msg}))
 def _get_logic_module(self, service_name: str) -> LogicModule:
     """ Retrieve LogicModule by service name. """
     if service_name not in self._logic_modules:
         try:
             self._logic_modules[service_name] = LogicModule.objects.get(endpoint_name=service_name)
         except LogicModule.DoesNotExist:
             raise exceptions.ServiceDoesNotExist(f'Service "{service_name}" not found.')
     return self._logic_modules[service_name]
    def test_make_service_request_content_raises_exception(
            self, mock_perform_request):
        # mock response
        msg = 'Service "{}" not found.'.format(self.lm.endpoint_name)
        exception_obj = exceptions.ServiceDoesNotExist(msg=msg, status=404)
        mock_perform_request.side_effect = exception_obj

        # make api request
        path = '/old/{}/{}/'.format(self.lm.endpoint_name, 'example')
        response = self.client.get(path)

        # validate result
        self.assertEqual(response.status_code, 404)
        self.assertEqual(response.get('content-type'), 'application/json')
        self.assertEqual(json.loads(response.content), {'detail': msg})