diff --git a/app/plugins/functions.py b/app/plugins/functions.py index 34a96c45..9b2f99c0 100644 --- a/app/plugins/functions.py +++ b/app/plugins/functions.py @@ -27,6 +27,11 @@ def sync_plugin_db(): Creates db entries for undiscovered plugins to keep track of enabled/disabled plugins """ + + # Erase cache + global plugins + plugins = None + db_plugins = Plugin.objects.all() fs_plugins = get_plugins() diff --git a/app/tests/test_plugins.py b/app/tests/test_plugins.py index 63617acb..fa7ae981 100644 --- a/app/tests/test_plugins.py +++ b/app/tests/test_plugins.py @@ -1,13 +1,16 @@ import os +import shutil from django.contrib.auth.models import User from django.test import Client from rest_framework import status +from app.models import Plugin from app.models import Project from app.models import Task from app.plugins import UserDataStore from app.plugins import get_plugin_by_name +from app.plugins import sync_plugin_db from app.plugins.data_store import InvalidDataStoreValue from .classes import BootTestCase from app.plugins.grass_engine import grass, GrassEngineException @@ -185,3 +188,59 @@ class TestPlugins(BootTestCase): # Invalid types self.assertRaises(InvalidDataStoreValue, uds.set_bool, 'invalidbool', 5) + def test_toggle_plugins(self): + c = Client() + c.login(username='testuser', password='test1234') + + # Cannot toggle plugins as normal user + res = c.get('/admin/app/plugin/test/disable/', follow=True) + self.assertRedirects(res, '/admin/login/?next=/admin/app/plugin/test/disable/') + + c.login(username='testsuperuser', password='test1234') + + # Test plugin is enabled + res = c.get('/admin/app/plugin/') + self.assertContains(res, 'Enable') + self.assertContains(res, "") + + # Disable + res = c.get('/admin/app/plugin/test/disable/', follow=True) + self.assertEqual(res.status_code, status.HTTP_200_OK) + + # Test active vs. non-active flag for get_plugin_by_name + self.assertTrue(get_plugin_by_name("test") is None) + self.assertFalse(get_plugin_by_name("test", only_active=False) is None) + + # Test plugin has been disabled + self.assertContains(res, 'Disable') + self.assertNotContains(res, "") + + # Re-enable + res = c.get('/admin/app/plugin/test/enable/', follow=True) + self.assertEqual(res.status_code, status.HTTP_200_OK) + + + def test_plugin_functions(self): + # Check db/fs syncing + if os.path.exists('plugins/test_copy'): + print("Removing plugins/test_copy") + shutil.rmtree('plugins/test_copy') + + sync_plugin_db() + self.assertTrue(Plugin.objects.filter(pk='test_copy').count() == 0) + + shutil.copytree('plugins/test', 'plugins/test_copy') + + sync_plugin_db() + self.assertTrue(Plugin.objects.filter(pk='test_copy').count() == 1) + + shutil.rmtree('plugins/test_copy') + sync_plugin_db() + self.assertTrue(Plugin.objects.filter(pk='test_copy').count() == 0) + + # Get manifest works and parses JSON + p = get_plugin_by_name("test") + self.assertEqual(p.get_manifest()['author'], "Piero Toffanin") + + +