test_views.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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. # TODO: Change base class to PrimaryObjectViewTestCase
  29. class SecretTestCase(
  30. ViewTestCases.GetObjectViewTestCase,
  31. ViewTestCases.GetObjectChangelogViewTestCase,
  32. ViewTestCases.DeleteObjectViewTestCase,
  33. ViewTestCases.ListObjectsViewTestCase,
  34. ViewTestCases.BulkEditObjectsViewTestCase,
  35. ViewTestCases.BulkDeleteObjectsViewTestCase
  36. ):
  37. model = Secret
  38. @classmethod
  39. def setUpTestData(cls):
  40. site = Site.objects.create(name='Site 1', slug='site-1')
  41. manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
  42. devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1')
  43. devicerole = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1')
  44. devices = (
  45. Device(name='Device 1', site=site, device_type=devicetype, device_role=devicerole),
  46. Device(name='Device 2', site=site, device_type=devicetype, device_role=devicerole),
  47. Device(name='Device 3', site=site, device_type=devicetype, device_role=devicerole),
  48. )
  49. Device.objects.bulk_create(devices)
  50. secretroles = (
  51. SecretRole(name='Secret Role 1', slug='secret-role-1'),
  52. SecretRole(name='Secret Role 2', slug='secret-role-2'),
  53. )
  54. SecretRole.objects.bulk_create(secretroles)
  55. # Create one secret per device to allow bulk-editing of names (which must be unique per device/role)
  56. Secret.objects.bulk_create((
  57. Secret(device=devices[0], role=secretroles[0], name='Secret 1', ciphertext=b'1234567890'),
  58. Secret(device=devices[1], role=secretroles[0], name='Secret 2', ciphertext=b'1234567890'),
  59. Secret(device=devices[2], role=secretroles[0], name='Secret 3', ciphertext=b'1234567890'),
  60. ))
  61. cls.form_data = {
  62. 'device': devices[1].pk,
  63. 'role': secretroles[1].pk,
  64. 'name': 'Secret X',
  65. }
  66. cls.bulk_edit_data = {
  67. 'role': secretroles[1].pk,
  68. 'name': 'New name',
  69. }
  70. def setUp(self):
  71. super().setUp()
  72. # Set up a master key for the test user
  73. userkey = UserKey(user=self.user, public_key=PUBLIC_KEY)
  74. userkey.save()
  75. master_key = userkey.get_master_key(PRIVATE_KEY)
  76. self.session_key = SessionKey(userkey=userkey)
  77. self.session_key.save(master_key)
  78. @override_settings(EXEMPT_VIEW_PERMISSIONS=['*'])
  79. def test_import_objects(self):
  80. self.add_permissions('secrets.add_secret')
  81. csv_data = (
  82. "device,role,name,plaintext",
  83. "Device 1,Secret Role 1,Secret 4,abcdefghij",
  84. "Device 1,Secret Role 1,Secret 5,abcdefghij",
  85. "Device 1,Secret Role 1,Secret 6,abcdefghij",
  86. )
  87. # Set the session_key cookie on the request
  88. session_key = base64.b64encode(self.session_key.key).decode('utf-8')
  89. self.client.cookies['session_key'] = session_key
  90. response = self.client.post(reverse('secrets:secret_import'), {'csv': '\n'.join(csv_data)})
  91. self.assertHttpStatus(response, 200)
  92. self.assertEqual(Secret.objects.count(), 6)