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'
def test_delete_remote_draft(db, api_client): from inbox.models.message import Message # Non-Inbox created draft, therefore don't set inbox_uid message = Message() message.namespace_id = NAMESPACE_ID message.thread_id = 1 message.received_date = datetime.utcnow() message.size = len('') message.is_draft = True message.is_read = True message.sanitized_body = '' message.snippet = '' db.session.add(message) db.session.commit() drafts = api_client.get_data('/drafts') assert len(drafts) == 1 public_id = drafts[0]['id'] version = drafts[0]['version'] assert public_id == message.public_id and version == message.version api_client.delete('/drafts/{}'.format(public_id), {'version': version}) # Check that drafts were deleted drafts = api_client.get_data('/drafts') assert not drafts
def create_imap_message(db_session, log, account, folder, msg): """ IMAP-specific message creation logic. This is the one function in this file that gets to take an account object instead of an account_id, because we need to relate the account to ImapUids for versioning to work, since it needs to look up the namespace. Returns ------- imapuid : inbox.models.tables.imap.ImapUid New db object, which links to new Message and Block objects through relationships. All new objects are uncommitted. """ new_msg = Message(account=account, mid=msg.uid, folder_name=folder.name, received_date=msg.internaldate, flags=msg.flags, body_string=msg.body) imapuid = ImapUid(account=account, folder=folder, msg_uid=msg.uid, message=new_msg) imapuid.update_imap_flags(msg.flags, msg.g_labels) new_msg.is_draft = imapuid.is_draft new_msg.is_read = imapuid.is_seen update_contacts_from_message(db_session, new_msg, account.id) # NOTE: This might be a good place to add FolderItem entries for # non-Gmail backends. return imapuid