forked from missytake/team-bot
added first basic CLI test
This commit is contained in:
parent
398f8673ae
commit
defb4c10fd
84
tests/conftest.py
Normal file
84
tests/conftest.py
Normal file
|
@ -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
|
10
tests/test_cli.py
Normal file
10
tests/test_cli.py
Normal file
|
@ -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.
|
||||
"""
|
||||
)
|
||||
|
Loading…
Reference in a new issue