test_scripts.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. from django.core.files.uploadedfile import SimpleUploadedFile
  2. from django.test import TestCase
  3. from netaddr import IPNetwork
  4. from dcim.models import DeviceRole
  5. from extras.scripts import *
  6. class ScriptVariablesTest(TestCase):
  7. def test_stringvar(self):
  8. class TestScript(Script):
  9. var1 = StringVar(
  10. min_length=3,
  11. max_length=3,
  12. regex=r'[a-z]+'
  13. )
  14. # Validate min_length enforcement
  15. data = {'var1': 'xx'}
  16. form = TestScript().as_form(data, None)
  17. self.assertFalse(form.is_valid())
  18. self.assertIn('var1', form.errors)
  19. # Validate max_length enforcement
  20. data = {'var1': 'xxxx'}
  21. form = TestScript().as_form(data, None)
  22. self.assertFalse(form.is_valid())
  23. self.assertIn('var1', form.errors)
  24. # Validate regex enforcement
  25. data = {'var1': 'ABC'}
  26. form = TestScript().as_form(data, None)
  27. self.assertFalse(form.is_valid())
  28. self.assertIn('var1', form.errors)
  29. # Validate valid data
  30. data = {'var1': 'abc'}
  31. form = TestScript().as_form(data, None)
  32. self.assertTrue(form.is_valid())
  33. self.assertEqual(form.cleaned_data['var1'], data['var1'])
  34. def test_textvar(self):
  35. class TestScript(Script):
  36. var1 = TextVar()
  37. # Validate valid data
  38. data = {'var1': 'This is a test string'}
  39. form = TestScript().as_form(data, None)
  40. self.assertTrue(form.is_valid())
  41. self.assertEqual(form.cleaned_data['var1'], data['var1'])
  42. def test_integervar(self):
  43. class TestScript(Script):
  44. var1 = IntegerVar(
  45. min_value=5,
  46. max_value=10
  47. )
  48. # Validate min_value enforcement
  49. data = {'var1': 4}
  50. form = TestScript().as_form(data, None)
  51. self.assertFalse(form.is_valid())
  52. self.assertIn('var1', form.errors)
  53. # Validate max_value enforcement
  54. data = {'var1': 11}
  55. form = TestScript().as_form(data, None)
  56. self.assertFalse(form.is_valid())
  57. self.assertIn('var1', form.errors)
  58. # Validate valid data
  59. data = {'var1': 7}
  60. form = TestScript().as_form(data, None)
  61. self.assertTrue(form.is_valid())
  62. self.assertEqual(form.cleaned_data['var1'], data['var1'])
  63. def test_booleanvar(self):
  64. class TestScript(Script):
  65. var1 = BooleanVar()
  66. # Validate True
  67. data = {'var1': True}
  68. form = TestScript().as_form(data, None)
  69. self.assertTrue(form.is_valid())
  70. self.assertEqual(form.cleaned_data['var1'], True)
  71. # Validate False
  72. data = {'var1': False}
  73. form = TestScript().as_form(data, None)
  74. self.assertTrue(form.is_valid())
  75. self.assertEqual(form.cleaned_data['var1'], False)
  76. def test_objectvar(self):
  77. class TestScript(Script):
  78. var1 = ObjectVar(
  79. queryset=DeviceRole.objects.all()
  80. )
  81. # Populate some objects
  82. for i in range(1, 6):
  83. DeviceRole(
  84. name='Device Role {}'.format(i),
  85. slug='device-role-{}'.format(i)
  86. ).save()
  87. # Validate valid data
  88. data = {'var1': DeviceRole.objects.first().pk}
  89. form = TestScript().as_form(data, None)
  90. self.assertTrue(form.is_valid())
  91. self.assertEqual(form.cleaned_data['var1'].pk, data['var1'])
  92. def test_multiobjectvar(self):
  93. class TestScript(Script):
  94. var1 = MultiObjectVar(
  95. queryset=DeviceRole.objects.all()
  96. )
  97. # Populate some objects
  98. for i in range(1, 6):
  99. DeviceRole(
  100. name='Device Role {}'.format(i),
  101. slug='device-role-{}'.format(i)
  102. ).save()
  103. # Validate valid data
  104. data = {'var1': [role.pk for role in DeviceRole.objects.all()[:3]]}
  105. form = TestScript().as_form(data, None)
  106. self.assertTrue(form.is_valid())
  107. self.assertEqual(form.cleaned_data['var1'][0].pk, data['var1'][0])
  108. self.assertEqual(form.cleaned_data['var1'][1].pk, data['var1'][1])
  109. self.assertEqual(form.cleaned_data['var1'][2].pk, data['var1'][2])
  110. def test_filevar(self):
  111. class TestScript(Script):
  112. var1 = FileVar()
  113. # Dummy file
  114. testfile = SimpleUploadedFile(
  115. name='test_file.txt',
  116. content=b'This is a dummy file for testing'
  117. )
  118. # Validate valid data
  119. file_data = {'var1': testfile}
  120. form = TestScript().as_form(None, file_data)
  121. self.assertTrue(form.is_valid())
  122. self.assertEqual(form.cleaned_data['var1'], testfile)
  123. def test_ipnetworkvar(self):
  124. class TestScript(Script):
  125. var1 = IPNetworkVar()
  126. # Validate IP network enforcement
  127. data = {'var1': '1.2.3'}
  128. form = TestScript().as_form(data, None)
  129. self.assertFalse(form.is_valid())
  130. self.assertIn('var1', form.errors)
  131. # Validate valid data
  132. data = {'var1': '192.0.2.0/24'}
  133. form = TestScript().as_form(data, None)
  134. self.assertTrue(form.is_valid())
  135. self.assertEqual(form.cleaned_data['var1'], IPNetwork(data['var1']))