#3774
[auf_rh_dae.git] / project / dae / test / poste.py
1 # -*- coding: utf-8 -*-
2
3 from decimal import Decimal
4 from django.core.urlresolvers import reverse
5 from django.contrib.auth.models import User
6 from project.dae import models as dae
7 from project.dae.test.common import DaeTest
8 from project.dae.forms import PosteForm
9 from project.dae.workflow import POSTE_ACTION_ENVOYER_ADMINISTRATEUR, \
10 POSTE_ETAT_BROUILLON, \
11 POSTE_ETAT_ADMINISTRATEUR
12
13 class PosteTest(DaeTest):
14 """
15 Test l'ajout d'un poste
16 """
17 url = reverse('admin:rh_poste_add')
18
19 def setUp(self):
20 super(PosteTest, self).setUp()
21 key = "rh-%s" % self.poste_cnf_ngaoundere.id
22 self.url = reverse('poste', kwargs={'key': key})
23 self.post = {
24 'nom' : 'nom',
25 'regime_travail_nb_heure_semaine' : '35',
26 'indemn_expat_min' : '110',
27 'indemn_expat_max' : '210',
28 'type_intervention': dae.POSTE_ACTION[0][0],
29 'service' : self.srv_info.id,
30 'implantation' : self.IMPLANTATION_ACGL_CNF_NGAOUNDERE.id,
31 'indemn_fct_min' : '120',
32 'indemn_fct_max' : '220',
33 'appel' : dae.POSTE_APPEL_CHOICES[0][0],
34 'regime_travail': '100',
35 'type_poste': self.type_poste_tech.id,
36 'responsable' : self.poste_cnf_ngaoundere.id,
37 'devise_min' : self.devise_cad.id,
38 'devise_max' : self.devise_cad.id,
39 'classement_min' : self.classement_p_5_0.id,
40 'classement_max' : self.classement_p_5_10.id,
41 'valeur_point_min' : self.vp_cad_ngaoundere_2012.id,
42 'valeur_point_max' : self.vp_cad_ngaoundere_2012.id,
43 'salaire_min' : '130',
44 'salaire_max' : '230',
45 'autre_min' : '150',
46 'autre_max' : '250',
47 'charges_patronales_min' : '160',
48 'charges_patronales_max' : '260',
49
50 # pour tester la vue
51 'dae_financements-TOTAL_FORMS' : 0,
52 'dae_financements-INITIAL_FORMS': 0,
53 'dae_financements-MAX_NUM_FORMS': '',
54 'dae_pieces-TOTAL_FORMS' : 0,
55 'dae_pieces-INITIAL_FORMS': 0,
56 'dae_pieces-MAX_NUM_FORMS': '',
57 'dae_comparaisons_internes-TOTAL_FORMS' : 0,
58 'dae_comparaisons_internes-INITIAL_FORMS': 0,
59 'dae_comparaisons_internes-MAX_NUM_FORMS': '',
60
61 }
62 self.expect = {
63 'nom' : 'nom',
64 'regime_travail_nb_heure_semaine' : Decimal('35'),
65 'indemn_expat_min' : Decimal('110'),
66 'indemn_expat_max' : Decimal('210'),
67 'type_intervention': dae.POSTE_ACTION[0][0],
68 'service' : self.srv_info,
69 'implantation' : self.IMPLANTATION_ACGL_CNF_NGAOUNDERE,
70 'indemn_fct_min' : Decimal('120'),
71 'indemn_fct_max' : Decimal('220'),
72 'appel' : dae.POSTE_APPEL_CHOICES[0][0],
73 'regime_travail': Decimal('100'),
74 'type_poste': self.type_poste_tech,
75 'responsable' : self.poste_cnf_ngaoundere,
76 'devise_min' : self.devise_cad,
77 'devise_max' : self.devise_cad,
78 'classement_min' : self.classement_p_5_0,
79 'classement_max' : self.classement_p_5_10,
80 'valeur_point_min' : self.vp_cad_ngaoundere_2012,
81 'valeur_point_max' : self.vp_cad_ngaoundere_2012,
82 'salaire_min' : Decimal('130'),
83 'salaire_max' : Decimal('230'),
84 'autre_min' : Decimal('150'),
85 'autre_max' : Decimal('250'),
86 'charges_patronales_min' : Decimal('160'),
87 'charges_patronales_max' : Decimal('260'),
88 }
89
90 def test_poste_form(self):
91 """
92 Test PosteForm sans instance
93 """
94
95 class Request:
96 user = None
97
98 request = Request()
99 request.user = User.objects.get(email='0@test.auf')
100 form = PosteForm(self.post, request=request)
101 form.is_valid()
102 self.assertTrue(form.is_valid())
103
104 form.save()
105
106 poste = dae.Poste.objects.get(nom=self.post['nom'])
107 for k, expect_value in self.expect.items():
108 self.assertEqual(getattr(poste, k), expect_value)
109
110 def test_page_creation_poste(self):
111 """
112 Teste la page de création d'un poste avec un compte DRH
113 """
114 self._test_drh()
115 resp = self.client.post(self.url, self.post)
116 self.assertEqual(resp.status_code, 302)
117
118 poste = dae.Poste.objects.get(nom=self.post['nom'])
119 for k, expect_value in self.expect.items():
120 self.assertEqual(getattr(poste, k), expect_value)
121
122 def test_validation_poste(self):
123 self._test_drh()
124 self.client.post(self.url, self.post)
125
126 p = dae.Poste.objects.get(nom='nom')
127 self.assertEqual(p.etat, POSTE_ETAT_BROUILLON)
128
129 key = "dae-%s" % p.id
130 url = reverse('poste_consulter', args=(key, ))
131 post = {
132 POSTE_ACTION_ENVOYER_ADMINISTRATEUR: "Envoyer à l'adminstrateur",
133 'commentaire': 'xxx',
134 }
135 resp = self.client.post(url, post)
136 self.assertEqual(resp.status_code, 302)
137
138 p = dae.Poste.objects.get(nom='nom')
139 self.assertEqual(p.etat, POSTE_ETAT_ADMINISTRATEUR)
140
141 commentaires = p.commentaires.all()
142 self.assertEqual(len(commentaires), 1)
143 self.assertEqual(commentaires[0].texte, post['commentaire'])
144 self.assertEqual(commentaires[0].etat_initial, POSTE_ETAT_BROUILLON)
145 self.assertEqual(commentaires[0].etat_final, POSTE_ETAT_ADMINISTRATEUR)
146
147 def test_anonyme(self):
148 """
149 Un anonyme ne peut pas créer d'poste
150 """
151 self._test_anonyme()
152 self._test_acces_ko(self.url)
153
154 def test_correspondant_rh(self):
155 """
156 Un correspodant RH peut ajouter un poste
157 """
158 self._test_correspondant_rh()
159 self._test_acces_ok(self.url)
160
161 def test_administrateur_regional(self):
162 """
163 Un administrateur peut ajouter un poste
164 """
165 self._test_administrateur_regional()
166 self._test_acces_ok(self.url)
167
168 def test_directeur_bureau(self):
169 """
170 Un directeur de bureau peut ajouter un poste
171 """
172 self._test_directeur_bureau()
173 self._test_acces_ok(self.url)
174
175 def test_drh(self):
176 """
177 Un DRH peut ajouter un poste
178 """
179 self._test_drh()
180 self._test_acces_ok(self.url)
181
182 def test_drh2(self):
183 """
184 Un DRH (2ieme niveau) peut ajouter un poste
185 """
186 self._test_drh2()
187 self._test_acces_ok(self.url)
188
189 def test_grp_accior(self):
190 """
191 Un membre de l'ACCIOR ne peut pas ajouter un poste
192 """
193 self._test_grp_accior()
194 self._test_acces_ko(self.url)
195
196 def test_grp_abf(self):
197 """
198 Un membre de l'ABF ne peut pas ajouter un poste
199 """
200 self._test_grp_abf()
201 self._test_acces_ko(self.url)
202
203 def test_grp_finance(self):
204 """
205 Un membre de Finance ne peut pas ajouter un poste
206 """
207 self._test_grp_finance()
208 self._test_acces_ko(self.url)
209
210 def test_grp_haute_direction(self):
211 """
212 Un membre de la haute direction ne peut pas ajouter un poste
213 """
214 self._test_grp_haute_direction()
215 self._test_acces_ko(self.url)
216
217 def test_grp_service_utilisateurs(self):
218 """
219 Un membre du groupe service utilisateur ne peut pas ajouter un poste
220 """
221 self._test_grp_service_utilisateurs()
222 self._test_acces_ko(self.url)
223
224