| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- from unittest import skipIf
- from django.conf import settings
- from django.core.exceptions import ImproperlyConfigured
- from django.test import Client, TestCase, override_settings
- from django.urls import reverse
- from extras.registry import registry
- from extras.tests.dummy_plugin import config as dummy_config
- from netbox.graphql.schema import Query
- @skipIf('extras.tests.dummy_plugin' not in settings.PLUGINS, "dummy_plugin not in settings.PLUGINS")
- class PluginTest(TestCase):
- def test_config(self):
- self.assertIn('extras.tests.dummy_plugin.DummyPluginConfig', settings.INSTALLED_APPS)
- def test_models(self):
- from extras.tests.dummy_plugin.models import DummyModel
- # Test saving an instance
- instance = DummyModel(name='Instance 1', number=100)
- instance.save()
- self.assertIsNotNone(instance.pk)
- # Test deleting an instance
- instance.delete()
- self.assertIsNone(instance.pk)
- def test_admin(self):
- # Test admin view URL resolution
- url = reverse('admin:dummy_plugin_dummymodel_add')
- self.assertEqual(url, '/admin/dummy_plugin/dummymodel/add/')
- def test_views(self):
- # Test URL resolution
- url = reverse('plugins:dummy_plugin:dummy_models')
- self.assertEqual(url, '/plugins/dummy-plugin/models/')
- # Test GET request
- client = Client()
- response = client.get(url)
- self.assertEqual(response.status_code, 200)
- @override_settings(EXEMPT_VIEW_PERMISSIONS=['*'])
- def test_api_views(self):
- # Test URL resolution
- url = reverse('plugins-api:dummy_plugin-api:dummymodel-list')
- self.assertEqual(url, '/api/plugins/dummy-plugin/dummy-models/')
- # Test GET request
- client = Client()
- response = client.get(url)
- self.assertEqual(response.status_code, 200)
- def test_menu_items(self):
- """
- Check that plugin MenuItems and MenuButtons are registered.
- """
- self.assertIn('Dummy plugin', registry['plugins']['menu_items'])
- menu_items = registry['plugins']['menu_items']['Dummy plugin']
- self.assertEqual(len(menu_items), 2)
- self.assertEqual(len(menu_items[0].buttons), 2)
- def test_template_extensions(self):
- """
- Check that plugin TemplateExtensions are registered.
- """
- from extras.tests.dummy_plugin.template_content import SiteContent
- self.assertIn(SiteContent, registry['plugins']['template_extensions']['dcim.site'])
- def test_user_preferences(self):
- """
- Check that plugin UserPreferences are registered.
- """
- self.assertIn('dummy_plugin', registry['plugins']['preferences'])
- user_preferences = registry['plugins']['preferences']['dummy_plugin']
- self.assertEqual(type(user_preferences), dict)
- self.assertEqual(list(user_preferences.keys()), ['pref1', 'pref2'])
- def test_middleware(self):
- """
- Check that plugin middleware is registered.
- """
- self.assertIn('extras.tests.dummy_plugin.middleware.DummyMiddleware', settings.MIDDLEWARE)
- def test_queues(self):
- """
- Check that plugin queues are registered with the accurate name.
- """
- self.assertIn('extras.tests.dummy_plugin.testing-low', settings.RQ_QUEUES)
- self.assertIn('extras.tests.dummy_plugin.testing-medium', settings.RQ_QUEUES)
- self.assertIn('extras.tests.dummy_plugin.testing-high', settings.RQ_QUEUES)
- def test_min_version(self):
- """
- Check enforcement of minimum NetBox version.
- """
- with self.assertRaises(ImproperlyConfigured):
- dummy_config.validate({}, '0.9')
- def test_max_version(self):
- """
- Check enforcement of maximum NetBox version.
- """
- with self.assertRaises(ImproperlyConfigured):
- dummy_config.validate({}, '10.0')
- def test_required_settings(self):
- """
- Validate enforcement of required settings.
- """
- class DummyConfigWithRequiredSettings(dummy_config):
- required_settings = ['foo']
- # Validation should pass when all required settings are present
- DummyConfigWithRequiredSettings.validate({'foo': True}, settings.VERSION)
- # Validation should fail when a required setting is missing
- with self.assertRaises(ImproperlyConfigured):
- DummyConfigWithRequiredSettings.validate({}, settings.VERSION)
- def test_default_settings(self):
- """
- Validate population of default config settings.
- """
- class DummyConfigWithDefaultSettings(dummy_config):
- default_settings = {
- 'bar': 123,
- }
- # Populate the default value if setting has not been specified
- user_config = {}
- DummyConfigWithDefaultSettings.validate(user_config, settings.VERSION)
- self.assertEqual(user_config['bar'], 123)
- # Don't overwrite specified values
- user_config = {'bar': 456}
- DummyConfigWithDefaultSettings.validate(user_config, settings.VERSION)
- self.assertEqual(user_config['bar'], 456)
- def test_graphql(self):
- """
- Validate the registration and operation of plugin-provided GraphQL schemas.
- """
- from extras.tests.dummy_plugin.graphql import DummyQuery
- self.assertIn(DummyQuery, registry['plugins']['graphql_schemas'])
- self.assertTrue(issubclass(Query, DummyQuery))
|