PageRenderTime 47ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/evote/evotevotings/management/tests/test_forms.py

https://gitlab.com/eVotUM/webapp
Python | 229 lines | 184 code | 26 blank | 19 comment | 0 complexity | 748040b789254ce8365cbf65afd395cb MD5 | raw file
  1. # -*- coding: utf-8 -*-
  2. #
  3. # eVotUM - Electronic Voting System
  4. # Copyright (c) 2020 Universidade do Minho
  5. # Developed by Eurotux (dev@eurotux.com)
  6. #
  7. # This program is free software: you can redistribute it and/or modify
  8. # it under the terms of the GNU General Public License as published by
  9. # the Free Software Foundation, either version 3 of the License, or
  10. # (at your option) any later version.
  11. #
  12. # This program is distributed in the hope that it will be useful,
  13. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. # GNU General Public License for more details.
  16. #
  17. # You should have received a copy of the GNU General Public License
  18. # along with this program. If not, see <https://www.gnu.org/licenses/>.
  19. from __future__ import unicode_literals
  20. from django.utils import timezone
  21. from mock import patch
  22. from evotevotings.processes.tests.utils import ProcessesTestUtils
  23. from evotevotings.management.forms import (ManagementAuthenticationForm,
  24. SecureActionKeysForm,
  25. ElectoralMemberForm,
  26. ElectoralMemberVerifyForm,
  27. ElectoralProcessAsMemberForm,
  28. CertificateGenerationForm)
  29. from evotevotings.processes.models import ElectoralAction, ElectoralMember
  30. from . import ManagementTestCase
  31. class ManagementAuthenticationFormTest(
  32. ManagementTestCase, ProcessesTestUtils):
  33. """ """
  34. def setUp(self):
  35. self.cred_member = {
  36. 'username': 'member',
  37. 'password': 'password'
  38. }
  39. self.cred_responsible = {
  40. 'username': 'responsible',
  41. 'password': 'password'
  42. }
  43. self.member = self.create_electoral_member(**self.cred_member)
  44. self.responsible = self.create_user(
  45. is_institutional_responsible=True, **self.cred_responsible)
  46. def test_member_user(self):
  47. self.cred_member['profile'] = \
  48. ManagementAuthenticationForm.Profiles.ELECTORAL_MEMBER
  49. form = ManagementAuthenticationForm(data=self.cred_member)
  50. self.assertTrue(form.is_valid())
  51. self.assertEqual(form.get_user(), self.member.user)
  52. def test_responsible_user(self):
  53. self.cred_responsible['profile'] = \
  54. ManagementAuthenticationForm.Profiles.INSTITUTIONAL_RESPONSIBLE
  55. form = ManagementAuthenticationForm(data=self.cred_responsible)
  56. self.assertTrue(form.is_valid())
  57. self.assertEqual(form.get_user(), self.responsible)
  58. def test_non_responsible_member_with_responsible_profile_selected(self):
  59. self.cred_member['profile'] = \
  60. ManagementAuthenticationForm.Profiles.INSTITUTIONAL_RESPONSIBLE
  61. form = ManagementAuthenticationForm(data=self.cred_member)
  62. self.assertFalse(form.is_valid())
  63. self.assertEqual(
  64. form.errors.values()[0][0], form.error_messages['invalid_login'])
  65. def test_non_member_responsible_with_member_profile_selected(self):
  66. self.cred_responsible['profile'] = \
  67. ManagementAuthenticationForm.Profiles.ELECTORAL_MEMBER
  68. form = ManagementAuthenticationForm(data=self.cred_responsible)
  69. self.assertFalse(form.is_valid())
  70. self.assertEqual(
  71. form.errors.values()[0][0], form.error_messages['invalid_login'])
  72. class SecureActionKeysFormTest(ManagementTestCase):
  73. def test_num_keys_with_simple_strength(self):
  74. num_members = 10
  75. strength = ElectoralAction.Strength.SIMPLE
  76. form = SecureActionKeysForm(
  77. num_members=num_members, strength=strength,
  78. elec_proc_id=1
  79. )
  80. self.assertEqual(form.num_keys, 1)
  81. self.assertEqual(len(form.fields), 1)
  82. def test_num_keys_with_strong_strength(self):
  83. num_members = 10
  84. strength = ElectoralAction.Strength.STRONG
  85. form = SecureActionKeysForm(
  86. num_members=num_members, strength=strength,
  87. elec_proc_id=1
  88. )
  89. self.assertEqual(form.num_keys, (num_members / 2) + 1)
  90. self.assertEqual(len(form.fields), (num_members / 2) + 1)
  91. def test_num_keys_with_critical_strength(self):
  92. num_members = 10
  93. strength = ElectoralAction.Strength.CRITICAL
  94. form = SecureActionKeysForm(
  95. num_members=num_members, strength=strength,
  96. elec_proc_id=1
  97. )
  98. self.assertEqual(form.num_keys, num_members)
  99. self.assertEqual(len(form.fields), num_members)
  100. class ElectoralMemberFormTest(ManagementTestCase):
  101. def setUp(self):
  102. self.process = self.create_electoral_process()
  103. self.data = {
  104. 'name': 'test',
  105. 'role': ElectoralMember.Role.CHAIRMAN,
  106. 'designation': 'test',
  107. 'username': 'dev',
  108. 'email': 'dev@eurotux.com',
  109. 'phone': '+351911111111',
  110. 'electoral_process': self.process.pk
  111. }
  112. def test_add_chairman(self):
  113. form = ElectoralMemberForm(data=self.data)
  114. self.assertEqual(form.is_valid(), True)
  115. class ElectoralMemberVerifyFormTest(ManagementTestCase):
  116. def setUp(self):
  117. self.data = {
  118. 'username': 'dev'
  119. }
  120. self.data_invalid = {
  121. 'username': 'unknown'
  122. }
  123. self.user_info = {
  124. 'username': 'dev',
  125. 'phone': '+351912233441',
  126. 'name': 'Dev Test'
  127. }
  128. @patch('evotevotings.management.forms.members_service.'
  129. 'get_contact_info_by_login')
  130. def test_get_user(self, get_contact_info_by_login):
  131. get_contact_info_by_login.return_value = self.user_info
  132. form = ElectoralMemberVerifyForm(data=self.data)
  133. form.is_valid()
  134. self.assertEqual(form.get_user(), self.user_info)
  135. @patch('evotevotings.management.forms.members_service.'
  136. 'get_contact_info_by_login')
  137. def test_get_user_with_invalid_number(self, get_contact_info_by_login):
  138. self.user_info['phone'] = "93000"
  139. get_contact_info_by_login.return_value = self.user_info
  140. form = ElectoralMemberVerifyForm(data=self.data)
  141. form.is_valid()
  142. self.assertEqual(form.get_user()["phone"], "")
  143. def test_get_user_none(self):
  144. form = ElectoralMemberVerifyForm(data=self.data_invalid)
  145. self.assertEqual(form.get_user(), None)
  146. class ElectoralProcessAsMemberFormTest(ManagementTestCase):
  147. def setUp(self):
  148. self.data = {
  149. 'identifier_pt': 'test',
  150. 'identifier_en': 'test',
  151. 'description_pt': 'test',
  152. 'description_en': 'test',
  153. 'publication_date': timezone.now() + timezone.timedelta(days=1)
  154. }
  155. self.data_invalid = {
  156. 'identifier_pt': 'test',
  157. 'identifier_en': 'test',
  158. 'description_pt': 'test',
  159. 'description_en': 'test',
  160. 'publication_date': timezone.now() - timezone.timedelta(days=1)
  161. }
  162. def test_publication_date_ok(self):
  163. form = ElectoralProcessAsMemberForm(data=self.data)
  164. self.assertEqual(form.is_valid(), True)
  165. def test_publication_date_nok(self):
  166. form = ElectoralProcessAsMemberForm(data=self.data_invalid)
  167. self.assertEqual(form.is_valid(), False)
  168. class CertificateGenerationFormTest(ManagementTestCase):
  169. def setUp(self):
  170. self.data = {
  171. 'elections': [],
  172. 'members_pk': [],
  173. 'initial': {},
  174. 'data': {
  175. 'elec_pvt_key': 'teste'
  176. }
  177. }
  178. self.data_invalid = {
  179. 'elections': [],
  180. 'members_pk': [],
  181. 'initial': {},
  182. 'data': {}
  183. }
  184. def test_form_valid(self):
  185. form = CertificateGenerationForm(
  186. **self.data
  187. )
  188. self.assertEqual(form.is_valid(), True)
  189. def test_form_invalid(self):
  190. form = CertificateGenerationForm(
  191. **self.data_invalid)
  192. self.assertEqual(form.is_valid(), False)