def test_extract_slack_socket_reponse_returns_none_when_non_exiterror_slack_socket_exception_occurs(
    slacksocket_error, ):
    # Given
    mock_iterator = MockIterator(injectable_exception=slacksocket_error)

    mock_slack_socket = MockSlackSocket()
    mock_slack_socket.mock_iterator = mock_iterator

    sut = SimpleSlackBot("mock slack bot token")
    sut._slack_socket = mock_slack_socket

    expected_response = None

    # When
    actual_response = sut.extract_slack_socket_response()

    # Then
    assert expected_response == actual_response
def test_listen_stops_listening_when_slack_socket_keyboard_interrupt_exception_occurs(
    caplog, ):
    # Given
    mock_iterator = MockIterator(
        injectable_exception=slacksocket.errors.ExitError)

    mock_slack_socket = MockSlackSocket()
    mock_slack_socket.mock_iterator = mock_iterator

    sut = SimpleSlackBot("mock slack bot token")
    sut._slack_socket = mock_slack_socket

    # When
    with caplog.at_level(logging.INFO):
        sut.listen()

    # Then
    assert SimpleSlackBot.KEYBOARD_INTERRUPT_EXCEPTION_LOG_MESSAGE in caplog.text
def test_extract_slack_socket_reponse_returns_response_when_no_exception_is_raised(
):
    # Given
    mock_iterator = MockIterator(injectable_yield=42)

    mock_slack_socket = MockSlackSocket()
    mock_slack_socket.mock_iterator = mock_iterator

    sut = SimpleSlackBot("mock slack bot token")
    sut._slack_socket = mock_slack_socket

    expected_first_value = 42
    expected_second_value_type = typing.Iterable

    # When
    actual_response = sut.extract_slack_socket_response()

    # Then
    assert expected_first_value == actual_response[0]
    assert isinstance(actual_response[1], expected_second_value_type)