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_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_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_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()
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_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_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_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
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