emit "DC_EVENT_MEMBER_ADDED" and python plugin event "member_added" for securejoin or non-securejoin additions of a contact to a chat. also fixup some docs

This commit is contained in:
holger krekel
2020-02-26 16:51:08 +01:00
parent 57141e478c
commit 84f17b7539
12 changed files with 69 additions and 12 deletions

View File

@@ -4,12 +4,13 @@ import sys
import py
import pytest
import requests
from contextlib import contextmanager
import time
from deltachat import Account
from deltachat.tracker import ConfigureTracker
from deltachat import const
from deltachat.capi import lib
from deltachat.hookspec import PerAccount
from deltachat.hookspec import account_hookimpl
from deltachat.eventlogger import FFIEventLogger
from _pytest.monkeypatch import MonkeyPatch
from ffi_event import FFIEventTracker
@@ -293,14 +294,25 @@ def lp():
@pytest.fixture
def make_plugin_recorder():
@contextmanager
def make_plugin_recorder(account):
class HookImpl:
def __init__(self):
self.calls_member_added = []
@account_hookimpl
def member_added(self, chat, member):
self.calls_member_added.append(dict(chat=chat, member=member))
def member_added(self, chat, contact):
self.calls_member_added.append(dict(chat=chat, contact=contact))
def get_first(self, name):
val = getattr(self, "calls_" + name, None)
if val is not None:
return val.pop(0)
with account.temp_plugin(HookImpl()) as plugin:
yield plugin
return make_plugin_recorder
def wait_configuration_progress(account, min_target, max_target=1001):

View File

@@ -167,16 +167,17 @@ class TestOfflineChat:
else:
pytest.fail("could not find chat")
def test_add_member_event(self, ac1):
contact1 = ac1.create_contact("some1@hello.com", name="some1")
contact2 = ac1.create_contact("some2@hello.com", name="some2")
def test_add_member_event(self, ac1, make_plugin_recorder):
chat = ac1.create_group_chat(name="title1")
# promote the chat
chat.send_text("hello")
contact1 = ac1.create_contact("some1@hello.com", name="some1")
with make_plugin_recorder(ac1) as rec:
chat.add_contact(contact2)
chat.add_contact(contact1)
kwargs = rec.get_first("member_added")
assert kwargs["chat"] == chat
assert kwargs["member"] == contact2
assert kwargs["contact"] == contact1
def test_group_chat_creation(self, ac1):
contact1 = ac1.create_contact("some1@hello.com", name="some1")
@@ -1129,7 +1130,7 @@ class TestOnlineAccount:
ac1._evtracker.get_matching("DC_EVENT_IMAP_MESSAGE_DELETED")
ac2._evtracker.get_matching("DC_EVENT_IMAP_MESSAGE_DELETED")
wait_securejoin_inviter_progress(ac1, 1000)
ac1._evtracker.get_matching("DC_EVENT_SECUREJOIN_MEMBER_ADDED")
ac1._evtracker.get_matching("DC_EVENT_MEMBER_ADDED")
def test_qr_verified_group_and_chatting(self, acfactory, lp):
ac1, ac2 = acfactory.get_two_online_accounts()
@@ -1141,7 +1142,7 @@ class TestOnlineAccount:
chat2 = ac2.qr_join_chat(qr)
assert chat2.id >= 10
wait_securejoin_inviter_progress(ac1, 1000)
ac1._evtracker.get_matching("DC_EVENT_SECUREJOIN_MEMBER_ADDED")
ac1._evtracker.get_matching("DC_EVENT_MEMBER_ADDED")
lp.sec("ac2: read member added message")
msg = ac2._evtracker.wait_next_incoming_message()