test_views.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. import base64
  2. from django.test import override_settings
  3. from django.urls import reverse
  4. from dcim.models import Device, DeviceRole, DeviceType, Manufacturer, Site
  5. from secrets.models import Secret, SecretRole, SessionKey, UserKey
  6. from utilities.testing import ViewTestCases
  7. from .constants import PRIVATE_KEY, PUBLIC_KEY
  8. class SecretRoleTestCase(ViewTestCases.OrganizationalObjectViewTestCase):
  9. model = SecretRole
  10. @classmethod
  11. def setUpTestData(cls):
  12. SecretRole.objects.bulk_create([
  13. SecretRole(name='Secret Role 1', slug='secret-role-1'),
  14. SecretRole(name='Secret Role 2', slug='secret-role-2'),
  15. SecretRole(name='Secret Role 3', slug='secret-role-3'),
  16. ])
  17. cls.form_data = {
  18. 'name': 'Secret Role X',
  19. 'slug': 'secret-role-x',
  20. 'description': 'A secret role',
  21. }
  22. cls.csv_data = (
  23. "name,slug",
  24. "Secret Role 4,secret-role-4",
  25. "Secret Role 5,secret-role-5",
  26. "Secret Role 6,secret-role-6",
  27. )
  28. cls.bulk_edit_data = {
  29. 'description': 'New description',
  30. }
  31. # TODO: Change base class to PrimaryObjectViewTestCase
  32. class SecretTestCase(
  33. ViewTestCases.GetObjectViewTestCase,
  34. ViewTestCases.GetObjectChangelogViewTestCase,
  35. ViewTestCases.DeleteObjectViewTestCase,
  36. ViewTestCases.ListObjectsViewTestCase,
  37. ViewTestCases.BulkEditObjectsViewTestCase,
  38. ViewTestCases.BulkDeleteObjectsViewTestCase
  39. ):
  40. model = Secret
  41. @classmethod
  42. def setUpTestData(cls):
  43. site = Site.objects.create(name='Site 1', slug='site-1')
  44. manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
  45. devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1')
  46. devicerole = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1')
  47. devices = (
  48. Device(name='Device 1', site=site, device_type=devicetype, device_role=devicerole),
  49. Device(name='Device 2', site=site, device_type=devicetype, device_role=devicerole),
  50. Device(name='Device 3', site=site, device_type=devicetype, device_role=devicerole),
  51. )
  52. Device.objects.bulk_create(devices)
  53. secretroles = (
  54. SecretRole(name='Secret Role 1', slug='secret-role-1'),
  55. SecretRole(name='Secret Role 2', slug='secret-role-2'),
  56. )
  57. SecretRole.objects.bulk_create(secretroles)
  58. # Create one secret per device to allow bulk-editing of names (which must be unique per device/role)
  59. Secret.objects.bulk_create((
  60. Secret(assigned_object=devices[0], role=secretroles[0], name='Secret 1', ciphertext=b'1234567890'),
  61. Secret(assigned_object=devices[1], role=secretroles[0], name='Secret 2', ciphertext=b'1234567890'),
  62. Secret(assigned_object=devices[2], role=secretroles[0], name='Secret 3', ciphertext=b'1234567890'),
  63. ))
  64. cls.form_data = {
  65. 'assigned_object_type': 'dcim.device',
  66. 'assigned_object_id': devices[1].pk,
  67. 'role': secretroles[1].pk,
  68. 'name': 'Secret X',
  69. }
  70. cls.bulk_edit_data = {
  71. 'role': secretroles[1].pk,
  72. 'name': 'New name',
  73. }
  74. def setUp(self):
  75. super().setUp()
  76. # Set up a master key for the test user
  77. userkey = UserKey(user=self.user, public_key=PUBLIC_KEY)
  78. userkey.save()
  79. master_key = userkey.get_master_key(PRIVATE_KEY)
  80. self.session_key = SessionKey(userkey=userkey)
  81. self.session_key.save(master_key)
  82. @override_settings(EXEMPT_VIEW_PERMISSIONS=['*'])
  83. def test_import_objects(self):
  84. self.add_permissions('secrets.add_secret')
  85. device = Device.objects.get(name='Device 1')
  86. csv_data = (
  87. "device,role,name,plaintext",
  88. f"{device.name},Secret Role 1,Secret 4,abcdefghij",
  89. f"{device.name},Secret Role 1,Secret 5,abcdefghij",
  90. f"{device.name},Secret Role 1,Secret 6,abcdefghij",
  91. )
  92. # Set the session_key cookie on the request
  93. session_key = base64.b64encode(self.session_key.key).decode('utf-8')
  94. self.client.cookies['session_key'] = session_key
  95. response = self.client.post(reverse('secrets:secret_import'), {'csv': '\n'.join(csv_data)})
  96. self.assertHttpStatus(response, 200)
  97. self.assertEqual(Secret.objects.count(), 6)