Esempio n. 1
0
def test_reconcile_message(db, config):
    from inbox.models.util import reconcile_message
    from inbox.sendmail.base import create_draft
    from inbox.models.account import Account
    from inbox.models.message import Message
    from inbox.log import get_logger
    log = get_logger()

    account = db.session.query(Account).get(ACCOUNT_ID)
    draft = create_draft(db.session, account)

    assert draft.inbox_uid == draft.public_id, 'draft has incorrect inbox_uid'
    inbox_uid = draft.inbox_uid

    message = Message()
    message.thread_id = THREAD_ID
    message.received_date = datetime.utcnow()
    message.size = len('')
    message.is_draft = True
    message.is_read = True
    message.sanitized_body = ''
    message.snippet = ''
    message.inbox_uid = draft.inbox_uid
    db.session.add(message)
    db.session.commit()

    reconcile_message(db.session, log, inbox_uid, message)

    assert draft.resolved_message and draft.resolved_message.id == message.id,\
        'draft not reconciled correctly'

    assert message.public_id != draft.public_id, \
        'message has incorrect public_id'
Esempio n. 2
0
def draft_send_api():
    if request.content_type == "message/rfc822":
        msg = create_draft_from_mime(g.namespace.account, request.data,
                                     g.db_session)
        validate_draft_recipients(msg)
        resp = send_raw_mime(g.namespace.account, g.db_session, msg)
        return resp

    data = request.get_json(force=True)
    draft_public_id = data.get('draft_id')
    if draft_public_id is not None:
        draft = get_draft(draft_public_id, data.get('version'), g.namespace.id,
                          g.db_session)
        schedule_action('delete_draft',
                        draft,
                        draft.namespace.id,
                        g.db_session,
                        inbox_uid=draft.inbox_uid,
                        message_id_header=draft.message_id_header)
    else:
        draft = create_draft(data, g.namespace, g.db_session, syncback=False)

    validate_draft_recipients(draft)
    resp = send_draft(g.namespace.account, draft, g.db_session)
    return resp
Esempio n. 3
0
def draft_send_api():
    data = request.get_json(force=True)
    draft_public_id = data.get('draft_id')
    if draft_public_id is not None:
        draft = get_draft(draft_public_id, data.get('version'), g.namespace.id,
                          g.db_session)
        validate_draft_recipients(draft)
        resp = send_draft(g.namespace.account, draft, g.db_session,
                          schedule_remote_delete=True)
    else:
        draft = create_draft(data, g.namespace, g.db_session, syncback=False)
        validate_draft_recipients(draft)
        resp = send_draft(g.namespace.account, draft, g.db_session,
                          schedule_remote_delete=False)
        if resp.status_code == 200:
            # At this point, the message has been successfully sent. If there's
            # any sort of error in committing the updated state, don't allow it
            # to cause the request to fail. Otherwise a client may think their
            # message hasn't been sent, when it fact it has.
            try:
                g.db_session.add(draft)
                g.db_session.commit()
            except Exception as exc:
                g.log.critical('Error committing draft after successful send',
                               exc_info=True, error=exc)
    return resp
Esempio n. 4
0
def draft_create_api():
    data = request.get_json(force=True)
    try:
        draft = create_draft(data, g.namespace, g.db_session, syncback=True)
        g.db_session.add(draft)
        g.db_session.commit()
    except ActionError as e:
        return err(e.error, str(e))

    return g.encoder.jsonify(draft)
def test_headers_presence(default_namespace, db):
    data = {'subject': 'test draft', 'to': [{'email': '*****@*****.**'}]}
    draft = create_draft(data, default_namespace, db.session, False)

    assert draft.inbox_uid is not None
    assert draft.message_id_header is not None

    old_uid = draft.inbox_uid

    update_draft(db.session, default_namespace.account, draft,
                 body="updated body", blocks=[])

    assert draft.inbox_uid is not None
    assert draft.message_id_header is not None
    assert draft.inbox_uid != old_uid
def test_save_update_bad_recipient_draft(db, patch_remote_save_draft,
                                         default_account,
                                         example_bad_recipient_drafts):
    # You should be able to save a draft, even if
    # the recipient's email is invalid.
    from inbox.sendmail.base import create_draft
    from inbox.actions.base import save_draft as save_draft_remote
    from inbox.models import Account

    for example_draft in example_bad_recipient_drafts:
        draft = create_draft(example_draft, default_account.namespace,
                             db.session, syncback=False)

        save_draft_remote(default_account.id, draft.id, db.session,
                          {'version': draft.version})

    assert len(patch_remote_save_draft) == 2
Esempio n. 7
0
def test_headers_presence(default_namespace, db):
    data = {'subject': 'test draft', 'to': [{'email': '*****@*****.**'}]}
    draft = create_draft(data, default_namespace, db.session, False)

    assert draft.inbox_uid is not None
    assert draft.message_id_header is not None

    old_uid = draft.inbox_uid

    update_draft(db.session,
                 default_namespace.account,
                 draft,
                 body="updated body",
                 blocks=[])

    assert draft.inbox_uid is not None
    assert draft.message_id_header is not None
    assert draft.inbox_uid != old_uid
def test_save_update_bad_recipient_draft(db, patch_remote_save_draft,
                                         default_account,
                                         example_bad_recipient_drafts):
    # You should be able to save a draft, even if
    # the recipient's email is invalid.
    from inbox.sendmail.base import create_draft
    from inbox.actions.base import save_draft as save_draft_remote
    from inbox.models import Account

    for example_draft in example_bad_recipient_drafts:
        draft = create_draft(example_draft,
                             default_account.namespace,
                             db.session,
                             syncback=False)

        save_draft_remote(default_account.id, draft.id, db.session,
                          {'version': draft.version})

    assert len(patch_remote_save_draft) == 2
Esempio n. 9
0
def draft_send_api():
    if request.content_type == "message/rfc822":
        msg = create_draft_from_mime(g.namespace.account, request.data,
                                     g.db_session)
        validate_draft_recipients(msg)
        resp = send_raw_mime(g.namespace.account, g.db_session, msg)
        return resp

    data = request.get_json(force=True)
    draft_public_id = data.get('draft_id')
    if draft_public_id is not None:
        draft = get_draft(draft_public_id, data.get('version'), g.namespace.id,
                          g.db_session)
        schedule_action('delete_draft', draft, draft.namespace.id,
                        g.db_session, inbox_uid=draft.inbox_uid,
                        message_id_header=draft.message_id_header)
    else:
        draft = create_draft(data, g.namespace, g.db_session, syncback=False)

    validate_draft_recipients(draft)
    resp = send_draft(g.namespace.account, draft, g.db_session)
    return resp
Esempio n. 10
0
def draft_create_api():
    data = request.get_json(force=True)
    draft = create_draft(data, g.namespace, g.db_session, syncback=True)
    return g.encoder.jsonify(draft)
Esempio n. 11
0
def draft_create_api():
    data = request.get_json(force=True)
    draft = create_draft(data, g.namespace, g.db_session, syncback=True)
    return g.encoder.jsonify(draft)