| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- from django.test import TestCase
- from core.models import ObjectType
- from dcim.models import Device, Site
- from netbox.registry import registry
- from users.forms.model_forms import ObjectPermissionForm
- from users.models import ObjectPermission
- from utilities.permissions import ModelAction, register_model_actions
- from virtualization.models import VirtualMachine
- class ModelActionTest(TestCase):
- def test_hash(self):
- action1 = ModelAction(name='sync')
- action2 = ModelAction(name='sync', help_text='Different help')
- self.assertEqual(hash(action1), hash(action2))
- def test_equality_with_model_action(self):
- action1 = ModelAction(name='sync')
- action2 = ModelAction(name='sync', help_text='Different help')
- action3 = ModelAction(name='merge')
- self.assertEqual(action1, action2)
- self.assertNotEqual(action1, action3)
- def test_equality_with_string(self):
- action = ModelAction(name='sync')
- self.assertEqual(action, 'sync')
- self.assertNotEqual(action, 'merge')
- def test_usable_in_set(self):
- action1 = ModelAction(name='sync')
- action2 = ModelAction(name='sync', help_text='Different')
- action3 = ModelAction(name='merge')
- actions = {action1, action2, action3}
- self.assertEqual(len(actions), 2)
- class RegisterModelActionsTest(TestCase):
- def setUp(self):
- self.original_actions = dict(registry['model_actions'])
- def tearDown(self):
- registry['model_actions'].clear()
- registry['model_actions'].update(self.original_actions)
- def test_register_model_action_objects(self):
- register_model_actions(Site, [
- ModelAction('test_action', help_text='Test help'),
- ])
- actions = registry['model_actions']['dcim.site']
- self.assertEqual(len(actions), 1)
- self.assertEqual(actions[0].name, 'test_action')
- self.assertEqual(actions[0].help_text, 'Test help')
- def test_register_string_actions(self):
- register_model_actions(Site, ['action1', 'action2'])
- actions = registry['model_actions']['dcim.site']
- self.assertEqual(len(actions), 2)
- self.assertIsInstance(actions[0], ModelAction)
- self.assertEqual(actions[0].name, 'action1')
- self.assertEqual(actions[1].name, 'action2')
- def test_register_mixed_actions(self):
- register_model_actions(Site, [
- ModelAction('with_help', help_text='Has help'),
- 'without_help',
- ])
- actions = registry['model_actions']['dcim.site']
- self.assertEqual(len(actions), 2)
- self.assertEqual(actions[0].help_text, 'Has help')
- self.assertEqual(actions[1].help_text, '')
- def test_multiple_registrations_append(self):
- register_model_actions(Site, [ModelAction('first')])
- register_model_actions(Site, [ModelAction('second')])
- actions = registry['model_actions']['dcim.site']
- self.assertEqual(len(actions), 2)
- self.assertEqual(actions[0].name, 'first')
- self.assertEqual(actions[1].name, 'second')
- class ObjectPermissionFormTest(TestCase):
- def setUp(self):
- self.original_actions = dict(registry['model_actions'])
- def tearDown(self):
- registry['model_actions'].clear()
- registry['model_actions'].update(self.original_actions)
- def test_shared_action_preselection(self):
- register_model_actions(Device, [ModelAction('render_config')])
- register_model_actions(VirtualMachine, [ModelAction('render_config')])
- device_ct = ObjectType.objects.get_for_model(Device)
- vm_ct = ObjectType.objects.get_for_model(VirtualMachine)
- permission = ObjectPermission.objects.create(
- name='Test Permission',
- actions=['view', 'render_config'],
- )
- permission.object_types.set([device_ct, vm_ct])
- form = ObjectPermissionForm(instance=permission)
- initial = form.fields['registered_actions'].initial
- self.assertIn('dcim.device.render_config', initial)
- self.assertIn('virtualization.virtualmachine.render_config', initial)
- # Should not leak into the additional actions field
- self.assertEqual(form.initial['actions'], [])
- permission.delete()
|