def test_missing_event_function(self): event = { 'module': 'test_module', # missing: 'function': 'test_function_without_decorator', 'parameters': { 'param_a': 'param_a_value' } } context = self.__get_context() with self.assertRaisesRegexp(ValueError, 'No "function" property'): cgf_lambda_service.dispatch(event, context)
def test_no_such_module(self, mock_import_module): event = { 'module': 'does_not_exist', 'function': 'test_function', 'parameters': { 'param_a': 'param_a_value' } } context = self.__get_context() with self.assertRaises(ImportError): cgf_lambda_service.dispatch(event, context) mock_import_module.assert_called_once_with('api.does_not_exist')
def test_normal_last(self, mock_import_module): event = { 'module': 'test_module', 'function': 'test_function_last', 'parameters': { 'param_a': 'param_a_value', 'param_b': 'param_b_value' } } context = self.__get_context() mock_handler.response = 'expected response' response = cgf_lambda_service.dispatch(event, context) self.assertEquals(mock_handler.response, response) self.assertEquals(event['parameters']['param_a'], mock_handler.received_param_a) self.assertEquals(event['parameters']['param_b'], mock_handler.received_param_b) self.assertIs(event, mock_handler.received_request.event) self.assertIs(context, mock_handler.received_request.context) mock_import_module.assert_called_once_with('api.test_module')
def test_logging_filter(self, mock_import_module): event = { 'module': 'test_module', 'function': 'test_function_with_parameter_logging_filter', 'parameters': { 'param_a': { 'key1': 'DO_NOT_LOG', 'key2': 'THIS_SHOULD_BE_LOGGED' }, 'param_b': 'DO_NOT_LOG' } } context = self.__get_context() mock_handler.response = {'message': 'expected response'} with mock.patch('sys.stdout', six.StringIO()) as mock_stdout: response = cgf_lambda_service.dispatch(event, context) self.assertEquals(mock_handler.response, response) self.assertEquals(event['parameters']['param_a'], mock_handler.received_param_a) self.assertEquals(event['parameters']['param_b'], mock_handler.received_param_b) self.assertIs(event, mock_handler.received_request.event) self.assertIs(context, mock_handler.received_request.context) output = mock_stdout.getvalue() self.assertTrue('THIS_SHOULD_BE_LOGGED' in output) self.assertFalse('DO_NOT_LOG' in output) self.assertTrue('REPLACEMENT_VALUE' in output)
def test_missing_decorator(self, mock_import_module): event = { 'module': 'test_module', 'function': 'test_function_without_decorator', 'parameters': { 'param_a': 'param_a_value' } } context = self.__get_context() with self.assertRaisesRegexp(ValueError, 'not a service dispatch handler'): cgf_lambda_service.dispatch(event, context) mock_import_module.assert_called_once_with('api.test_module')
def test_no_such_function(self, mock_import_module): event = { 'module': 'test_module', 'function': 'does_not_exist', 'parameters': { 'param_a': 'param_a_value' } } context = self.__get_context() with self.assertRaisesRegexp( ValueError, 'does not have an "does_not_exist" attribute'): cgf_lambda_service.dispatch(event, context) mock_import_module.assert_called_once_with('api.test_module')
def test_missing_parameter_alone(self, mock_import_module): event = { 'module': 'test_module', 'function': 'test_function_alone', 'parameters': { # missing: 'param_a': 'param_a_value' } } context = self.__get_context() with self.assertRaisesRegexp( cgf_lambda_service.ClientError, 'Expected the following parameters: param_a'): cgf_lambda_service.dispatch(event, context) mock_import_module.assert_called_once_with('api.test_module')
def test_first_parameter_name_conflict(self, mock_import_module): event = { 'module': 'test_module', 'function': 'test_function_with_first_parameter_name_conflict', 'parameters': { 'param_a': 'param_a_value', 'param_b': 'param_b_value' } } context = self.__get_context() with self.assertRaisesRegexp( ValueError, 'The first parameter\'s name, param_a, matches an api parameter name.' ): cgf_lambda_service.dispatch(event, context) mock_import_module.assert_called_once_with('api.test_module')
def test_no_parameter_value_with_default_value(self, mock_import_module): event = { 'module': 'test_module', 'function': 'test_function_with_default_value', 'parameters': { # missing: 'param_a': 'param_a_value' } } context = self.__get_context() mock_handler.response = {'message': 'expected response'} response = cgf_lambda_service.dispatch(event, context) self.assertEquals(mock_handler.response, response) self.assertEquals('default param a', mock_handler.received_param_a) self.assertIs(event, mock_handler.received_request.event) self.assertIs(context, mock_handler.received_request.context) mock_import_module.assert_called_once_with('api.test_module')
def test_missing_parameters_when_no_parameters_expected( self, mock_import_module): event = { 'module': 'test_module', 'function': 'test_function_without_parameters' # missing 'parameters': { # 'param_a': 'param_a_value' # } } context = self.__get_context() mock_handler.response = 'expected response' response = cgf_lambda_service.dispatch(event, context) self.assertEquals(mock_handler.response, response) self.assertIs(event, mock_handler.received_request.event) self.assertIs(context, mock_handler.received_request.context) mock_import_module.assert_called_once_with('api.test_module')
def test_logging_filter(self, mock_import_module): event = { 'module': 'test_module', 'function': 'test_function_with_parameter_logging_filter', 'parameters': { 'param_a': { 'key1': 'DO_NOT_LOG', 'key2': 'THIS_SHOULD_BE_LOGGED' }, 'param_b': 'DO_NOT_LOG' } } context = self.__get_context() mock_handler.response = 'expected response' printed_lines = [] with mock.patch('__builtin__.print', lambda line: printed_lines.append(line)): response = cgf_lambda_service.dispatch(event, context) output = '\n'.join(printed_lines) print(output) print() self.assertEquals(mock_handler.response, response) self.assertEquals(event['parameters']['param_a'], mock_handler.received_param_a) self.assertEquals(event['parameters']['param_b'], mock_handler.received_param_b) self.assertIs(event, mock_handler.received_request.event) self.assertIs(context, mock_handler.received_request.context) self.assertTrue('THIS_SHOULD_BE_LOGGED' in output) self.assertFalse('DO_NOT_LOG' in output) self.assertTrue('REPLACEMENT_VALUE' in output)
def test_extra_parameter_with_kwargs(self, mock_import_module): event = { 'module': 'test_module', 'function': 'test_function_with_kwargs', 'parameters': { 'param_a': 'param_a_value', 'param_b': 'param_b_value' } } context = self.__get_context() mock_handler.response = {'message': 'expected response'} response = cgf_lambda_service.dispatch(event, context) self.assertEquals(mock_handler.response, response) self.assertEquals({'param_b': event['parameters']['param_b']}, mock_handler.received_kwargs) self.assertIs(event, mock_handler.received_request.event) self.assertIs(context, mock_handler.received_request.context) mock_import_module.assert_called_once_with('api.test_module')