def test_exposes_sender():
    sender = a_string()
    client_message = mock_client_message(mex_headers=build_mex_headers(
        **{"from": sender}))
    message = MeshMessage(client_message)

    assert message.sender == sender
def test_exposes_recipient():
    recipient = a_string()
    client_message = mock_client_message(mex_headers=build_mex_headers(
        to=recipient))
    message = MeshMessage(client_message)

    assert message.recipient == recipient
def test_calls_acknowledge_on_underlying_client_message():
    client_message = mock_client_message()
    message = MeshMessage(client_message)

    message.acknowledge()

    client_message.acknowledge.assert_called_once()
def test_throws_exception_when_status_event_header_is_not_transfer():
    client_message = mock_client_message(mex_headers=build_mex_headers(
        status_event="COLLECT"))

    message = MeshMessage(client_message)

    with pytest.raises(UnexpectedStatusEvent):
        message.validate()
def test_throws_exception_when_status_success_header_is_not_success():
    client_message = mock_client_message(mex_headers=build_mex_headers(
        status_success="ERROR"))

    message = MeshMessage(client_message)

    with pytest.raises(UnsuccessfulStatus):
        message.validate()
Exemple #6
0
def test_returns_messages():
    message_ids = [a_string(), a_string(), a_string()]
    client_messages = [mock_client_message(message_id=m_id) for m_id in message_ids]
    mesh_inbox = mock_mesh_inbox(client_messages=client_messages)

    actual_messages_ids = [message.id for message in mesh_inbox.read_messages()]

    assert actual_messages_ids == message_ids
def test_exposes_date_delivered():
    date_delivered = a_datetime()
    status_timestamp_header = date_delivered.strftime("%Y%m%d%H%M%S")
    client_message = mock_client_message(mex_headers=build_mex_headers(
        status_timestamp=status_timestamp_header))
    message = MeshMessage(client_message)

    assert message.date_delivered == date_delivered
def test_throws_exception_when_message_type_header_is_not_data():
    client_message = mock_client_message(mex_headers=build_mex_headers(
        message_type="REPORT"))

    message = MeshMessage(client_message)

    with pytest.raises(UnexpectedMessageType):
        message.validate()
def test_exposes_filename():
    mocked_timestamp = a_timestamp()
    mocked_filename = a_filename(mocked_timestamp)
    client_message = mock_client_message(mex_headers=build_mex_headers(
        file_name=mocked_filename))
    message = MeshMessage(client_message)

    assert message.file_name == mocked_filename
def test_ignores_case_in_message_type_header(message_type_value):
    client_message = mock_client_message(mex_headers=build_mex_headers(
        message_type=message_type_value))
    try:
        message = MeshMessage(client_message)
        message.validate()
    except UnexpectedMessageType:
        pytest.fail(
            "UnexpectedMessageType was raised when it shouldn't have been")
def test_ignores_case_in_success_event_type_header(status_event_value):
    client_message = mock_client_message(mex_headers=build_mex_headers(
        status_event=status_event_value))
    try:
        message = MeshMessage(client_message)
        message.validate()
    except UnexpectedStatusEvent:
        pytest.fail(
            "UnexpectedStatusEvent was raised when it shouldn't have been")
def test_mesh_network_error_raised_when_ack_raises_http_error():
    client_message = mock_client_message(
        acknowledge_error=mesh_client_http_error())

    message = MeshMessage(client_message)

    with pytest.raises(MeshClientNetworkError) as e:
        message.acknowledge()

    assert e.value.error_message == f"400 HTTP Error: Bad request for url: {TEST_INBOX_URL}"
Exemple #13
0
def test_mailbox_retrieve_message_returns_mesh_message():
    message_id = a_string()
    mock_mesh_client = MagicMock()
    mock_mesh_client.retrieve_message.return_value = mock_client_message(message_id=message_id)
    mesh_inbox = MeshInbox(mock_mesh_client)

    retrieved_message = mesh_inbox.retrieve_message(message_id)

    assert retrieved_message.id == message_id
    mock_mesh_client.retrieve_message.assert_called_once_with(message_id)
def test_calls_read_on_underlying_client_message():
    expected_value = "data"

    client_message = mock_client_message()
    client_message.read.return_value = expected_value
    message = MeshMessage(client_message)

    actual_value = message.read(n=43)

    client_message.read.assert_called_once_with(43)
    assert actual_value == expected_value
def test_mesh_network_error_raised_when_ack_raises_connection_error():
    client_message = mock_client_message(
        acknowledge_error=mesh_client_connection_error("an error"))

    message = MeshMessage(client_message)

    with pytest.raises(MeshClientNetworkError) as e:
        message.acknowledge()

    assert str(e.value) == (
        f"ConnectionError received when attempting to connect to: {TEST_INBOX_URL}"
        " caused by: an error")
def test_exception_raised_for_missing_to_header():
    mex_headers = build_mex_headers()
    del mex_headers["to"]

    client_message = mock_client_message(mex_headers=mex_headers)

    message = MeshMessage(client_message)

    with pytest.raises(MissingMeshHeader) as exception_info:
        _ = message.recipient

    exception = exception_info.value
    assert exception.header_name == "to"
def test_exception_raised_for_missing_status_timestamp_header():
    mex_headers = build_mex_headers()
    del mex_headers["statustimestamp"]

    client_message = mock_client_message(mex_headers=mex_headers)

    message = MeshMessage(client_message)

    with pytest.raises(MissingMeshHeader) as exception_info:
        _ = message.date_delivered

    exception = exception_info.value
    assert exception.header_name == "statustimestamp"
def test_exception_raised_for_missing_validation_headers(missing_header_name):
    mex_headers = build_mex_headers()
    del mex_headers[missing_header_name]

    client_message = mock_client_message(mex_headers=mex_headers)

    message = MeshMessage(client_message)

    with pytest.raises(MissingMeshHeader) as exception_info:
        message.validate()

    exception = exception_info.value
    assert exception.header_name == missing_header_name
def test_exception_records_header_when_message_type_header_is_not_data():
    message_type_header_value = "REPORT"
    client_message = mock_client_message(mex_headers=build_mex_headers(
        message_type=message_type_header_value))

    message = MeshMessage(client_message)

    with pytest.raises(UnexpectedMessageType) as exception_info:
        message.validate()

    exception = exception_info.value
    assert exception.header_value == message_type_header_value
    assert exception.header_name == "messagetype"
    assert exception.expected_header_value == MESH_MESSAGE_TYPE_DATA
def test_exception_records_header_when_status_event_header_is_not_transfer():
    status_event_header_value = "COLLECT"
    client_message = mock_client_message(mex_headers=build_mex_headers(
        status_event=status_event_header_value))

    message = MeshMessage(client_message)

    with pytest.raises(UnexpectedStatusEvent) as exception_info:
        message.validate()

    exception = exception_info.value
    assert exception.header_value == status_event_header_value
    assert exception.header_name == "statusevent"
    assert exception.expected_header_value == MESH_STATUS_EVENT_TRANSFER
def test_exception_records_header_when_status_success_header_is_not_success():
    status_success_header_value = "ERROR"
    client_message = mock_client_message(mex_headers=build_mex_headers(
        status_success=status_success_header_value), )

    message = MeshMessage(client_message)

    with pytest.raises(UnsuccessfulStatus) as exception_info:
        message.validate()

    exception = exception_info.value
    assert exception.header_value == status_success_header_value
    assert exception.header_name == "statussuccess"
    assert exception.expected_header_value == MESH_STATUS_SUCCESS
Exemple #22
0
 def mock_iterate_all_messages():
     raise mesh_client_connection_error("an error")
     yield mock_client_message()
def test_exposes_headers():
    headers = {"foo": "bar"}
    client_message = mock_client_message(mex_headers=headers)
    message = MeshMessage(client_message)

    assert message.headers == headers
Exemple #24
0
 def mock_iterate_all_messages():
     raise mesh_client_http_error()
     yield mock_client_message()
def test_exposes_message_id():
    message_id = a_string()
    client_message = mock_client_message(message_id=message_id)
    message = MeshMessage(client_message)

    assert message.id == message_id