Browse Source

Set ldap_cn form field read-only when editing a member.

Fabs 11 years ago
parent
commit
063f9ba1fb
3 changed files with 43 additions and 7 deletions
  1. 6 0
      coin/members/admin.py
  2. 2 1
      coin/members/models.py
  3. 35 6
      coin/members/tests.py

+ 6 - 0
coin/members/admin.py

@@ -62,6 +62,12 @@ class MemberAdmin(admin.ModelAdmin):
 
     form = MemberAdminForm
     inlines = [CryptoKeyInline, MembershipFeeInline]
+    
+    def get_readonly_fields(self, request, obj=None):
+        if obj:
+            return ['ldap_cn',]
+        else:
+            return []
 
     def set_as_member(self, request, queryset):
         rows_updated = queryset.update(status='adherent')

+ 2 - 1
coin/members/models.py

@@ -34,7 +34,8 @@ class Member(models.Model):
                             default='personne_physique')
     first_name = models.CharField(max_length=200)
     last_name = models.CharField(max_length=200)
-    ldap_cn = models.CharField(max_length=200, blank=True)
+    ldap_cn = models.CharField(max_length=200, blank=True,
+        help_text='Clé avec le LDAP. Laisser vide pour la générer automatiquement')
     organization_name = models.CharField(max_length=200, blank=True,
         help_text='Nom de l\'organisme pour une personne morale')
     email = models.EmailField(max_length=254)

+ 35 - 6
coin/members/tests.py

@@ -1,6 +1,7 @@
 # -*- coding: utf-8 -*-
 import os
 from django.test import TestCase, Client
+from django.contrib.auth.models import User
 from coin.members.models import Member, LdapUser, LdapGroup
 import logging
 
@@ -19,7 +20,7 @@ class MemberTests(TestCase):
         
         first_name = u'Gérard';
         last_name = u'Majax';
-        ldap_cn =  self.get_random_ldap_cn()
+        ldap_cn =  MemberTestsUtils.get_random_ldap_cn()
         member = Member(first_name = first_name,
                         last_name = last_name,
                         ldap_cn = ldap_cn)
@@ -44,7 +45,7 @@ class MemberTests(TestCase):
         #~ Créé un membre
         first_name = u'Ronald';
         last_name = u'Mac Donald';
-        ldap_cn =  self.get_random_ldap_cn()
+        ldap_cn =  MemberTestsUtils.get_random_ldap_cn()
         member = Member(first_name = first_name, last_name = last_name, ldap_cn = ldap_cn)
         member.save()
         
@@ -71,7 +72,7 @@ class MemberTests(TestCase):
         est bien retiré du groupe.
         """
         #~ Créé un membre
-        ldap_cn =  self.get_random_ldap_cn()
+        ldap_cn =  MemberTestsUtils.get_random_ldap_cn()
         member = Member(first_name = 'Canard', last_name = 'WC', ldap_cn = ldap_cn)
         member.save()
         
@@ -94,7 +95,7 @@ class MemberTests(TestCase):
         Test que la fonction change_password de member fonctionne et permet
         l'authentification avec le nouveau mot de passe
         """
-        ldap_cn = self.get_random_ldap_cn()
+        ldap_cn = MemberTestsUtils.get_random_ldap_cn()
         password = "1234"
         
          #~ Créé un nouveau membre
@@ -122,7 +123,7 @@ class MemberTests(TestCase):
         """
         first_name = u'Gérard'
         last_name = u'Majax'
-        ldap_cn = self.get_random_ldap_cn()
+        ldap_cn = MemberTestsUtils.get_random_ldap_cn()
         member = Member(first_name = first_name, last_name = last_name, ldap_cn = ldap_cn)
         member.save()
         
@@ -156,7 +157,35 @@ class MemberTests(TestCase):
         member.delete();
         LdapUser.objects.get(pk=member.ldap_cn).delete();
 
-    def get_random_ldap_cn(self):
+
+class MemberAdminTests(TestCase):
+    def setUp(self):
+        #~ Client web
+        self.client = Client()
+        #~ Créé un superuser
+        self.admin_user_password = '1234'
+        self.admin_user = User.objects.create_superuser('test_admin_user', 'i@mail.com', self.admin_user_password)
+        #~ Connection
+        self.assertEqual(self.client.login(username = self.admin_user.username, password = self.admin_user_password),True)
+        
+    def test_cant_change_ldap_cn_when_editing(self):
+        #~ Créé un membre
+        first_name = u'Gérard'
+        last_name = u'Majax'
+        ldap_cn = MemberTestsUtils.get_random_ldap_cn()
+        member = Member(first_name = first_name, last_name = last_name, ldap_cn = ldap_cn)
+        member.save()
+        
+        edit_page = self.client.get('/admin/members/member/%i/' % member.id)
+        self.assertNotContains(edit_page,
+            '''<input id="id_ldap_cn" />''',
+            html=True)
+            
+        logger.debug(edit_page)
+
+class MemberTestsUtils(object):
+    @staticmethod
+    def get_random_ldap_cn():
         """
         Renvoi une clé aléatoire pour un utilisateur LDAP
         """