import pytest import py import echo_and_quit import group_tracking from deltachat.events import FFIEventLogger @pytest.fixture(scope='session') def datadir(): """The py.path.local object of the test-data/ directory.""" for path in reversed(py.path.local(__file__).parts()): datadir = path.join('test-data') if datadir.isdir(): return datadir else: pytest.skip('test-data directory not found') def test_echo_quit_plugin(acfactory, lp): lp.sec("creating one echo_and_quit bot") botproc = acfactory.run_bot_process(echo_and_quit) lp.sec("creating a temp account to contact the bot") ac1 = acfactory.get_one_online_account() lp.sec("sending a message to the bot") bot_contact = ac1.create_contact(botproc.addr) bot_chat = bot_contact.create_chat() bot_chat.send_text("hello") lp.sec("waiting for the reply message from the bot to arrive") reply = ac1._evtracker.wait_next_incoming_message() assert reply.chat == bot_chat assert "hello" in reply.text lp.sec("send quit sequence") bot_chat.send_text("/quit") botproc.wait() def test_group_tracking_plugin(acfactory, lp): lp.sec("creating one group-tracking bot and two temp accounts") botproc = acfactory.run_bot_process(group_tracking, ffi=False) ac1, ac2 = acfactory.get_two_online_accounts() botproc.fnmatch_lines(""" *ac_configure_completed* """) ac1.add_account_plugin(FFIEventLogger(ac1)) ac2.add_account_plugin(FFIEventLogger(ac2)) lp.sec("creating bot test group with bot") bot_contact = ac1.create_contact(botproc.addr) ch = ac1.create_group_chat("bot test group") ch.add_contact(bot_contact) ch.send_text("hello") botproc.fnmatch_lines(""" *ac_chat_modified*bot test group* """) lp.sec("adding third member {}".format(ac2.get_config("addr"))) contact3 = ac1.create_contact(ac2.get_config("addr")) ch.add_contact(contact3) reply = ac1._evtracker.wait_next_incoming_message() assert "hello" in reply.text lp.sec("now looking at what the bot received") botproc.fnmatch_lines(""" *ac_member_added {}*from*{}* """.format(contact3.addr, ac1.get_config("addr"))) lp.sec("contact successfully added, now removing") ch.remove_contact(contact3) botproc.fnmatch_lines(""" *ac_member_removed {}*from*{}* """.format(contact3.addr, ac1.get_config("addr")))