diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..07ea218 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,84 @@ +import os + +import deltachat +import pytest +from _pytest.pytester import LineMatcher + + +class ClickRunner: + def __init__(self, main): + from click.testing import CliRunner + + self.runner = CliRunner() + self._main = main + self._rootargs = [] + + def set_basedir(self, account_dir): + self._rootargs.insert(0, "--basedir") + self._rootargs.insert(1, account_dir) + + def run_ok(self, args, fnl=None, input=None): + __tracebackhide__ = True + argv = self._rootargs + args + # we use our nextbackup helper to cache account creation + # unless --no-test-cache is specified + res = self.runner.invoke(self._main, argv, catch_exceptions=False, input=input) + if res.exit_code != 0: + print(res.output) + raise Exception("cmd exited with %d: %s" % (res.exit_code, argv)) + return _perform_match(res.output, fnl) + + def run_fail(self, args, fnl=None, input=None, code=None): + __tracebackhide__ = True + argv = self._rootargs + args + res = self.runner.invoke(self._main, argv, catch_exceptions=False, input=input) + if res.exit_code == 0 or (code is not None and res.exit_code != code): + print(res.output) + raise Exception( + "got exit code {!r}, expected {!r}, output: {}".format( + res.exit_code, + code, + res.output, + ), + ) + return _perform_match(res.output, fnl) + + +def _perform_match(output, fnl): + __tracebackhide__ = True + if fnl: + lm = LineMatcher(output.splitlines()) + lines = [x.strip() for x in fnl.strip().splitlines()] + try: + lm.fnmatch_lines(lines) + except Exception: + print(output) + raise + return output + + +@pytest.fixture +def cmd(): + """invoke a command line subcommand.""" + from teams_bot.cli import teams_bot + + return ClickRunner(teams_bot) + + +@pytest.fixture +def tmp_file_path(request, tmpdir): + if request.param: + path = str(tmpdir) + "/" + str(request.param) + with open(path, "w+", encoding="utf-8") as f: + f.write("test") + return path + + +@pytest.fixture +def chat(tmpdir): + token = os.getenv("DCC_NEW_TMP") + ac = deltachat.Account(str(tmpdir) + "/db.sqlite") + # create bot account from token + # create chat partner from token + # initiate a chat between them + # return the chat object \ No newline at end of file diff --git a/tests/test_cli.py b/tests/test_cli.py new file mode 100644 index 0000000..e33e3ea --- /dev/null +++ b/tests/test_cli.py @@ -0,0 +1,10 @@ +def test_help(cmd): + cmd.run_ok( + [], + """ + Usage: teams-bot [OPTIONS] COMMAND [ARGS]... + * -h, --help Show this message and exit. + * init Configure bot; create crew; add user to crew by scanning a QR code. + """ + ) +