mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
85 lines
2 KiB
Python
85 lines
2 KiB
Python
import os
|
|
import pytest
|
|
|
|
import moulinette
|
|
from moulinette import m18n, Moulinette
|
|
from yunohost.utils.error import YunohostError
|
|
from contextlib import contextmanager
|
|
|
|
|
|
@pytest.fixture(scope="session", autouse=True)
|
|
def clone_test_app(request):
|
|
cwd = os.path.split(os.path.realpath(__file__))[0]
|
|
|
|
if not os.path.exists(cwd + "/apps"):
|
|
os.system("git clone https://github.com/YunoHost/test_apps %s/apps" % cwd)
|
|
else:
|
|
os.system("cd %s/apps && git pull > /dev/null 2>&1" % cwd)
|
|
|
|
|
|
def get_test_apps_dir():
|
|
cwd = os.path.split(os.path.realpath(__file__))[0]
|
|
return os.path.join(cwd, "apps")
|
|
|
|
|
|
@contextmanager
|
|
def message(mocker, key, **kwargs):
|
|
mocker.spy(m18n, "n")
|
|
yield
|
|
m18n.n.assert_any_call(key, **kwargs)
|
|
|
|
|
|
@contextmanager
|
|
def raiseYunohostError(mocker, key, **kwargs):
|
|
with pytest.raises(YunohostError) as e_info:
|
|
yield
|
|
assert e_info._excinfo[1].key == key
|
|
if kwargs:
|
|
assert e_info._excinfo[1].kwargs == kwargs
|
|
|
|
|
|
def pytest_addoption(parser):
|
|
parser.addoption("--yunodebug", action="store_true", default=False)
|
|
|
|
|
|
#
|
|
# Tweak translator to raise exceptions if string keys are not defined #
|
|
#
|
|
|
|
|
|
old_translate = moulinette.core.Translator.translate
|
|
|
|
|
|
def new_translate(self, key, *args, **kwargs):
|
|
if key not in self._translations[self.default_locale].keys():
|
|
raise KeyError("Unable to retrieve key %s for default locale !" % key)
|
|
|
|
return old_translate(self, key, *args, **kwargs)
|
|
|
|
|
|
moulinette.core.Translator.translate = new_translate
|
|
|
|
|
|
#
|
|
# Init the moulinette to have the cli loggers stuff #
|
|
#
|
|
|
|
|
|
def pytest_cmdline_main(config):
|
|
import sys
|
|
|
|
sys.path.insert(0, "/usr/lib/moulinette/")
|
|
import yunohost
|
|
|
|
yunohost.init(debug=config.option.yunodebug)
|
|
|
|
class DummyInterface:
|
|
type = "cli"
|
|
|
|
def prompt(self, *args, **kwargs):
|
|
raise NotImplementedError
|
|
|
|
def display(self, message, *args, **kwargs):
|
|
print(message)
|
|
|
|
Moulinette._interface = DummyInterface()
|