Skip to content

Commit

Permalink
Update tests to account for registry finickiness.
Browse files Browse the repository at this point in the history
  • Loading branch information
rtibbles committed Dec 18, 2021
1 parent f7bead5 commit ff579e9
Show file tree
Hide file tree
Showing 3 changed files with 124 additions and 94 deletions.
89 changes: 0 additions & 89 deletions kolibri/utils/tests/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import pytest
from mock import patch

from kolibri.plugins.utils import autoremove_unavailable_plugins
from kolibri.utils import cli
from kolibri.utils import options

Expand Down Expand Up @@ -52,94 +51,6 @@ def plugins():
plugins.conf_file = old_config_file


def test_bogus_plugin_autoremove(plugins):
"""
Checks that a plugin is auto-removed when it cannot be imported
"""
plugin_name = "giraffe.horse"
plugins.config["INSTALLED_PLUGINS"].add(plugin_name)
plugins.config.save()
autoremove_unavailable_plugins()
assert plugin_name not in plugins.config["INSTALLED_PLUGINS"]


def test_bogus_plugin_autoremove_no_path(plugins):
"""
Checks that a plugin without a dotted path is also auto-removed
"""
plugin_name = "giraffehorse"
plugins.config["INSTALLED_PLUGINS"].add(plugin_name)
plugins.config.save()
autoremove_unavailable_plugins()
assert plugin_name not in plugins.config["INSTALLED_PLUGINS"]


def test_bogus_plugin_disable(plugins):
installed_apps_before = plugins.config["INSTALLED_PLUGINS"].copy()
disabled_apps_before = plugins.config["DISABLED_PLUGINS"].copy()
try:
cli.disable.callback(("i_do_not_exist",), False)
except Exception:
pass
assert installed_apps_before == plugins.config["INSTALLED_PLUGINS"]
assert disabled_apps_before == plugins.config["DISABLED_PLUGINS"]


def test_plugin_cannot_be_imported_disable(plugins):
"""
A plugin may be in plugins.config['INSTALLED_PLUGINS'] but broken or uninstalled
"""
plugin_name = "giraffe.horse"
plugins.config["INSTALLED_PLUGINS"].add(plugin_name)
plugins.config.save()
try:
cli.disable.callback((plugin_name,), False)
except Exception:
pass
assert plugin_name not in plugins.config["INSTALLED_PLUGINS"]
# We also don't want to endlessly add cruft to the disabled apps
assert plugin_name not in plugins.config["DISABLED_PLUGINS"]


def test_real_plugin_disable(plugins):
installed_apps_before = plugins.config["INSTALLED_PLUGINS"].copy()
test_plugin = "kolibri.plugins.media_player"
assert test_plugin in installed_apps_before
# Because RIP example plugin
cli.disable.callback((test_plugin,), False)
assert test_plugin not in plugins.config["INSTALLED_PLUGINS"]
assert test_plugin in plugins.config["DISABLED_PLUGINS"]


def test_real_plugin_disable_twice(plugins):
installed_apps_before = plugins.config["INSTALLED_PLUGINS"].copy()
test_plugin = "kolibri.plugins.media_player"
assert test_plugin in installed_apps_before
cli.disable.callback((test_plugin,), False)
assert test_plugin not in plugins.config.ACTIVE_PLUGINS
assert test_plugin not in plugins.config["INSTALLED_PLUGINS"]
assert test_plugin in plugins.config["DISABLED_PLUGINS"]
installed_apps_before = plugins.config["INSTALLED_PLUGINS"].copy()
cli.disable.callback((test_plugin,), False)
assert test_plugin not in plugins.config.ACTIVE_PLUGINS
assert test_plugin not in plugins.config["INSTALLED_PLUGINS"]
assert test_plugin in plugins.config["DISABLED_PLUGINS"]


def test_plugin_with_no_plugin_class(plugins):
"""
Expected behavior is that nothing blows up with exceptions, user just gets
a warning and nothing is enabled or changed in the configuration.
"""
# For fun, we pass in a system library
installed_apps_before = plugins.config["INSTALLED_PLUGINS"].copy()
try:
cli.enable.callback(("os.path",), False)
except Exception:
pass
assert installed_apps_before == plugins.config["INSTALLED_PLUGINS"]


@pytest.mark.django_db
def test_kolibri_listen_port_env(monkeypatch):
"""
Expand Down
17 changes: 12 additions & 5 deletions kolibri/utils/tests/test_main.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,10 @@
@patch("kolibri.utils.main.get_version", return_value="")
@patch("kolibri.utils.main.update")
@patch("kolibri.core.deviceadmin.utils.dbbackup")
def test_first_run(dbbackup, update, get_version, upgrades_after_django_setup):
@patch("kolibri.plugins.registry.is_initialized", return_value=False)
def test_first_run(
is_initialized, dbbackup, update, get_version, upgrades_after_django_setup
):
"""
Tests that the first_run() function performs as expected
"""
Expand All @@ -39,7 +42,8 @@ def test_first_run(dbbackup, update, get_version, upgrades_after_django_setup):
@patch("kolibri.utils.main._upgrades_after_django_setup")
@patch("kolibri.utils.main.get_version", return_value="0.0.1")
@patch("kolibri.utils.main.update")
def test_update(update, get_version, upgrades_after_django_setup):
@patch("kolibri.plugins.registry.is_initialized", return_value=False)
def test_update(is_initialized, update, get_version, upgrades_after_django_setup):
"""
Tests that update() function performs as expected
"""
Expand All @@ -49,7 +53,8 @@ def test_update(update, get_version, upgrades_after_django_setup):

@pytest.mark.django_db
@patch("kolibri.utils.main.get_version", return_value="0.0.1")
def test_update_exits_if_running(get_version):
@patch("kolibri.plugins.registry.is_initialized", return_value=False)
def test_update_exits_if_running(is_initialized, get_version):
"""
Tests that update() function performs as expected
"""
Expand Down Expand Up @@ -119,8 +124,9 @@ def test_conditional_backup():
@patch("kolibri.utils.main.get_version", return_value=kolibri.__version__)
@patch("kolibri.utils.main.update")
@patch("kolibri.core.deviceadmin.utils.dbbackup")
@patch("kolibri.plugins.registry.is_initialized", return_value=False)
def test_update_no_version_change(
dbbackup, update, get_version, upgrades_after_django_setup
is_initialized, dbbackup, update, get_version, upgrades_after_django_setup
):
"""
Tests that when the version doesn't change, we are not doing things we
Expand All @@ -134,8 +140,9 @@ def test_update_no_version_change(
@patch("kolibri.utils.main._upgrades_after_django_setup")
@patch("kolibri.utils.main._migrate_databases")
@patch("kolibri.utils.main.version_updated")
@patch("kolibri.plugins.registry.is_initialized", return_value=False)
def test_migrate_if_unmigrated(
version_updated, _migrate_databases, _upgrades_after_django_setup
is_initialized, version_updated, _migrate_databases, _upgrades_after_django_setup
):
# No matter what, ensure that version_updated returns False
version_updated.return_value = False
Expand Down
112 changes: 112 additions & 0 deletions test/test_cli_no_registry.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
"""
Tests for `kolibri.utils.cli` module.
"""
from __future__ import absolute_import
from __future__ import print_function

import tempfile

import pytest

from kolibri.plugins.utils import autoremove_unavailable_plugins
from kolibri.utils import cli


@pytest.fixture
def plugins():
from kolibri import plugins

_, config_file = tempfile.mkstemp(suffix="json")
old_config_file = plugins.conf_file
plugins.conf_file = config_file
plugins.config.set_defaults()
yield plugins
plugins.conf_file = old_config_file


def test_bogus_plugin_autoremove(plugins):
"""
Checks that a plugin is auto-removed when it cannot be imported
"""
plugin_name = "giraffe.horse"
plugins.config["INSTALLED_PLUGINS"].add(plugin_name)
plugins.config.save()
autoremove_unavailable_plugins()
assert plugin_name not in plugins.config["INSTALLED_PLUGINS"]


def test_bogus_plugin_autoremove_no_path(plugins):
"""
Checks that a plugin without a dotted path is also auto-removed
"""
plugin_name = "giraffehorse"
plugins.config["INSTALLED_PLUGINS"].add(plugin_name)
plugins.config.save()
autoremove_unavailable_plugins()
assert plugin_name not in plugins.config["INSTALLED_PLUGINS"]


def test_bogus_plugin_disable(plugins):
installed_apps_before = plugins.config["INSTALLED_PLUGINS"].copy()
disabled_apps_before = plugins.config["DISABLED_PLUGINS"].copy()
try:
cli.disable.callback(("i_do_not_exist",), False)
except Exception:
pass
assert installed_apps_before == plugins.config["INSTALLED_PLUGINS"]
assert disabled_apps_before == plugins.config["DISABLED_PLUGINS"]


def test_plugin_cannot_be_imported_disable(plugins):
"""
A plugin may be in plugins.config['INSTALLED_PLUGINS'] but broken or uninstalled
"""
plugin_name = "giraffe.horse"
plugins.config["INSTALLED_PLUGINS"].add(plugin_name)
plugins.config.save()
try:
cli.disable.callback((plugin_name,), False)
except Exception:
pass
assert plugin_name not in plugins.config["INSTALLED_PLUGINS"]
# We also don't want to endlessly add cruft to the disabled apps
assert plugin_name not in plugins.config["DISABLED_PLUGINS"]


def test_real_plugin_disable(plugins):
installed_apps_before = plugins.config["INSTALLED_PLUGINS"].copy()
test_plugin = "kolibri.plugins.media_player"
assert test_plugin in installed_apps_before
# Because RIP example plugin
cli.disable.callback((test_plugin,), False)
assert test_plugin not in plugins.config["INSTALLED_PLUGINS"]
assert test_plugin in plugins.config["DISABLED_PLUGINS"]


def test_real_plugin_disable_twice(plugins):
installed_apps_before = plugins.config["INSTALLED_PLUGINS"].copy()
test_plugin = "kolibri.plugins.media_player"
assert test_plugin in installed_apps_before
cli.disable.callback((test_plugin,), False)
assert test_plugin not in plugins.config.ACTIVE_PLUGINS
assert test_plugin not in plugins.config["INSTALLED_PLUGINS"]
assert test_plugin in plugins.config["DISABLED_PLUGINS"]
installed_apps_before = plugins.config["INSTALLED_PLUGINS"].copy()
cli.disable.callback((test_plugin,), False)
assert test_plugin not in plugins.config.ACTIVE_PLUGINS
assert test_plugin not in plugins.config["INSTALLED_PLUGINS"]
assert test_plugin in plugins.config["DISABLED_PLUGINS"]


def test_plugin_with_no_plugin_class(plugins):
"""
Expected behavior is that nothing blows up with exceptions, user just gets
a warning and nothing is enabled or changed in the configuration.
"""
# For fun, we pass in a system library
installed_apps_before = plugins.config["INSTALLED_PLUGINS"].copy()
try:
cli.enable.callback(("os.path",), False)
except Exception:
pass
assert installed_apps_before == plugins.config["INSTALLED_PLUGINS"]

0 comments on commit ff579e9

Please sign in to comment.