def test_log_decode():
    message = '<log><application_name>kassa</application_name><timestamp>2020-04-30T16:42:57+00:00</timestamp><message>test</message></log>'
    log = decode_message(message)
    assert isinstance(log, LogMessage)
    assert log.source_application == 'kassa'
    assert log.timestamp == '2020-04-30T16:42:57+00:00'
    assert log.message == 'test'
def test_error_decode():
    message = '<error><application_name>kassa</application_name><timestamp>2020-04-30T16:42:57+00:00</timestamp><message>test</message></error>'
    error = decode_message(message)
    assert isinstance(error, Error)
    assert error.source_application == 'kassa'
    assert error.timestamp == '2020-04-30T16:42:57+00:00'
    assert error.message == 'test'
async def process_message(message, monitor):
    utf8 = message.body.decode('utf-8')
    LOGGER.info(f'Message incoming from queue: \'{utf8}\'')

    model = decode_message(utf8)
    LOGGER.info(f'Decoded XML message into {model.__class__.__name__}')

    if not isinstance(model, Heartbeat):
        LOGGER.info(f'Persisting {model.__class__.__name__} to ElasticSearch')
        await model.persist()
    else:
        LOGGER.info(f'Processing Heartbeat with monitor')
        status_change = monitor.process_heartbeat(model)

        if status_change:
            LOGGER.info(f'Persisting StatusChange to ElasticSearch: {status_change.application_name} -> online: {status_change.online}')
            await status_change.persist()
def test_event_updateinvoice_decode():
    message = '<update_invoice><application_name>kassa</application_name><invoice_id>test</invoice_id><name>test</name><description>test</description><quantity>test</quantity><price>test</price><paid>test</paid></update_invoice>'
    event = decode_message(message)
    assert isinstance(event, Event)
    assert event.event_type == 'update_invoice'
    assert event.source_application == 'kassa'
def test_event_addinvoice_decode():
    message = '<add_invoice><application_name>kassa</application_name><uuid>test</uuid><paid>test</paid><invoice_date>test</invoice_date><order_line><name>test</name><quantity>test</quantity><price>test</price><discount>test</discount></order_line></add_invoice>'
    event = decode_message(message)
    assert isinstance(event, Event)
    assert event.event_type == 'add_invoice'
    assert event.source_application == 'kassa'
def test_event_patchuser_decode():
    message = '<patch_user><application_name>kassa</application_name><name>test</name><uuid>test</uuid><email>test</email><street>test</street><municipal>test</municipal><postalCode>test</postalCode><vat>test</vat></patch_user>'
    event = decode_message(message)
    assert isinstance(event, Event)
    assert event.event_type == 'patch_user'
    assert event.source_application == 'kassa'
def test_heartbeat_decode():
    message = '<heartbeat><application_name>kassa</application_name><timestamp>2020-04-30T16:42:57+00:00</timestamp></heartbeat>'
    heartbeat = decode_message(message)
    assert isinstance(heartbeat, Heartbeat)
    assert heartbeat.source_application == 'kassa'