dossiet/poste tests
authorOlivier Larchevêque <olivier.larcheveque@auf.org>
Thu, 31 May 2012 21:28:50 +0000 (17:28 -0400)
committerOlivier Larchevêque <olivier.larcheveque@auf.org>
Thu, 31 May 2012 21:28:50 +0000 (17:28 -0400)
project/rh/admin.py
project/rh/management/commands/rh.py
project/rh/test/common.py
project/rh/test/dossier.py [new file with mode: 0644]
project/rh/test/employe.py
project/rh/test/poste.py [new file with mode: 0644]
project/rh/tests.py

index f00ad29..837d418 100644 (file)
@@ -361,6 +361,18 @@ class DossierAdmin(DateRangeMixin, AUFMetadataAdminMixin, \
         'remplacement_de': 'dossiers',
     }, superclass=DossierForm)
 
+    def has_add_permission(self, request):
+        user_groups = request.user.groups.all()
+        if groups.grp_correspondants_rh in user_groups or \
+           groups.grp_administrateurs in user_groups or \
+           groups.grp_directeurs_bureau in user_groups or \
+           in_drh_or_admin(request.user):
+            return True
+        return False
+
+    def has_delete_permission(self, request, obj=None):
+        return in_drh_or_admin(request.user)
+
     def lookup_allowed(self, key, value):
         if key in (
             'employe__nom__istartswith',
@@ -814,6 +826,18 @@ class PosteAdmin(DateRangeMixin, AUFMetadataAdminMixin, \
                PosteComparaisonInline,
                PosteCommentaireInline, )
 
+    def has_add_permission(self, request):
+        user_groups = request.user.groups.all()
+        if groups.grp_correspondants_rh in user_groups or \
+           groups.grp_administrateurs in user_groups or \
+           groups.grp_directeurs_bureau in user_groups or \
+           in_drh_or_admin(request.user):
+            return True
+        return False
+
+    def has_delete_permission(self, request, obj=None):
+        return in_drh_or_admin(request.user)
+
     def lookup_allowed(self, key, value):
         return key in (
             'date_debut__gte', 'date_debut__isnull', 'date_fin__lte',
index c4e47ed..55bc6d2 100644 (file)
@@ -65,10 +65,25 @@ def check_employes():
                         print "* %s: %s" % (f, m)
                 print ""
 
+def doc_permissions():
+    from project.rh import tests
+    test_classes = [klass for k, klass in tests.__dict__.items() if
+                    k.endswith('Test')]
+    for klass in test_classes:
+        print klass.__name__
+        print "="*len(klass.__name__)
+        methods = [m for m in klass.__dict__ if m.startswith('test_')]
+        for m in methods:
+            fct = getattr(klass, m)
+            info = "* %s : %s" % (m, fct.__doc__.strip())
+            print info
+        print ""
 
 class Command(BaseCommand):
 
     def handle(self, *args, **options):
+        if args[0] == "doc_permissions":
+            doc_permissions()
 
         if args[0] == "check_data":
             check_employes()
index 534c6e1..0a2fc25 100644 (file)
@@ -7,15 +7,6 @@ from auf.django.references import models as ref
 from django.test import TestCase
 from project.rh import models as rh
 
-def fake_get_employe_from_user(user):
-    """
-    Pour les tests on ne peut pas changer la table d'autentification
-    """
-    print "GET EMPLOYE"
-    return ref.Employe.objects.get(id=user.id)
-
-import project.dae.utils
-project.dae.utils.get_employe_from_user = fake_get_employe_from_user
 
 class RhTest(TestCase):
 
diff --git a/project/rh/test/dossier.py b/project/rh/test/dossier.py
new file mode 100644 (file)
index 0000000..cada6d2
--- /dev/null
@@ -0,0 +1,249 @@
+# -*- coding: utf-8 -*-
+
+from django.core.urlresolvers import reverse
+from project.rh.test.common import RhTest
+
+class DossierAddTest(RhTest):
+    """
+    Test l'ajout d'un dossier
+    """
+    url = reverse('admin:rh_dossier_add')
+
+    def test_anonyme(self):
+        """
+        Un anonyme ne peut pas créer d'dossier
+        """
+        self._test_anonyme()
+        self._test_acces_ko(self.url)
+
+    def test_correspondant_rh(self):
+        """
+        Un correspodant RH peut ajouter un dossier
+        """
+        self._test_correspondant_rh()
+        self._test_acces_ok(self.url)
+
+    def test_administrateur_regional(self):
+        """
+        Un administrateur peut ajouter un dossier
+        """
+        self._test_administrateur_regional()
+        self._test_acces_ok(self.url)
+
+    def test_directeur_bureau(self):
+        """
+        Un directeur de bureau peut ajouter un dossier
+        """
+        self._test_directeur_bureau()
+        self._test_acces_ok(self.url)
+
+    def test_drh(self):
+        """
+        Un DRH peut ajouter un dossier
+        """
+        self._test_drh()
+        self._test_acces_ok(self.url)
+
+    def test_drh2(self):
+        """
+        Un DRH (2ieme niveau) peut ajouter un dossier
+        """
+        self._test_drh2()
+        self._test_acces_ok(self.url)
+
+    def _test_grp_accior(self):
+        """
+        Un membre de l'ACCIOR ne peut pas ajouter un dossier
+        """
+        self._test_grp_accior()
+        self._test_acces_ko(self.url)
+
+    def _test_grp_abf(self):
+        """
+        Un membre de l'ABF ne peut pas ajouter un dossier
+        """
+        self._test_grp_abf(self)
+        self._test_acces_ko(self.url)
+
+    def _test_grp_haute_direction(self):
+        """
+        Un membre de la haute direction ne peut pas ajouter un dossier
+        """
+        self._test_grp_haute_direction()
+        self._test_acces_ko(self.url)
+
+    def _test_grp_service_utilisateurs(self):
+        """
+        Un membre du groupe service utilisateur ne peut pas ajouter un dossier
+        """
+        self._test_grp_service_utilisateurs()
+        self._test_acces_ko(self.url)
+
+
+class DossierDeleteTest(RhTest):
+    """
+    Test la suppression d'un dossier
+    """
+
+    def setUp(self):
+        super(DossierDeleteTest, self).setUp()
+        self.url = reverse('admin:rh_dossier_delete',
+                args=[self.dossier_cnf_ngaoundere.id])
+
+    def test_anonyme(self):
+        """
+        Un anonyme ne peut pas supprimer un dossier
+        """
+        self._test_anonyme()
+        self._test_acces_ko(self.url)
+
+    def test_correspondant_rh(self):
+        """
+        Un correspodant RH  ne peut pas supprimer un dossier
+        """
+        self._test_correspondant_rh()
+        self._test_acces_ko(self.url)
+
+    def test_administrateur_regional(self):
+        """
+        Un administrateur  ne peut pas supprimer un dossier
+        """
+        self._test_administrateur_regional()
+        self._test_acces_ko(self.url)
+
+    def test_directeur_bureau(self):
+        """
+        Un directeur de bureau  ne peut pas supprimer un dossier
+        """
+        self._test_directeur_bureau()
+        self._test_acces_ko(self.url)
+
+    def test_drh(self):
+        """
+        Un DRH  peut supprimer un dossier
+        """
+        self._test_drh()
+        self._test_acces_ok(self.url)
+
+    def test_drh2(self):
+        """
+        Un DRH (2ieme niveau) peut supprimer un dossier
+        """
+        self._test_drh2()
+        self._test_acces_ok(self.url)
+
+    def _test_grp_accior(self):
+        """
+        Un membre de l'ACCIOR  ne peut pas supprimer un dossier
+        """
+        self._test_grp_accior()
+        self._test_acces_ko(self.url)
+
+    def _test_grp_abf(self):
+        """
+        Un membre de l'ABF  ne peut pas supprimer un dossier
+        """
+        self._test_grp_abf(self)
+        self._test_acces_ko(self.url)
+
+    def _test_grp_haute_direction(self):
+        """
+        Un membre de la haute direction  ne peut pas supprimer un dossier
+        """
+        self._test_grp_haute_direction()
+        self._test_acces_ko(self.url)
+
+    def _test_grp_service_utilisateurs(self):
+        """
+        Un membre du groupe service utilisateur  ne peut pas supprimer un dossier
+        """
+        self._test_grp_service_utilisateurs()
+        self._test_acces_ko(self.url)
+
+
+class DossierListTest(RhTest):
+    """
+    Test la suppression d'un dossier
+    """
+
+    def setUp(self):
+        super(DossierListTest, self).setUp()
+        self.url = reverse('admin:rh_dossier_changelist')
+
+    def test_anonyme(self):
+        """
+        Un anonyme ne peut pas voir les dossiers
+        """
+        self._test_anonyme()
+        self._test_acces_ko(self.url)
+
+    def test_correspondant_rh(self):
+        """
+        Un correspodant RH peut voir les dossiers
+        """
+        self._test_correspondant_rh()
+        self._test_acces_ok(self.url)
+        qs = self.client.get(self.url).context['cl'].query_set
+        self.assertEqual(len(qs), 2)
+
+    def test_administrateur_regional(self):
+        """
+        Un administrateur peut voir les dossiers de sa région
+        """
+        self._test_administrateur_regional()
+        self._test_acces_ok(self.url)
+        qs = self.client.get(self.url).context['cl'].query_set
+        self.assertEqual(len(qs), 2)
+
+    def test_directeur_bureau(self):
+        """
+        Un directeur de bureau peut voir les dossiers de sa région
+        """
+        self._test_directeur_bureau()
+        self._test_acces_ok(self.url)
+        qs = self.client.get(self.url).context['cl'].query_set
+        self.assertEqual(len(qs), 2)
+
+    def test_drh(self):
+        """
+        Un DRH  peut voir tous les dossiers
+        """
+        self._test_drh()
+        self._test_acces_ok(self.url)
+        qs = self.client.get(self.url).context['cl'].query_set
+        self.assertEqual(len(qs), 4)
+
+    def test_drh2(self):
+        """
+        Un DRH (2ieme niveau) peut voir tous les dossiers
+        """
+        self._test_drh2()
+        self._test_acces_ok(self.url)
+
+    def _test_grp_accior(self):
+        """
+        Un membre de l'ACCIOR ne peut pas voir les dossiers
+        """
+        self._test_grp_accior()
+        self._test_acces_ko(self.url)
+
+    def _test_grp_abf(self):
+        """
+        Un membre de l'ABF ne peut pas voir les dossiers
+        """
+        self._test_grp_abf(self)
+        self._test_acces_ko(self.url)
+
+    def _test_grp_haute_direction(self):
+        """
+        Un membre de la haute direction  ne peut pas voir les dossiers
+        """
+        self._test_grp_haute_direction()
+        self._test_acces_ko(self.url)
+
+    def _test_grp_service_utilisateurs(self):
+        """
+        Un membre du groupe service utilisateur peut voir les dossiers
+        """
+        self._test_grp_service_utilisateurs()
+        self._test_acces_ko(self.url)
index 68d9892..ece3097 100644 (file)
@@ -243,7 +243,7 @@ class EmployeListTest(RhTest):
 
     def _test_grp_service_utilisateurs(self):
         """
-        Un membre du groupe service utilisateur voir les employés
+        Un membre du groupe service utilisateur peut voir les employés
         """
         self._test_grp_service_utilisateurs()
         self._test_acces_ko(self.url)
diff --git a/project/rh/test/poste.py b/project/rh/test/poste.py
new file mode 100644 (file)
index 0000000..06b3896
--- /dev/null
@@ -0,0 +1,249 @@
+# -*- coding: utf-8 -*-
+
+from django.core.urlresolvers import reverse
+from project.rh.test.common import RhTest
+
+class PosteAddTest(RhTest):
+    """
+    Test l'ajout d'un poste
+    """
+    url = reverse('admin:rh_poste_add')
+
+    def test_anonyme(self):
+        """
+        Un anonyme ne peut pas créer d'poste
+        """
+        self._test_anonyme()
+        self._test_acces_ko(self.url)
+
+    def test_correspondant_rh(self):
+        """
+        Un correspodant RH peut ajouter un poste
+        """
+        self._test_correspondant_rh()
+        self._test_acces_ok(self.url)
+
+    def test_administrateur_regional(self):
+        """
+        Un administrateur peut ajouter un poste
+        """
+        self._test_administrateur_regional()
+        self._test_acces_ok(self.url)
+
+    def test_directeur_bureau(self):
+        """
+        Un directeur de bureau peut ajouter un poste
+        """
+        self._test_directeur_bureau()
+        self._test_acces_ok(self.url)
+
+    def test_drh(self):
+        """
+        Un DRH peut ajouter un poste
+        """
+        self._test_drh()
+        self._test_acces_ok(self.url)
+
+    def test_drh2(self):
+        """
+        Un DRH (2ieme niveau) peut ajouter un poste
+        """
+        self._test_drh2()
+        self._test_acces_ok(self.url)
+
+    def _test_grp_accior(self):
+        """
+        Un membre de l'ACCIOR ne peut pas ajouter un poste
+        """
+        self._test_grp_accior()
+        self._test_acces_ko(self.url)
+
+    def _test_grp_abf(self):
+        """
+        Un membre de l'ABF ne peut pas ajouter un poste
+        """
+        self._test_grp_abf(self)
+        self._test_acces_ko(self.url)
+
+    def _test_grp_haute_direction(self):
+        """
+        Un membre de la haute direction ne peut pas ajouter un poste
+        """
+        self._test_grp_haute_direction()
+        self._test_acces_ko(self.url)
+
+    def _test_grp_service_utilisateurs(self):
+        """
+        Un membre du groupe service utilisateur ne peut pas ajouter un poste
+        """
+        self._test_grp_service_utilisateurs()
+        self._test_acces_ko(self.url)
+
+
+class PosteDeleteTest(RhTest):
+    """
+    Test la suppression d'un poste
+    """
+
+    def setUp(self):
+        super(PosteDeleteTest, self).setUp()
+        self.url = reverse('admin:rh_poste_delete',
+                args=[self.poste_cnf_ngaoundere.id])
+
+    def test_anonyme(self):
+        """
+        Un anonyme ne peut pas supprimer un poste
+        """
+        self._test_anonyme()
+        self._test_acces_ko(self.url)
+
+    def test_correspondant_rh(self):
+        """
+        Un correspodant RH  ne peut pas supprimer un poste
+        """
+        self._test_correspondant_rh()
+        self._test_acces_ko(self.url)
+
+    def test_administrateur_regional(self):
+        """
+        Un administrateur  ne peut pas supprimer un poste
+        """
+        self._test_administrateur_regional()
+        self._test_acces_ko(self.url)
+
+    def test_directeur_bureau(self):
+        """
+        Un directeur de bureau  ne peut pas supprimer un poste
+        """
+        self._test_directeur_bureau()
+        self._test_acces_ko(self.url)
+
+    def test_drh(self):
+        """
+        Un DRH  peut supprimer un poste
+        """
+        self._test_drh()
+        self._test_acces_ok(self.url)
+
+    def test_drh2(self):
+        """
+        Un DRH (2ieme niveau) peut supprimer un poste
+        """
+        self._test_drh2()
+        self._test_acces_ok(self.url)
+
+    def _test_grp_accior(self):
+        """
+        Un membre de l'ACCIOR  ne peut pas supprimer un poste
+        """
+        self._test_grp_accior()
+        self._test_acces_ko(self.url)
+
+    def _test_grp_abf(self):
+        """
+        Un membre de l'ABF  ne peut pas supprimer un poste
+        """
+        self._test_grp_abf(self)
+        self._test_acces_ko(self.url)
+
+    def _test_grp_haute_direction(self):
+        """
+        Un membre de la haute direction  ne peut pas supprimer un poste
+        """
+        self._test_grp_haute_direction()
+        self._test_acces_ko(self.url)
+
+    def _test_grp_service_utilisateurs(self):
+        """
+        Un membre du groupe service utilisateur  ne peut pas supprimer un poste
+        """
+        self._test_grp_service_utilisateurs()
+        self._test_acces_ko(self.url)
+
+
+class PosteListTest(RhTest):
+    """
+    Test la suppression d'un poste
+    """
+
+    def setUp(self):
+        super(PosteListTest, self).setUp()
+        self.url = reverse('admin:rh_poste_changelist')
+
+    def test_anonyme(self):
+        """
+        Un anonyme ne peut pas voir les postes
+        """
+        self._test_anonyme()
+        self._test_acces_ko(self.url)
+
+    def test_correspondant_rh(self):
+        """
+        Un correspodant RH peut voir les postes
+        """
+        self._test_correspondant_rh()
+        self._test_acces_ok(self.url)
+        qs = self.client.get(self.url).context['cl'].query_set
+        self.assertEqual(len(qs), 2)
+
+    def test_administrateur_regional(self):
+        """
+        Un administrateur peut voir les postes de sa région
+        """
+        self._test_administrateur_regional()
+        self._test_acces_ok(self.url)
+        qs = self.client.get(self.url).context['cl'].query_set
+        self.assertEqual(len(qs), 2)
+
+    def test_directeur_bureau(self):
+        """
+        Un directeur de bureau peut voir les postes de sa région
+        """
+        self._test_directeur_bureau()
+        self._test_acces_ok(self.url)
+        qs = self.client.get(self.url).context['cl'].query_set
+        self.assertEqual(len(qs), 2)
+
+    def test_drh(self):
+        """
+        Un DRH  peut voir tous les postes
+        """
+        self._test_drh()
+        self._test_acces_ok(self.url)
+        qs = self.client.get(self.url).context['cl'].query_set
+        self.assertEqual(len(qs), 4)
+
+    def test_drh2(self):
+        """
+        Un DRH (2ieme niveau) peut voir tous les postes
+        """
+        self._test_drh2()
+        self._test_acces_ok(self.url)
+
+    def _test_grp_accior(self):
+        """
+        Un membre de l'ACCIOR ne peut pas voir les postes
+        """
+        self._test_grp_accior()
+        self._test_acces_ko(self.url)
+
+    def _test_grp_abf(self):
+        """
+        Un membre de l'ABF ne peut pas voir les postes
+        """
+        self._test_grp_abf(self)
+        self._test_acces_ko(self.url)
+
+    def _test_grp_haute_direction(self):
+        """
+        Un membre de la haute direction  ne peut pas voir les postes
+        """
+        self._test_grp_haute_direction()
+        self._test_acces_ko(self.url)
+
+    def _test_grp_service_utilisateurs(self):
+        """
+        Un membre du groupe service utilisateur ne peut pas voir les postes
+        """
+        self._test_grp_service_utilisateurs()
+        self._test_acces_ko(self.url)
index a7d9dd3..1f993a6 100644 (file)
@@ -1,2 +1,4 @@
 
 from project.rh.test.employe import *
+from project.rh.test.dossier import *
+from project.rh.test.poste import *