test_views.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import base64
  2. from django.urls import reverse
  3. from dcim.models import Device, DeviceRole, DeviceType, Manufacturer, Site
  4. from secrets.models import Secret, SecretRole, SessionKey, UserKey
  5. from utilities.testing import StandardTestCases
  6. from .constants import PRIVATE_KEY, PUBLIC_KEY
  7. class SecretRoleTestCase(StandardTestCases.Views):
  8. model = SecretRole
  9. # Disable inapplicable tests
  10. test_get_object = None
  11. test_delete_object = None
  12. test_bulk_edit_objects = None
  13. @classmethod
  14. def setUpTestData(cls):
  15. SecretRole.objects.bulk_create([
  16. SecretRole(name='Secret Role 1', slug='secret-role-1'),
  17. SecretRole(name='Secret Role 2', slug='secret-role-2'),
  18. SecretRole(name='Secret Role 3', slug='secret-role-3'),
  19. ])
  20. cls.form_data = {
  21. 'name': 'Secret Role X',
  22. 'slug': 'secret-role-x',
  23. 'description': 'A secret role',
  24. 'users': [],
  25. 'groups': [],
  26. }
  27. cls.csv_data = (
  28. "name,slug",
  29. "Secret Role 4,secret-role-4",
  30. "Secret Role 5,secret-role-5",
  31. "Secret Role 6,secret-role-6",
  32. )
  33. class SecretTestCase(StandardTestCases.Views):
  34. model = Secret
  35. # Disable inapplicable tests
  36. test_create_object = None
  37. # TODO: Check permissions enforcement on secrets.views.secret_edit
  38. test_edit_object = None
  39. @classmethod
  40. def setUpTestData(cls):
  41. site = Site.objects.create(name='Site 1', slug='site-1')
  42. manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
  43. devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1')
  44. devicerole = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1')
  45. devices = (
  46. Device(name='Device 1', site=site, device_type=devicetype, device_role=devicerole),
  47. Device(name='Device 2', site=site, device_type=devicetype, device_role=devicerole),
  48. Device(name='Device 3', site=site, device_type=devicetype, device_role=devicerole),
  49. )
  50. Device.objects.bulk_create(devices)
  51. secretroles = (
  52. SecretRole(name='Secret Role 1', slug='secret-role-1'),
  53. SecretRole(name='Secret Role 2', slug='secret-role-2'),
  54. )
  55. SecretRole.objects.bulk_create(secretroles)
  56. # Create one secret per device to allow bulk-editing of names (which must be unique per device/role)
  57. Secret.objects.bulk_create((
  58. Secret(device=devices[0], role=secretroles[0], name='Secret 1', ciphertext=b'1234567890'),
  59. Secret(device=devices[1], role=secretroles[0], name='Secret 2', ciphertext=b'1234567890'),
  60. Secret(device=devices[2], role=secretroles[0], name='Secret 3', ciphertext=b'1234567890'),
  61. ))
  62. cls.form_data = {
  63. 'device': devices[1].pk,
  64. 'role': secretroles[1].pk,
  65. 'name': 'Secret X',
  66. }
  67. cls.bulk_edit_data = {
  68. 'role': secretroles[1].pk,
  69. 'name': 'New name',
  70. }
  71. def setUp(self):
  72. super().setUp()
  73. # Set up a master key for the test user
  74. userkey = UserKey(user=self.user, public_key=PUBLIC_KEY)
  75. userkey.save()
  76. master_key = userkey.get_master_key(PRIVATE_KEY)
  77. self.session_key = SessionKey(userkey=userkey)
  78. self.session_key.save(master_key)
  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)