apercu employe regional
authorOlivier Larchevêque <olivier.larcheveque@auf.org>
Fri, 1 Jun 2012 15:45:15 +0000 (11:45 -0400)
committerOlivier Larchevêque <olivier.larcheveque@auf.org>
Fri, 1 Jun 2012 15:45:15 +0000 (11:45 -0400)
project/rh/test/common.py
project/rh/test/employe.py
project/rh/views.py

index 0a2fc25..e3215d5 100644 (file)
@@ -21,10 +21,10 @@ class RhTest(TestCase):
 
         EMPLOYES
         ========
-        self.employe_cnf_ngaoundere
-        self.employe_cnf_bangui
-        self.employe_bap_bureau
-        self.employe_bap_ifi
+        0@test.auf: self.employe_cnf_ngaoundere
+        1@test.auf: self.employe_cnf_bangui
+        2@test.auf: self.employe_bap_bureau
+        3@test.auf: self.employe_bap_ifi
 
         USERS DJANGO
         ============
@@ -57,21 +57,25 @@ class RhTest(TestCase):
         # Employés
         ##########
         self.employe_cnf_ngaoundere = rh.Employe(
+                id=1,
                 nom="Employé",
                 prenom="ngaoundere",
                 )
         self.employe_cnf_ngaoundere.save()
         self.employe_cnf_bangui = rh.Employe(
+                id=2,
                 nom="Employé",
                 prenom="bangui",
                 )
         self.employe_cnf_bangui.save()
         self.employe_bap_bureau = rh.Employe(
+                id=3,
                 nom="Employé",
                 prenom="BAP bureau",
                 )
         self.employe_bap_bureau.save()
         self.employe_bap_ifi = rh.Employe(
+                id=4,
                 nom="Employé",
                 prenom="BAP IFI",
                 )
@@ -119,8 +123,8 @@ class RhTest(TestCase):
         ##############
         # Users Django
         ##############
-        
-        for idx, e in enumerate(rh.Employe.objects.all()):
+        self._clean_refs()
+        for idx, e in enumerate(rh.Employe.objects.all().order_by('id')):
             email = u"%s@test.auf" % idx
             u = User(first_name=e.prenom,
                     is_staff=True,
@@ -138,10 +142,17 @@ class RhTest(TestCase):
                     service=ref.Service.objects.get(id=1))
             ref_e.save()
 
-    def tearDown(self):
+            # on le porte dans le référentiel auth
+            ref.Authentification(id=ref_e, courriel=u.email).save()
+
+    def _clean_refs(self):
         courriels = [u"%s@test.auf" % idx for idx, e in
                 enumerate(rh.Employe.objects.all())]
         ref.Employe.objects.filter(courriel__in=courriels).delete()
+        ref.Authentification.objects.filter(courriel__in=courriels).delete()
+
+    def tearDown(self):
+        self._clean_refs()
 
     def _test_acces_ok(self, url):
         response = self.client.get(url, follow=True)
@@ -156,9 +167,7 @@ class RhTest(TestCase):
     def _test_anonyme(self):
         pass
 
-    def _test_correspondant_rh(self):
-        email = "0@test.auf"
-        
+    def _test_correspondant_rh(self, email="0@test.auf"):
         u = User.objects.get(email=email)
         groups.grp_correspondants_rh.user_set.add(u)
         groups.grp_correspondants_rh.save()
@@ -166,9 +175,7 @@ class RhTest(TestCase):
         credentials = {'username': email, 'password': self.password}
         self.assertTrue(self.client.login(**credentials), "login failed")
 
-    def _test_administrateur_regional(self):
-        email = "0@test.auf"
-        
+    def _test_administrateur_regional(self, email="0@test.auf"):
         u = User.objects.get(email=email)
         groups.grp_administrateurs.user_set.add(u)
         groups.grp_administrateurs.save()
@@ -176,9 +183,7 @@ class RhTest(TestCase):
         credentials = {'username': email, 'password': self.password}
         self.assertTrue(self.client.login(**credentials), "login failed")
 
-    def _test_directeur_bureau(self):
-        email = "0@test.auf"
-        
+    def _test_directeur_bureau(self, email="0@test.auf"):
         u = User.objects.get(email=email)
         groups.grp_directeurs_bureau.user_set.add(u)
         groups.grp_directeurs_bureau.save()
index ece3097..42849a9 100644 (file)
@@ -243,7 +243,117 @@ class EmployeListTest(RhTest):
 
     def _test_grp_service_utilisateurs(self):
         """
-        Un membre du groupe service utilisateur peut voir les employés
+        Un membre du groupe service utilisateur ne peut pas voir les employés
+        """
+        self._test_grp_service_utilisateurs()
+        self._test_acces_ko(self.url)
+
+
+class EmployeApercuTest(RhTest):
+    """
+    Test l'accès à un aperçu de l'employé
+    """
+
+    def setUp(self):
+        super(EmployeApercuTest, self).setUp()
+        self.url = reverse('employe_apercu',
+                args=[self.employe_cnf_ngaoundere.id])
+        self.url2 = reverse('employe_apercu',
+                args=[self.employe_bap_ifi.id])
+
+    def test_anonyme(self):
+        """
+        Un anonyme ne peut pas voir l'aperçu
+        """
+        self._test_anonyme()
+        self._test_acces_ko(self.url)
+
+    def test_correspondant_rh(self):
+        """
+        Un correspondant RH peut voir l'aperçu
+        Les dossiers qui ne sont pas de sa région ne sont pas disponibles
+        """
+        self._test_correspondant_rh()
+        self._test_acces_ok(self.url)
+        dossiers = self.client.get(self.url).context['dossiers']
+        self.assertEqual(len(dossiers), 1)
+        self._test_acces_ok(self.url2)
+        dossiers = self.client.get(self.url2).context['dossiers']
+        self.assertEqual(len(dossiers), 0)
+
+    def test_administrateur_regional(self):
+        """
+        Un administrateur peut voir l'aperçu de l'employé
+        Les dossiers qui ne sont pas de sa région ne sont pas disponibles
+        """
+        self._test_administrateur_regional()
+        self._test_acces_ok(self.url)
+        dossiers = self.client.get(self.url).context['dossiers']
+        self.assertEqual(len(dossiers), 1)
+        self._test_acces_ok(self.url2)
+        dossiers = self.client.get(self.url2).context['dossiers']
+        self.assertEqual(len(dossiers), 0)
+
+    def test_directeur_bureau(self):
+        """
+        Un directeur de bureau peut voir l'aperçu employé
+        Les dossiers qui ne sont pas de sa région ne sont pas disponibles
+        """
+        self._test_directeur_bureau()
+        dossiers = self.client.get(self.url).context['dossiers']
+        self.assertEqual(len(dossiers), 1)
+        self._test_acces_ok(self.url2)
+        dossiers = self.client.get(self.url2).context['dossiers']
+        self.assertEqual(len(dossiers), 0)
+
+    def test_drh(self):
+        """
+        Un DRH  peut voir tous les aperçus d'employés avec tous les dossiers
+        """
+        self._test_drh()
+        self._test_acces_ok(self.url)
+        self._test_acces_ok(self.url2)
+        dossiers = self.client.get(self.url).context['dossiers']
+        self.assertEqual(len(dossiers), 1)
+        dossiers = self.client.get(self.url2).context['dossiers']
+        self.assertEqual(len(dossiers), 1)
+
+    def test_drh2(self):
+        """
+        Un DRH (2ieme niveau) peut voir tous les aperçus d'employés avec tous les dossiers
+        """
+        self._test_drh2()
+        self._test_acces_ok(self.url)
+        self._test_acces_ok(self.url2)
+        dossiers = self.client.get(self.url).context['dossiers']
+        self.assertEqual(len(dossiers), 1)
+        dossiers = self.client.get(self.url2).context['dossiers']
+        self.assertEqual(len(dossiers), 1)
+
+    def _test_grp_accior(self):
+        """
+        Un membre de l'ACCIOR ne peut pas voir les aperçus d'employés
+        """
+        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 aperçus d'employés
+        """
+        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 aperçus d'employés
+        """
+        self._test_grp_haute_direction()
+        self._test_acces_ko(self.url)
+
+    def _test_grp_service_utilisateurs(self):
+        """
+        Un membre du groupe service utilisateur ne pas pas voir les aperçus d'employés
         """
         self._test_grp_service_utilisateurs()
         self._test_acces_ko(self.url)
index f548fb0..8a5aa5a 100644 (file)
@@ -651,11 +651,9 @@ def employe_apercu(request, employe_id):
     if groups.grp_correspondants_rh in user_groups or\
        groups.grp_administrateurs in user_groups or\
        groups.grp_directeurs_bureau in user_groups:
-        regions = [
-            d.poste.implantation.region for d in employe.rh_dossiers.all()
-        ]
-        q = Q(employe=employe) & Q(poste__implantation__region__in=regions)
-
+        employe_connecte = get_employe_from_user(request.user)
+        q = Q(employe=employe) & Q(poste__implantation__region=employe_connecte.implantation.region)
+    
     dossiers = rh.Dossier.objects.filter(q).order_by('-date_debut')
 
     c = {