convert some log infos and guard bindings against some misuse

This commit is contained in:
holger krekel
2019-07-03 20:17:35 +02:00
parent adcb9d6069
commit 4378608617
3 changed files with 32 additions and 24 deletions

View File

@@ -184,14 +184,18 @@ class Account(object):
return list(iter_array(dc_array, lambda x: Contact(self._dc_context, x)))
def create_chat_by_contact(self, contact):
""" create or get an existing 1:1 chat object for the specified contact.
""" create or get an existing 1:1 chat object for the specified contact or contact id.
:param contact: chat_id (int) or contact object.
:returns: a :class:`deltachat.chatting.Chat` object.
"""
assert contact._dc_context == self._dc_context
contact_id = getattr(contact, "id", contact)
assert isinstance(contact_id, int)
if hasattr(contact, "id"):
if contact._dc_context != self._dc_context:
raise ValueError("Contact belongs to a different Account")
contact_id = getattr(contact, "id", contact)
else:
assert isinstance(contact, int)
contact_id = contact
chat_id = lib.dc_create_chat_by_contact_id(
self._dc_context, contact_id)
return Chat(self._dc_context, chat_id)
@@ -203,6 +207,8 @@ class Account(object):
:param message: messsage id or message instance.
:returns: a :class:`deltachat.chatting.Chat` object.
"""
if self._dc_context != message._dc_context:
raise ValueError("Message belongs to a different Account")
msg_id = getattr(message, "id", message)
assert isinstance(msg_id, int)
chat_id = lib.dc_create_chat_by_msg_id(self._dc_context, msg_id)

View File

@@ -180,6 +180,17 @@ class TestOfflineAccount:
assert msg.filename.endswith(msg.basename)
assert msg.filemime == typeout
def test_create_chat_mismatch(self, acfactory):
ac1 = acfactory.get_configured_offline_account()
ac2 = acfactory.get_configured_offline_account()
contact1 = ac1.create_contact("some1@hello.com", name="some1")
with pytest.raises(ValueError):
ac2.create_chat_by_contact(contact1)
chat1 = ac1.create_chat_by_contact(contact1)
msg = chat1.send_text("hello")
with pytest.raises(ValueError):
ac2.create_chat_by_message(msg)
def test_chat_message_distinctions(self, acfactory):
ac1 = acfactory.get_configured_offline_account()
contact1 = ac1.create_contact("some1@hello.com", name="some1")