manager date range dans admin + employe UT
[auf_rh_dae.git] / project / rh / test / employe.py
1 # -*- coding: utf-8 -*-
2
3 import datetime
4 from django.core.urlresolvers import reverse
5 from project.rh.test.common import RhTest
6 from project.rh.change_list import KEY_STATUT, STATUT_ACTIF, STATUT_INACTIF,\
7 STATUT_FUTUR
8
9
10 class EmployeVolumetrieTest(RhTest):
11 """
12 Test les notions d'actifs / inactifs
13 """
14
15 today = datetime.today()
16 annee_moins_2 = datetime.date(today.year - 2, 1, 1)
17 annee_moins_1 = datetime.date(today.year - 1, 1, 1)
18 annee_plus_2 = datetime.date(today.year + 2, 1, 1)
19 annee_plus_1 = datetime.date(today.year + 1, 1, 1)
20
21 def test_actifs(self):
22 """
23 Test la remontée des dossiers actifs pour 4 employés différents
24 avec chacun un dossier.
25 """
26 # 2 dossiers actifs
27 self.dossier_cnf_ngaoundere.date_debut = self.annee_moins_1
28 self.dossier_cnf_ngaoundere.date_fin = self.annee_plus_1
29 self.dossier_cnf_ngaoundere.save()
30
31 self.dossier_cnf_bangui.date_debut = self.annee_moins_1
32 self.dossier_cnf_bangui.date_fin = self.annee_plus_1
33 self.dossier_cnf_bangui.save()
34
35 # 1 dossier inactif
36 self.dossier_bap_bureau.date_debut = self.annee_moins_2
37 self.dossier_bap_bureau.date_fin = self.annee_moins_1
38 self.dossier_bap_bureau.save()
39
40 # 1 dossier futur
41 self.dossier_bap_ifi.date_debut = self.annee_plus_1
42 self.dossier_bap_ifi.date_fin = self.annee_plus_2
43 self.dossier_bap_ifi.save()
44
45 self._test_drh()
46 url = reverse('admin:rh_employe_changelist')
47 params = {KEY_STATUT: STATUT_ACTIF}
48 qs = self.client.get(url, params).context['cl'].query_set
49 self.assertEqual(len(qs), 2)
50
51 # Puis 1 seul dossier actif
52 self.dossier_cnf_bangui.date_debut = self.annee_moins_2
53 self.dossier_cnf_bangui.date_fin = self.annee_moins_1
54 self.dossier_cnf_bangui.save()
55
56 qs = self.client.get(url, params).context['cl'].query_set
57 self.assertEqual(len(qs), 1)
58
59 def test_inactifs(self):
60 """
61 Test la remontée des dossiers inactifs de 4 employés différents
62 avec chacun un dossier
63 """
64 # 2 dossiers actifs
65 self.dossier_cnf_ngaoundere.date_debut = self.annee_moins_1
66 self.dossier_cnf_ngaoundere.date_fin = self.annee_plus_1
67 self.dossier_cnf_ngaoundere.save()
68
69 self.dossier_cnf_bangui.date_debut = self.annee_moins_1
70 self.dossier_cnf_bangui.date_fin = self.annee_plus_1
71 self.dossier_cnf_bangui.save()
72
73 # 1 dossier inactif
74 self.dossier_bap_bureau.date_debut = self.annee_moins_2
75 self.dossier_bap_bureau.date_fin = self.annee_moins_1
76 self.dossier_bap_bureau.save()
77
78 # 1 dossier futur
79 self.dossier_bap_ifi.date_debut = self.annee_plus_1
80 self.dossier_bap_ifi.date_fin = self.annee_plus_2
81 self.dossier_bap_ifi.save()
82
83 self._test_drh()
84 url = reverse('admin:rh_employe_changelist')
85 params = {KEY_STATUT: STATUT_INACTIF}
86 qs = self.client.get(url, params).context['cl'].query_set
87 self.assertEqual(len(qs), 1)
88
89 # Puis 1 seul dossier actif
90 self.dossier_cnf_bangui.date_debut = self.annee_moins_2
91 self.dossier_cnf_bangui.date_fin = self.annee_moins_1
92 self.dossier_cnf_bangui.save()
93
94 qs = self.client.get(url, params).context['cl'].query_set
95 self.assertEqual(len(qs), 2)
96
97 def test_futurs(self):
98 """
99 Test la remontée des dossiers futurs pour 4 employés différents
100 avec chacun un dossier.
101 """
102 # 2 dossiers actifs
103 self.dossier_cnf_ngaoundere.date_debut = self.annee_moins_1
104 self.dossier_cnf_ngaoundere.date_fin = self.annee_plus_1
105 self.dossier_cnf_ngaoundere.save()
106
107 self.dossier_cnf_bangui.date_debut = self.annee_moins_1
108 self.dossier_cnf_bangui.date_fin = self.annee_plus_1
109 self.dossier_cnf_bangui.save()
110
111 # 1 dossier inactif
112 self.dossier_bap_bureau.date_debut = self.annee_moins_2
113 self.dossier_bap_bureau.date_fin = self.annee_moins_1
114 self.dossier_bap_bureau.save()
115
116 # 1 dossier futur
117 self.dossier_bap_ifi.date_debut = self.annee_plus_1
118 self.dossier_bap_ifi.date_fin = self.annee_plus_2
119 self.dossier_bap_ifi.save()
120
121 self._test_drh()
122 url = reverse('admin:rh_employe_changelist')
123 params = {KEY_STATUT: STATUT_FUTUR}
124 qs = self.client.get(url, params).context['cl'].query_set
125 self.assertEqual(len(qs), 1)
126
127 # Puis 1 seul dossier actif
128 self.dossier_cnf_bangui.date_debut = self.annee_moins_2
129 self.dossier_cnf_bangui.date_fin = self.annee_moins_1
130 self.dossier_cnf_bangui.save()
131
132 qs = self.client.get(url, params).context['cl'].query_set
133 self.assertEqual(len(qs), 1)
134
135 def test_2_dossiers_actifs(self):
136 """
137 Test employe qui a 2 dossiers actifs.
138 """
139 self.dossier_bap_bureau.delete()
140 self.dossier_bap_ifi.delete()
141
142 # 2 dossiers actifs
143 self.dossier_cnf_ngaoundere.date_debut = self.annee_moins_1
144 self.dossier_cnf_ngaoundere.date_fin = self.annee_plus_1
145 self.dossier_cnf_ngaoundere.save()
146
147 self.dossier_cnf_bangui.date_debut = self.annee_moins_1
148 self.dossier_cnf_bangui.date_fin = self.annee_plus_1
149 self.dossier_cnf_bangui.save()
150
151 self._test_drh()
152 url = reverse('admin:rh_employe_changelist')
153 params = {KEY_STATUT: STATUT_ACTIF}
154
155 qs = self.client.get(url, params).context['cl'].query_set
156 self.assertEqual(len(qs), 1)
157
158 def test_1_dossier_actif(self):
159 """
160 Test employe qui a 1 dossier actifs et 1 inactif.
161 """
162 self.dossier_bap_bureau.delete()
163 self.dossier_bap_ifi.delete()
164
165 self.dossier_cnf_ngaoundere = self.employe_cnf_ngaoundere
166 self.dossier_cnf_ngaoundere.date_debut = self.annee_moins_2
167 self.dossier_cnf_ngaoundere.date_fin = None
168 self.dossier_cnf_ngaoundere.save()
169
170 self.dossier_cnf_bangui.employe = self.employe_cnf_ngaoundere
171 self.dossier_cnf_bangui.date_debut = self.annee_moins_2
172 self.dossier_cnf_bangui.date_fin = self.annee_moins_1
173 self.dossier_cnf_bangui.save()
174
175 self._test_drh()
176 url = reverse('admin:rh_employe_changelist')
177 params = {KEY_STATUT: STATUT_ACTIF}
178
179 qs = self.client.get(url, params).context['cl'].query_set
180 self.assertEqual(len(qs), 1)
181
182 def test_2_dossiers_inactifs(self):
183 """
184 Test employe qui a 2 dossiers inactifs.
185 """
186 self.dossier_bap_bureau.delete()
187 self.dossier_bap_ifi.delete()
188
189 self.dossier_cnf_ngaoundere.employe = self.employe_cnf_ngaoundere
190 self.dossier_cnf_ngaoundere.date_debut = self.annee_moins_2
191 self.dossier_cnf_ngaoundere.date_fin = self.annee_moins__1
192 self.dossier_cnf_ngaoundere.save()
193
194 self.dossier_cnf_bangui.employe = self.employe_cnf_ngaoundere
195 self.dossier_cnf_bangui.date_debut = self.annee_moins_2
196 self.dossier_cnf_bangui.date_fin = self.annee_moins__1
197 self.dossier_cnf_bangui.save()
198
199 self._test_drh()
200 url = reverse('admin:rh_employe_changelist')
201 params = {KEY_STATUT: STATUT_ACTIF}
202
203 qs = self.client.get(url, params).context['cl'].query_set
204 self.assertEqual(len(qs), 0)
205
206
207 class EmployeAddTest(RhTest):
208 """
209 Test l'ajout d'un employé
210 """
211 url = reverse('admin:rh_employe_add')
212
213 def test_anonyme(self):
214 """
215 Un anonyme ne peut pas créer d'employé
216 """
217 self._test_anonyme()
218 self._test_acces_ko(self.url)
219
220 def test_correspondant_rh(self):
221 """
222 Un correspodant RH peut ajouter un employé
223 """
224 self._test_correspondant_rh()
225 self._test_acces_ok(self.url)
226
227 def test_administrateur_regional(self):
228 """
229 Un administrateur peut ajouter un employé
230 """
231 self._test_administrateur_regional()
232 self._test_acces_ok(self.url)
233
234 def test_directeur_bureau(self):
235 """
236 Un directeur de bureau peut ajouter un employé
237 """
238 self._test_directeur_bureau()
239 self._test_acces_ok(self.url)
240
241 def test_drh(self):
242 """
243 Un DRH peut ajouter un employé
244 """
245 self._test_drh()
246 self._test_acces_ok(self.url)
247
248 def test_drh2(self):
249 """
250 Un DRH (2ieme niveau) peut ajouter un employé
251 """
252 self._test_drh2()
253 self._test_acces_ok(self.url)
254
255 def _test_grp_accior(self):
256 """
257 Un membre de l'ACCIOR ne peut pas ajouter un employé
258 """
259 self._test_grp_accior()
260 self._test_acces_ko(self.url)
261
262 def _test_grp_abf(self):
263 """
264 Un membre de l'ABF ne peut pas ajouter un employé
265 """
266 self._test_grp_abf(self)
267 self._test_acces_ko(self.url)
268
269 def _test_grp_haute_direction(self):
270 """
271 Un membre de la haute direction ne peut pas ajouter un employé
272 """
273 self._test_grp_haute_direction()
274 self._test_acces_ko(self.url)
275
276 def _test_grp_service_utilisateurs(self):
277 """
278 Un membre du groupe service utilisateur ne peut pas ajouter un employé
279 """
280 self._test_grp_service_utilisateurs()
281 self._test_acces_ko(self.url)
282
283
284 class EmployeDeleteTest(RhTest):
285 """
286 Test la suppression d'un employé
287 """
288
289 def setUp(self):
290 super(EmployeDeleteTest, self).setUp()
291 self.url = reverse('admin:rh_employe_delete',
292 args=[self.employe_cnf_ngaoundere.id])
293
294 def test_anonyme(self):
295 """
296 Un anonyme ne peut pas supprimer un employé
297 """
298 self._test_anonyme()
299 self._test_acces_ko(self.url)
300
301 def test_correspondant_rh(self):
302 """
303 Un correspodant RH ne peut pas supprimer un employé
304 """
305 self._test_correspondant_rh()
306 self._test_acces_ko(self.url)
307
308 def test_administrateur_regional(self):
309 """
310 Un administrateur ne peut pas supprimer un employé
311 """
312 self._test_administrateur_regional()
313 self._test_acces_ko(self.url)
314
315 def test_directeur_bureau(self):
316 """
317 Un directeur de bureau ne peut pas supprimer un employé
318 """
319 self._test_directeur_bureau()
320 self._test_acces_ko(self.url)
321
322 def test_drh(self):
323 """
324 Un DRH peut supprimer un employé
325 """
326 self._test_drh()
327 self._test_acces_ok(self.url)
328
329 def test_drh2(self):
330 """
331 Un DRH (2ieme niveau) peut supprimer un employé
332 """
333 self._test_drh2()
334 self._test_acces_ok(self.url)
335
336 def _test_grp_accior(self):
337 """
338 Un membre de l'ACCIOR ne peut pas supprimer un employé
339 """
340 self._test_grp_accior()
341 self._test_acces_ko(self.url)
342
343 def _test_grp_abf(self):
344 """
345 Un membre de l'ABF ne peut pas supprimer un employé
346 """
347 self._test_grp_abf(self)
348 self._test_acces_ko(self.url)
349
350 def _test_grp_haute_direction(self):
351 """
352 Un membre de la haute direction ne peut pas supprimer un employé
353 """
354 self._test_grp_haute_direction()
355 self._test_acces_ko(self.url)
356
357 def _test_grp_service_utilisateurs(self):
358 """
359 Un membre du groupe service utilisateur
360 ne peut pas supprimer un employé
361 """
362 self._test_grp_service_utilisateurs()
363 self._test_acces_ko(self.url)
364
365
366 class EmployeListTest(RhTest):
367 """
368 Test la suppression d'un employé
369 """
370
371 def setUp(self):
372 super(EmployeListTest, self).setUp()
373 self.url = reverse('admin:rh_employe_changelist')
374
375 def test_anonyme(self):
376 """
377 Un anonyme ne peut pas voir les employés
378 """
379 self._test_anonyme()
380 self._test_acces_ko(self.url)
381
382 def test_correspondant_rh(self):
383 """
384 Un correspodant RH peut voir les employés
385 """
386 self._test_correspondant_rh()
387 self._test_acces_ok(self.url)
388 qs = self.client.get(self.url).context['cl'].query_set
389 self.assertEqual(len(qs), 2)
390
391 def test_administrateur_regional(self):
392 """
393 Un administrateur peut voir les employés de sa région
394 """
395 self._test_administrateur_regional()
396 self._test_acces_ok(self.url)
397 qs = self.client.get(self.url).context['cl'].query_set
398 self.assertEqual(len(qs), 2)
399
400 def test_directeur_bureau(self):
401 """
402 Un directeur de bureau peut voir les employés de sa région
403 """
404 self._test_directeur_bureau()
405 self._test_acces_ok(self.url)
406 qs = self.client.get(self.url).context['cl'].query_set
407 self.assertEqual(len(qs), 2)
408
409 def test_drh(self):
410 """
411 Un DRH peut voir tous les employés
412 """
413 self._test_drh()
414 self._test_acces_ok(self.url)
415 qs = self.client.get(self.url).context['cl'].query_set
416 self.assertEqual(len(qs), 4)
417
418 def test_drh2(self):
419 """
420 Un DRH (2ieme niveau) peut voir tous les employés
421 """
422 self._test_drh2()
423 self._test_acces_ok(self.url)
424
425 def _test_grp_accior(self):
426 """
427 Un membre de l'ACCIOR ne peut pas voir les employés
428 """
429 self._test_grp_accior()
430 self._test_acces_ko(self.url)
431
432 def _test_grp_abf(self):
433 """
434 Un membre de l'ABF ne peut pas voir les employés
435 """
436 self._test_grp_abf(self)
437 self._test_acces_ko(self.url)
438
439 def _test_grp_haute_direction(self):
440 """
441 Un membre de la haute direction ne peut pas voir les employés
442 """
443 self._test_grp_haute_direction()
444 self._test_acces_ko(self.url)
445
446 def _test_grp_service_utilisateurs(self):
447 """
448 Un membre du groupe service utilisateur ne peut pas voir les employés
449 """
450 self._test_grp_service_utilisateurs()
451 self._test_acces_ko(self.url)
452
453
454 class EmployeApercuTest(RhTest):
455 """
456 Test l'accès à un aperçu de l'employé
457 """
458
459 def setUp(self):
460 super(EmployeApercuTest, self).setUp()
461 self.url = reverse('employe_apercu',
462 args=[self.employe_cnf_ngaoundere.id])
463 self.url2 = reverse('employe_apercu',
464 args=[self.employe_bap_ifi.id])
465
466 def test_anonyme(self):
467 """
468 Un anonyme ne peut pas voir l'aperçu
469 """
470 self._test_anonyme()
471 self._test_acces_ko(self.url)
472
473 def test_correspondant_rh(self):
474 """
475 Un correspondant RH peut voir l'aperçu
476 Les dossiers qui ne sont pas de sa région ne sont pas disponibles
477 """
478 self._test_correspondant_rh()
479 self._test_acces_ok(self.url)
480 dossiers = self.client.get(self.url).context['dossiers']
481 self.assertEqual(len(dossiers), 1)
482 self._test_acces_ok(self.url2)
483 dossiers = self.client.get(self.url2).context['dossiers']
484 self.assertEqual(len(dossiers), 0)
485
486 def test_administrateur_regional(self):
487 """
488 Un administrateur peut voir l'aperçu de l'employé
489 Les dossiers qui ne sont pas de sa région ne sont pas disponibles
490 """
491 self._test_administrateur_regional()
492 self._test_acces_ok(self.url)
493 dossiers = self.client.get(self.url).context['dossiers']
494 self.assertEqual(len(dossiers), 1)
495 self._test_acces_ok(self.url2)
496 dossiers = self.client.get(self.url2).context['dossiers']
497 self.assertEqual(len(dossiers), 0)
498
499 def test_directeur_bureau(self):
500 """
501 Un directeur de bureau peut voir l'aperçu employé
502 Les dossiers qui ne sont pas de sa région ne sont pas disponibles
503 """
504 self._test_directeur_bureau()
505 dossiers = self.client.get(self.url).context['dossiers']
506 self.assertEqual(len(dossiers), 1)
507 self._test_acces_ok(self.url2)
508 dossiers = self.client.get(self.url2).context['dossiers']
509 self.assertEqual(len(dossiers), 0)
510
511 def test_drh(self):
512 """
513 Un DRH peut voir tous les aperçus d'employés avec tous les dossiers
514 """
515 self._test_drh()
516 self._test_acces_ok(self.url)
517 self._test_acces_ok(self.url2)
518 dossiers = self.client.get(self.url).context['dossiers']
519 self.assertEqual(len(dossiers), 1)
520 dossiers = self.client.get(self.url2).context['dossiers']
521 self.assertEqual(len(dossiers), 1)
522
523 def test_drh2(self):
524 """
525 Un DRH (2ieme niveau) peut voir tous les aperçus d'employés
526 avec tous les dossiers
527 """
528 self._test_drh2()
529 self._test_acces_ok(self.url)
530 self._test_acces_ok(self.url2)
531 dossiers = self.client.get(self.url).context['dossiers']
532 self.assertEqual(len(dossiers), 1)
533 dossiers = self.client.get(self.url2).context['dossiers']
534 self.assertEqual(len(dossiers), 1)
535
536 def _test_grp_accior(self):
537 """
538 Un membre de l'ACCIOR ne peut pas voir les aperçus d'employés
539 """
540 self._test_grp_accior()
541 self._test_acces_ko(self.url)
542
543 def _test_grp_abf(self):
544 """
545 Un membre de l'ABF ne peut pas voir les aperçus d'employés
546 """
547 self._test_grp_abf(self)
548 self._test_acces_ko(self.url)
549
550 def _test_grp_haute_direction(self):
551 """
552 Un membre de la haute direction ne peut pas voir
553 les aperçus d'employés
554 """
555 self._test_grp_haute_direction()
556 self._test_acces_ko(self.url)
557
558 def _test_grp_service_utilisateurs(self):
559 """
560 Un membre du groupe service utilisateur ne pas pas voir
561 les aperçus d'employés
562 """
563 self._test_grp_service_utilisateurs()
564 self._test_acces_ko(self.url)