Mercurial > libervia-backend
changeset 3623:495184d00360
tests: unit tests preparation with some fixtures
author | Goffi <goffi@goffi.org> |
---|---|
date | Mon, 02 Aug 2021 21:52:17 +0200 |
parents | d4cb99e7e838 |
children | fe9cb52f4a9c |
files | tests/unit/__init__.py tests/unit/conftest.py |
diffstat | 1 files changed, 117 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/unit/conftest.py Mon Aug 02 21:52:17 2021 +0200 @@ -0,0 +1,117 @@ +#!/usr/bin/env python3 + +# Libervia: an XMPP client +# Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org) + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. + +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +from contextlib import contextmanager +from unittest.mock import MagicMock, AsyncMock +from pytest import fixture +from twisted.internet import defer +from twisted.words.protocols.jabber import jid +from sat.core.sat_main import SAT +from sat.tools import async_trigger as trigger +from sat.core import xmpp + + +@fixture(scope="session") +def bridge(): + bridge = AsyncMock() + bridge.addSignal = MagicMock() + bridge.addMethod = MagicMock() + return bridge + + +@fixture(scope="session") +def storage(): + return AsyncMock() + + +class MockSAT(SAT): + + def __init__(self, bridge, storage): + self._cb_map = {} + self._menus = {} + self._menus_paths = {} + self._test_config = {} + self.profiles = {} + self.plugins = {} + # map for short name to whole namespace, + # extended by plugins with registerNamespace + self.ns_map = { + "x-data": xmpp.NS_X_DATA, + "disco#info": xmpp.NS_DISCO_INFO, + } + self.memory = MagicMock() + self.memory.storage = storage + self.memory.getConfig.side_effect = self.get_test_config + + self.trigger = trigger.TriggerManager() + self.bridge = bridge + defer.ensureDeferred(self._postInit()) + self.common_cache = AsyncMock() + self._import_plugins() + self._addBaseMenus() + self.initialised = defer.Deferred() + self.initialised.callback(None) + + def get_test_config(self, section, name, default=None): + return self._test_config.get((section or None, name), default) + + def set_test_config(self, section, name, value): + self._test_config[(section or None, name)] = value + + def clear_test_config(self): + self._test_config.clear() + + @contextmanager + def use_option_and_reload(self, section, name, value): + self.set_test_config(section, name, value) + self.reload_plugins() + try: + yield self + finally: + self.clear_test_config() + self.reload_plugins() + + def reload_plugins(self): + self.plugins.clear() + self.trigger._TriggerManager__triggers.clear() + self.ns_map = { + "x-data": xmpp.NS_X_DATA, + "disco#info": xmpp.NS_DISCO_INFO, + } + self._import_plugins() + + def _init(self): + pass + + async def _postInit(self): + pass + + +@fixture(scope="session") +def host(bridge, storage): + host = MockSAT(bridge=bridge, storage=storage) + return host + + +@fixture +def client(): + client = MagicMock() + client.jid = jid.JID("test_user@test.example/123") + client.pubsub_service = jid.JID("pubsub.test.example") + client.pubsub_client = AsyncMock() + return client