tests.py 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. # -*- coding: utf-8 -*-
  2. import os
  3. from django.test import TestCase, Client
  4. from django.contrib.auth.models import User
  5. from coin.members.models import Member, LdapUser, LdapGroup
  6. import logging
  7. logger = logging.getLogger('fabs')
  8. class MemberTests(TestCase):
  9. def test_when_creating_member_a_ldapuser_is_also_created_with_same_data(self):
  10. """
  11. Test que lors de la création d'un nouveau membre, une entrée
  12. correspondante est bien créée dans le LDAP et qu'elle contient
  13. les mêmes données.
  14. Cela concerne le nom et le prénom
  15. """
  16. #~ Créé un membre
  17. first_name = u'Gérard';
  18. last_name = u'Majax';
  19. ldap_cn = MemberTestsUtils.get_random_ldap_cn()
  20. member = Member(first_name = first_name,
  21. last_name = last_name,
  22. ldap_cn = ldap_cn)
  23. member.save()
  24. #~ Récupère l'utilisateur LDAP et fait les tests
  25. ldap_user = LdapUser.objects.get(pk=ldap_cn)
  26. self.assertEqual(ldap_user.first_name, first_name)
  27. self.assertEqual(ldap_user.last_name, last_name)
  28. self.assertEqual(ldap_user.pk, ldap_cn)
  29. member.delete();
  30. ldap_user.delete();
  31. def test_when_modifiying_member_corresponding_ldap_user_is_also_modified_with_same_data(self):
  32. """
  33. Test que lorsque l'on modifie un membre, l'utilisateur LDAP
  34. correspondant est bien modifié
  35. Cela concerne le no met le prénom
  36. """
  37. #~ Créé un membre
  38. first_name = u'Ronald';
  39. last_name = u'Mac Donald';
  40. ldap_cn = MemberTestsUtils.get_random_ldap_cn()
  41. member = Member(first_name = first_name, last_name = last_name, ldap_cn = ldap_cn)
  42. member.save()
  43. #~ Le modifie
  44. new_first_name = u'José';
  45. new_last_name = u'Bové';
  46. member.first_name = new_first_name
  47. member.last_name = new_last_name
  48. member.save()
  49. #~ Récupère l'utilisateur LDAP et fait les tests
  50. ldap_user = LdapUser.objects.get(pk=ldap_cn)
  51. self.assertEqual(ldap_user.first_name, new_first_name)
  52. self.assertEqual(ldap_user.last_name, new_last_name)
  53. member.delete();
  54. ldap_user.delete();
  55. def test_when_creating_member_corresponding_ldap_user_is_in_coin_ldap_group(self):
  56. """
  57. Test que l'utilisateur Ldap fraichement créé est bien dans le group "coin"
  58. Et que lors de la supression d'un membre, l'utilisateur LDAP correspondant
  59. est bien retiré du groupe.
  60. """
  61. #~ Créé un membre
  62. ldap_cn = MemberTestsUtils.get_random_ldap_cn()
  63. member = Member(first_name = 'Canard', last_name = 'WC', ldap_cn = ldap_cn)
  64. member.save()
  65. #~ Récupère le group "coin" et test que l'utilisateur y est présent
  66. ldap_group = LdapGroup.objects.get(pk="coin")
  67. self.assertEqual(ldap_cn in ldap_group.members, True)
  68. #~ Supprime l'utilisateur
  69. member.delete();
  70. #~ Récupère le group "coin" et test que l'utilisateur n'y est plus
  71. ldap_group = LdapGroup.objects.get(pk="coin")
  72. self.assertEqual(ldap_cn in ldap_group.members, False)
  73. LdapUser.objects.get(pk=ldap_cn).delete();
  74. def test_change_password_and_auth(self):
  75. """
  76. Test que la fonction change_password de member fonctionne et permet
  77. l'authentification avec le nouveau mot de passe
  78. """
  79. ldap_cn = MemberTestsUtils.get_random_ldap_cn()
  80. password = "1234"
  81. #~ Créé un nouveau membre
  82. member = Member(first_name = u'Passe-partout', last_name = u'Du fort Boyard', ldap_cn = ldap_cn)
  83. member.save()
  84. #~ Récupère l'utilisateur LDAP
  85. ldap_user = LdapUser.objects.get(pk=ldap_cn)
  86. #~ Change son mot de passe
  87. member.change_password(password)
  88. #~ Test l'authentification
  89. c = Client()
  90. self.assertEqual(c.login(username=ldap_cn, password=password), True)
  91. member.delete();
  92. ldap_user.delete();
  93. def test_when_creating_member_ldap_display_name_is_well_defined(self):
  94. """
  95. Lors de la création d'un membre, le champ "display_name" du LDAP est
  96. prenom + nom
  97. """
  98. first_name = u'Gérard'
  99. last_name = u'Majax'
  100. ldap_cn = MemberTestsUtils.get_random_ldap_cn()
  101. member = Member(first_name = first_name, last_name = last_name, ldap_cn = ldap_cn)
  102. member.save()
  103. #~ Récupère l'utilisateur LDAP
  104. ldap_user = LdapUser.objects.get(pk=ldap_cn)
  105. self.assertEqual(ldap_user.display_name, '%s %s' % (first_name, last_name))
  106. member.delete();
  107. ldap_user.delete();
  108. def test_when_creating_member_ldap_cn_is_well_defined(self):
  109. """
  110. Lors de la création d'un membre, le champ "ldap_cn", s'il n'est pas
  111. définit doit être généré avec les contraintes suivantes :
  112. premières lettres du prénom + nom le tout en minuscule,
  113. sans caractères accentués et sans espaces.
  114. """
  115. random = os.urandom(4).encode('hex')
  116. first_name = u'Gérard-Étienne'
  117. last_name = u'Majax de la Boétie-Blop' + random
  118. control = 'gemajaxdelaboetieblop'
  119. member = Member(first_name = first_name, last_name = last_name)
  120. member.save()
  121. self.assertEqual(member.ldap_cn, control + random)
  122. member.delete();
  123. LdapUser.objects.get(pk=member.ldap_cn).delete();
  124. class MemberAdminTests(TestCase):
  125. def setUp(self):
  126. #~ Client web
  127. self.client = Client()
  128. #~ Créé un superuser
  129. self.admin_user_password = '1234'
  130. self.admin_user = User.objects.create_superuser('test_admin_user', 'i@mail.com', self.admin_user_password)
  131. #~ Connection
  132. self.assertEqual(self.client.login(username = self.admin_user.username, password = self.admin_user_password),True)
  133. def test_cant_change_ldap_cn_when_editing(self):
  134. #~ Créé un membre
  135. first_name = u'Gérard'
  136. last_name = u'Majax'
  137. ldap_cn = MemberTestsUtils.get_random_ldap_cn()
  138. member = Member(first_name = first_name, last_name = last_name, ldap_cn = ldap_cn)
  139. member.save()
  140. edit_page = self.client.get('/admin/members/member/%i/' % member.id)
  141. self.assertNotContains(edit_page,
  142. '''<input id="id_ldap_cn" />''',
  143. html=True)
  144. logger.debug(edit_page)
  145. class MemberTestsUtils(object):
  146. @staticmethod
  147. def get_random_ldap_cn():
  148. """
  149. Renvoi une clé aléatoire pour un utilisateur LDAP
  150. """
  151. return 'coin_test_' + os.urandom(8).encode('hex');