/qatrack/service_log/tests/test_models.py

https://bitbucket.org/tohccmedphys/qatrackplus · Python · 305 lines · 185 code · 98 blank · 22 comment · 20 complexity · 0ca9fd45eee9652f98d38d0da5f48c4c MD5 · raw file

  1. from django.conf import settings
  2. from django.db.models import ProtectedError
  3. from django.db.utils import IntegrityError
  4. from django.test import TestCase, TransactionTestCase
  5. from django.utils import timezone
  6. from qatrack.accounts.tests.utils import create_group, create_user
  7. from qatrack.qa.tests import utils as qa_utils
  8. from qatrack.service_log import models as sl_models
  9. from qatrack.service_log.tests import utils as sl_utils
  10. class TestUnitServiceArea(TestCase):
  11. def setUp(self):
  12. self.u = qa_utils.create_unit()
  13. self.sa = sl_utils.create_service_area()
  14. def test_unique_together(self):
  15. sl_utils.create_unit_service_area(unit=self.u, service_area=self.sa)
  16. with self.assertRaises(IntegrityError):
  17. sl_models.UnitServiceArea.objects.create(unit=self.u, service_area=self.sa)
  18. def test_str(self):
  19. usa = sl_utils.create_unit_service_area(unit=self.u, service_area=self.sa)
  20. self.assertTrue(self.u.name in str(usa) and self.sa.name in str(usa))
  21. class TestServiceEventStatus(TestCase):
  22. def setUp(self):
  23. self.ses = sl_utils.create_service_event_status()
  24. def test_name_unique(self):
  25. ses_01 = sl_models.ServiceEventStatus.objects.first()
  26. ses_01_name = ses_01.name
  27. with self.assertRaises(IntegrityError):
  28. sl_models.ServiceEventStatus.objects.create(name=ses_01_name)
  29. def test_default(self):
  30. ses_01 = sl_models.ServiceEventStatus.objects.get()
  31. ses_01.is_default = True
  32. ses_01.save()
  33. ses_01_name = ses_01.name
  34. self.assertEqual(ses_01_name, sl_models.ServiceEventStatus.get_default().name)
  35. ses_02 = sl_models.ServiceEventStatus.objects.create(is_default=True)
  36. self.assertEqual(ses_02.name, sl_models.ServiceEventStatus.get_default().name)
  37. self.assertFalse(sl_models.ServiceEventStatus.objects.get(name=ses_01_name).is_default)
  38. def test_colours(self):
  39. ses_01 = sl_utils.create_service_event_status(colour=settings.DEFAULT_COLOURS[1])
  40. ses_02 = sl_utils.create_service_event_status(colour=settings.DEFAULT_COLOURS[2])
  41. colours = sl_models.ServiceEventStatus.get_colour_dict()
  42. self.assertEqual(colours[ses_01.id], settings.DEFAULT_COLOURS[1])
  43. self.assertEqual(colours[ses_02.id], settings.DEFAULT_COLOURS[2])
  44. def test_str(self):
  45. self.assertTrue(self.ses.name in str(self.ses))
  46. class TestThirdParty(TestCase):
  47. def test_unique_together(self):
  48. v_01 = qa_utils.create_vendor()
  49. tp_01 = sl_utils.create_third_party(vendor=v_01)
  50. tp_01_first_name = tp_01.first_name
  51. tp_01_last_name = tp_01.last_name
  52. with self.assertRaises(IntegrityError):
  53. sl_models.ThirdParty.objects.create(vendor=v_01, first_name=tp_01_first_name, last_name=tp_01_last_name)
  54. def test_get_full_name(self):
  55. tp = sl_utils.create_third_party()
  56. self.assertTrue(tp.first_name in tp.get_full_name() and tp.last_name in tp.get_full_name())
  57. self.assertTrue(tp.vendor.name in tp.get_full_name())
  58. class TestServiceEventAndRelated(TransactionTestCase):
  59. def setUp(self):
  60. self.se = sl_utils.create_service_event()
  61. def test_third_party_and_hours(self):
  62. se = sl_models.ServiceEvent.objects.first()
  63. tp = sl_utils.create_third_party()
  64. h_01 = sl_utils.create_hours(service_event=se, third_party=tp, user=None)
  65. with self.assertRaises(IntegrityError):
  66. sl_models.Hours.objects.create(
  67. service_event=se, third_party=tp, user=None, time=timezone.timedelta(hours=1)
  68. )
  69. u_02 = create_user(is_superuser=False, uname='user_02')
  70. h_02 = sl_utils.create_hours(service_event=se, user=u_02)
  71. # Test user_or_third_party
  72. self.assertEqual((tp.__class__, tp.id), (h_01.user_or_thirdparty().__class__, h_01.user_or_thirdparty().id))
  73. self.assertEqual((u_02.__class__, u_02.id), (h_02.user_or_thirdparty().__class__, h_02.user_or_thirdparty().id))
  74. def test_group_linkers(self):
  75. se = sl_models.ServiceEvent.objects.first()
  76. g_01 = create_group()
  77. g_02 = create_group()
  78. gl_01 = sl_utils.create_group_linker(group=g_01)
  79. gl_01_name = gl_01.name
  80. with self.assertRaises(IntegrityError):
  81. sl_models.GroupLinker.objects.create(name=gl_01_name, group=g_01)
  82. gl_02 = sl_utils.create_group_linker(group=g_02)
  83. sl_utils.create_group_linker_instance(group_linker=gl_01, service_event=se)
  84. with self.assertRaises(IntegrityError):
  85. sl_models.GroupLinkerInstance.objects.create(group_linker=gl_01, service_event=se)
  86. sl_utils.create_group_linker_instance(group_linker=gl_02, service_event=se)
  87. self.assertEqual(2, len(se.grouplinkerinstance_set.all()))
  88. self.assertTrue(gl_01_name in str(gl_01))
  89. def test_str(self):
  90. self.assertTrue(str(self.se.id) in str(self.se))
  91. class TestDeletions(TransactionTestCase):
  92. def test_delete_grouplinkerinstance_variables(self):
  93. # group_linker > Protect
  94. # user > Protect
  95. # service_event > Cascade
  96. gli = sl_utils.create_group_linker_instance()
  97. u = gli.user
  98. gl = gli.group_linker
  99. se = gli.service_event
  100. gli_id = gli.id
  101. with self.assertRaises(ProtectedError):
  102. u.delete()
  103. with self.assertRaises(ProtectedError):
  104. gl.delete()
  105. se.delete()
  106. self.assertFalse(sl_models.GroupLinkerInstance.objects.filter(id=gli_id).exists())
  107. def test_delete_grouplinker_variables(self):
  108. # group > Cascade
  109. gl = sl_utils.create_group_linker()
  110. g = gl.group
  111. gl_id = gl.id
  112. g.delete()
  113. self.assertFalse(sl_models.GroupLinker.objects.filter(id=gl_id).exists())
  114. def test_delete_returntoserviceqa_variables(self):
  115. # unit_test_collection > Cascade
  116. # test_list_instance > Set Null
  117. # user_assigned_by > Protect
  118. # service_event > Cascade
  119. sl_utils.create_service_event_status(is_default=True)
  120. rtsqa = sl_utils.create_return_to_service_qa()
  121. utc = rtsqa.unit_test_collection
  122. rtsqa_id = rtsqa.id
  123. utc.delete()
  124. self.assertFalse(sl_models.ReturnToServiceQA.objects.filter(id=rtsqa_id).exists())
  125. rtsqa = sl_utils.create_return_to_service_qa(add_test_list_instance=True)
  126. tli = rtsqa.test_list_instance
  127. u = rtsqa.user_assigned_by
  128. se = rtsqa.service_event
  129. rtsqa_id = rtsqa.id
  130. with self.assertRaises(ProtectedError):
  131. u.delete()
  132. tli.delete()
  133. rtsqa = sl_models.ReturnToServiceQA.objects.get(id=rtsqa_id)
  134. self.assertEqual(None, rtsqa.test_list_instance)
  135. se.delete()
  136. self.assertFalse(sl_models.ReturnToServiceQA.objects.filter(id=rtsqa_id).exists())
  137. def test_delete_hours_variables(self):
  138. # service_event > Cascade
  139. # third_party > Protect
  140. # user > Protect
  141. tp = sl_utils.create_third_party()
  142. h = sl_utils.create_hours(third_party=tp)
  143. se = h.service_event
  144. h_id = h.id
  145. with self.assertRaises(ProtectedError):
  146. tp.delete()
  147. se.delete()
  148. self.assertFalse(sl_models.Hours.objects.filter(id=h_id).exists())
  149. u = create_user()
  150. h = sl_utils.create_hours(user=u)
  151. with self.assertRaises(ProtectedError):
  152. u.delete()
  153. def test_delete_thirdparty_variables(self):
  154. # vendor > Protect
  155. tp = sl_utils.create_third_party()
  156. v = tp.vendor
  157. with self.assertRaises(ProtectedError):
  158. v.delete()
  159. def test_delete_serviceevent_variables(self):
  160. # unit_service_area > Protect
  161. # service_type > Protect
  162. # service_status > Protect
  163. # user_status_changed_by > Protect
  164. # user_created_by > Protect
  165. # user_modified_by > Protect
  166. # test_list_instance_initiated_by > Set Null
  167. sl_utils.create_service_event_status(is_default=True)
  168. ses = sl_utils.create_service_event_status()
  169. se = sl_utils.create_service_event(add_test_list_instance_initiated_by=True, service_status=ses)
  170. se.user_status_changed_by = create_user()
  171. se.user_modified_by = create_user()
  172. se.save()
  173. se_id = se.id
  174. usa = se.unit_service_area
  175. st = se.service_type
  176. u_scb = se.user_status_changed_by
  177. u_cb = se.user_created_by
  178. u_mb = se.user_modified_by
  179. tli = se.test_list_instance_initiated_by
  180. with self.assertRaises(ProtectedError):
  181. usa.delete()
  182. with self.assertRaises(ProtectedError):
  183. st.delete()
  184. with self.assertRaises(ProtectedError):
  185. ses.delete()
  186. with self.assertRaises(ProtectedError):
  187. u_scb.delete()
  188. with self.assertRaises(ProtectedError):
  189. u_cb.delete()
  190. with self.assertRaises(ProtectedError):
  191. u_mb.delete()
  192. tli.delete()
  193. se = sl_models.ServiceEvent.objects.get(id=se_id)
  194. self.assertEqual(None, se.test_list_instance_initiated_by)
  195. def test_delete_unit_service_area_variables(self):
  196. # unit > Cascade
  197. # service_area > Cascade
  198. usa = sl_utils.create_unit_service_area()
  199. u = usa.unit
  200. usa_id = usa.id
  201. u.delete()
  202. self.assertFalse(sl_models.UnitServiceArea.objects.filter(id=usa_id).exists())
  203. usa = sl_utils.create_unit_service_area()
  204. sa = usa.service_area
  205. usa_id = usa.id
  206. sa.delete()
  207. self.assertFalse(sl_models.UnitServiceArea.objects.filter(id=usa_id).exists())