Exemple #1
0
    def test_get_handler_registered_for_custom_exception(self):
        test_intent_request = mock.MagicMock(spec=IntentRequest)
        test_request_envelope = mock.MagicMock(spec=RequestEnvelope)
        test_request_envelope.request = test_intent_request
        test_handler_input = HandlerInput(
            request_envelope=test_request_envelope)

        test_exception_handler_1 = mock.MagicMock(
            spec=AbstractExceptionHandler)
        test_exception_handler_1.can_handle.return_value = False
        test_exception_handler_2 = mock.MagicMock(
            spec=AbstractExceptionHandler)
        test_exception_handler_2.can_handle.return_value = True
        test_exception_mapper = ExceptionMapper(exception_handlers=[
            test_exception_handler_1, test_exception_handler_2
        ])

        test_custom_exception = DispatchException("Test Custom Exception")

        assert test_exception_mapper.get_handler(
            handler_input=test_handler_input, exception=test_custom_exception
        ) == test_exception_handler_2, (
            "get_handler in Default Exception Mapper found incorrect request "
            "exception handler for "
            "input and custom exception")
    def test_add_request_handler_chain_throw_error_for_null_chain(self):
        test_exception_mapper = ExceptionMapper(exception_handlers=None)

        with self.assertRaises(DispatchException) as exc:
            test_exception_mapper.add_exception_handler(None)

        assert "Input is not an AbstractExceptionHandler instance" in str(exc.exception), (
            "Exception Mapper didn't throw error during add_exception_handler "
            "method call when "
            "an invalid Exception Handler is passed")
    def test_add_exception_handler_for_valid_handler_type(self):
        test_exception_handler = mock.MagicMock(spec=AbstractExceptionHandler)
        test_exception_mapper = ExceptionMapper(exception_handlers=None)

        test_exception_mapper.add_exception_handler(test_exception_handler)

        assert test_exception_mapper.exception_handlers == [
            test_exception_handler], (
            "Exception Mapper throws exception when a valid Exception Handler "
            "is provided in the "
            "add_handler method")
    def test_dispatch_raise_low_level_exception_when_no_suitable_exception_handler_registered(self):
        test_request_handler = mock.MagicMock(spec=AbstractRequestHandler)
        test_request_handler.can_handle.return_value = True
        test_request_handler.handle.return_value = "Test Response"

        test_request_handler_chain = RequestHandlerChain(
            request_handler=test_request_handler)
        test_request_mapper = RequestMapper(
            request_handler_chains=[test_request_handler_chain])

        test_adapter = mock.MagicMock(spec=HandlerAdapter)
        test_adapter.supports.return_value = True
        test_adapter.execute.side_effect = Exception(
            "Test low level Exception")

        test_exception_handler = mock.MagicMock(spec=AbstractExceptionHandler)
        test_exception_handler.can_handle.return_value = False
        test_exception_mapper = ExceptionMapper(
            exception_handlers=[test_exception_handler])

        self.test_dispatcher.request_mappers = [test_request_mapper]
        self.test_dispatcher.handler_adapters = [test_adapter]
        self.test_dispatcher.exception_mapper = test_exception_mapper

        with self.assertRaises(Exception) as exc:
            self.test_dispatcher.dispatch(
                handler_input=self.valid_handler_input)

        assert "Test low level Exception" in str(exc.exception), (
            "Dispatcher didn't throw low level exception when request "
            "dispatch throws exception and "
            "no suitable exception handler is registered")
    def test_exception_mapper_initialization_with_handler_list_containing_null_throw_error(self):
        with self.assertRaises(DispatchException) as exc:
            test_exception_mapper = ExceptionMapper(exception_handlers=[None])

        assert "Input is not an AbstractExceptionHandler instance" in str(exc.exception), (
            "Exception Mapper didn't throw error during initialization when a "
            "Null handler is passed")
    def test_no_handler_registered_for_custom_exception(self):
        test_intent_request = mock.MagicMock(spec=IntentRequest)
        test_request_envelope = mock.MagicMock(spec=RequestEnvelope)
        test_request_envelope.request = test_intent_request
        test_handler_input = HandlerInput(
            request_envelope=test_request_envelope)

        test_exception_handler = mock.MagicMock(spec=AbstractExceptionHandler)
        test_exception_handler.can_handle.return_value = False
        test_exception_mapper = ExceptionMapper(
            exception_handlers=[test_exception_handler])

        test_custom_exception = DispatchException("Test Custom Exception")

        assert test_exception_mapper.get_handler(
            handler_input=test_handler_input, exception=test_custom_exception) is None, (
            "get_handler in Default Exception Mapper found an unsupported "
            "exception handler for "
            "handler input and custom exception")
    def test_exception_mapper_initialization_with_handler_list_containing_valid_handler(self):
        test_exception_handler = mock.MagicMock(spec=AbstractExceptionHandler)

        test_exception_mapper = ExceptionMapper(
            exception_handlers=[test_exception_handler])

        assert test_exception_mapper.exception_handlers == [test_exception_handler], (
            "Exception Mapper initialization throws exception when a valid "
            "Handler is provided in the "
            "exception handlers list")
    def test_exception_mapper_initialization_with_handler_list_containing_invalid_handler_throw_error(self):
        test_invalid_handler = mock.Mock()

        with self.assertRaises(DispatchException) as exc:
            test_exception_mapper = ExceptionMapper(
                exception_handlers=[test_invalid_handler])

        assert "Input is not an AbstractExceptionHandler instance" in str(exc.exception), (
            "Exception Mapper didn't throw error during initialization when "
            "an invalid handler is passed")
Exemple #9
0
    def test_dispatch_process_handled_exception_when_suitable_exception_handler_registered(
            self):
        test_request_handler = mock.MagicMock(spec=AbstractRequestHandler)
        test_request_handler.can_handle.return_value = True
        test_request_handler.handle.return_value = "Test Response"

        test_request_handler_chain = RequestHandlerChain(
            request_handler=test_request_handler)
        test_request_mapper = RequestMapper(
            request_handler_chains=[test_request_handler_chain])

        test_adapter = mock.MagicMock(spec=HandlerAdapter)
        test_adapter.supports.return_value = True
        test_adapter.execute.side_effect = DispatchException(
            "Custom dispatch exception")

        test_exception_handler_1 = mock.MagicMock(
            spec=AbstractExceptionHandler)
        test_exception_handler_1.can_handle.return_value = False
        test_exception_handler_2 = mock.MagicMock(
            spec=AbstractExceptionHandler)
        test_exception_handler_2.can_handle.return_value = True
        test_exception_handler_2.handle.return_value = "Custom exception " \
                                                       "handler response"

        self.test_dispatcher = RequestDispatcher(
            request_mappers=[test_request_mapper],
            handler_adapters=[test_adapter],
            exception_mapper=ExceptionMapper(exception_handlers=[
                test_exception_handler_1, test_exception_handler_2
            ]))

        assert self.test_dispatcher.dispatch(
            handler_input=self.valid_handler_input
        ) == "Custom exception handler response", (
            "Dispatcher didn't handle exception when a suitable exception handler is registered"
        )

        test_exception_handler_1.handle.assert_not_called(), (
            "Incorrect Exception Handler called when handling custom "
            "exception")
        test_exception_handler_2.handle.assert_called_once(), (
            "Suitable exception handler didn't handle custom exception")
    def test_exception_mapper_with_null_input(self):
        test_exception_mapper = ExceptionMapper(exception_handlers=None)

        assert test_exception_mapper.exception_handlers == [], (
            "Exception Mapper instantiated empty list of exceptions handlers "
            "when no input provided")