tests.py 5.7 KB

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