Commit 164ad0a0f4b2707c5b08975bca5d615e456957be
1 parent
d3e31702
Exists in
master
and in
3 other branches
Grosse amelioration des tests (refactorisation, généralisation)
Showing
26 changed files
with
651 additions
and
295 deletions
Show diff stats
src/Controller/AppController.php
@@ -40,8 +40,9 @@ class AppController extends Controller { | @@ -40,8 +40,9 @@ class AppController extends Controller { | ||
40 | const PROFILE_ADMINPLUS = 4; | 40 | const PROFILE_ADMINPLUS = 4; |
41 | const PROFILE_SUPERADMIN = 5; | 41 | const PROFILE_SUPERADMIN = 5; |
42 | 42 | ||
43 | - private $allProfiles = [ | ||
44 | - 'Utilisateur' => self::PROFILE_USER, | 43 | + //private $allProfiles = [ |
44 | + const PROFILES = [ | ||
45 | + 'Utilisateur' => self::PROFILE_USER, | ||
45 | 'Responsable' => self::PROFILE_RESPONSABLE, | 46 | 'Responsable' => self::PROFILE_RESPONSABLE, |
46 | 'Administration' => self::PROFILE_ADMIN, | 47 | 'Administration' => self::PROFILE_ADMIN, |
47 | 'Administration Plus' => self::PROFILE_ADMINPLUS, | 48 | 'Administration Plus' => self::PROFILE_ADMINPLUS, |
@@ -49,6 +50,12 @@ class AppController extends Controller { | @@ -49,6 +50,12 @@ class AppController extends Controller { | ||
49 | ]; | 50 | ]; |
50 | 51 | ||
51 | 52 | ||
53 | + public static function getRoleLevel($role) { | ||
54 | + //return $this->allProfiles[$role]; | ||
55 | + //debug("role is" .$role); | ||
56 | + return self::PROFILES[$role]; | ||
57 | + } | ||
58 | + | ||
52 | /** | 59 | /** |
53 | * Initialization hook method. | 60 | * Initialization hook method. |
54 | * Use this method to add common initialization code like loading components. | 61 | * Use this method to add common initialization code like loading components. |
@@ -96,43 +103,42 @@ class AppController extends Controller { | @@ -96,43 +103,42 @@ class AppController extends Controller { | ||
96 | // ACL : Par défaut refuser | 103 | // ACL : Par défaut refuser |
97 | return false; | 104 | return false; |
98 | } | 105 | } |
99 | - | ||
100 | - function userHasRole($roleDefine) { | 106 | + |
107 | + public function userHasRole($expectedRole, $ORMORE=false) { | ||
101 | $configuration = $this->confLabinvent; | 108 | $configuration = $this->confLabinvent; |
102 | $role = TableRegistry::get('Users')->find() | 109 | $role = TableRegistry::get('Users')->find() |
103 | ->where(['username' => $this->LdapAuth->user($configuration->authentificationType_ldap)[0]]) | 110 | ->where(['username' => $this->LdapAuth->user($configuration->authentificationType_ldap)[0]]) |
111 | + //->where(['username' => $this->LdapAuth->user('cn')[0]]) | ||
104 | ->first()['role']; | 112 | ->first()['role']; |
105 | 113 | ||
106 | - $isAuthorized = false; | ||
107 | - | ||
108 | - switch ($roleDefine) { | 114 | + if (! $ORMORE) return ($role == $expectedRole); |
115 | + return ($this->getRoleLevel($role) >= $this->getRoleLevel($expectedRole)); | ||
116 | + /* | ||
117 | + //$hasRole = false; | ||
118 | + switch ($expectedRole) { | ||
109 | case 'Super Administrateur' : | 119 | case 'Super Administrateur' : |
110 | - if (in_array($role, ['Super Administrateur'])) | ||
111 | - $isAuthorized = true; | 120 | + return (in_array($role, ['Super Administrateur'])); |
112 | break; | 121 | break; |
113 | - | ||
114 | case 'Administration Plus' : | 122 | case 'Administration Plus' : |
115 | - if (in_array($role, ['Administration Plus', 'Super Administrateur'])) | ||
116 | - $isAuthorized = true; | 123 | + return (in_array($role, ['Administration Plus', 'Super Administrateur'])); |
117 | break; | 124 | break; |
118 | - | ||
119 | case 'Administration' : | 125 | case 'Administration' : |
120 | - if (in_array($role, ['Administration', 'Administration Plus', 'Super Administrateur' ])) | ||
121 | - $isAuthorized = true; | 126 | + return (in_array($role, ['Administration', 'Administration Plus', 'Super Administrateur' ])); |
122 | break; | 127 | break; |
123 | case 'Responsable' : | 128 | case 'Responsable' : |
124 | - if (in_array($role, ['Responsable', 'Administration', 'Administration Plus', 'Super Administrateur'])) | ||
125 | - $isAuthorized = true; | 129 | + return (in_array($role, ['Responsable', 'Administration', 'Administration Plus', 'Super Administrateur'])); |
126 | break; | 130 | break; |
127 | - | ||
128 | case 'Utilisateur' : | 131 | case 'Utilisateur' : |
129 | - if (in_array($role, ['Utilisateur', 'Responsable', 'Administration', 'Administration Plus', 'Super Administrateur'])) | ||
130 | - $isAuthorized = true; | 132 | + return (in_array($role, ['Utilisateur', 'Responsable', 'Administration', 'Administration Plus', 'Super Administrateur'])); |
131 | break; | 133 | break; |
132 | } | 134 | } |
133 | - return $isAuthorized; | 135 | + return $false; |
136 | + */ | ||
134 | } | 137 | } |
135 | - | 138 | + public function userHasRoleAtLeast($expectedRole) { |
139 | + return $this->userHasRole($expectedRole, true); | ||
140 | + } | ||
141 | + | ||
136 | /** | 142 | /** |
137 | * {@inheritdoc} | 143 | * {@inheritdoc} |
138 | * | 144 | * |
@@ -171,8 +177,9 @@ class AppController extends Controller { | @@ -171,8 +177,9 @@ class AppController extends Controller { | ||
171 | $this->set('PROFILE_RESPONSABLE', self::PROFILE_RESPONSABLE); | 177 | $this->set('PROFILE_RESPONSABLE', self::PROFILE_RESPONSABLE); |
172 | $this->set('PROFILE_ADMINPLUS', self::PROFILE_ADMINPLUS); | 178 | $this->set('PROFILE_ADMINPLUS', self::PROFILE_ADMINPLUS); |
173 | $this->set('PROFILE_SUPERADMIN', self::PROFILE_SUPERADMIN); | 179 | $this->set('PROFILE_SUPERADMIN', self::PROFILE_SUPERADMIN); |
174 | - $this->set('allProfiles', $this->allProfiles); | ||
175 | - | 180 | + //$this->set('allProfiles', $this->allProfiles); |
181 | + $this->set('allProfiles', self::PROFILES); | ||
182 | + | ||
176 | if (!array_key_exists('_serialize', $this->viewVars) && in_array($this->response->type(), ['application/json', 'application/xml' ])) | 183 | if (!array_key_exists('_serialize', $this->viewVars) && in_array($this->response->type(), ['application/json', 'application/xml' ])) |
177 | $this->set('_serialize', true); | 184 | $this->set('_serialize', true); |
178 | 185 | ||
@@ -191,7 +198,8 @@ class AppController extends Controller { | @@ -191,7 +198,8 @@ class AppController extends Controller { | ||
191 | $role = 'Utilisateur'; | 198 | $role = 'Utilisateur'; |
192 | $this->set('role', $role); | 199 | $this->set('role', $role); |
193 | 200 | ||
194 | - $profile = $this->allProfiles["$role"]; | 201 | + //$profile = $this->allProfiles["$role"]; |
202 | + $profile = self::PROFILES["$role"]; | ||
195 | $this->set('profile', $profile); | 203 | $this->set('profile', $profile); |
196 | 204 | ||
197 | $USER_IS_UTILISATEUR = ($profile == self::PROFILE_USER); | 205 | $USER_IS_UTILISATEUR = ($profile == self::PROFILE_USER); |
src/Controller/CategoriesController.php
@@ -40,7 +40,7 @@ class CategoriesController extends AppController | @@ -40,7 +40,7 @@ class CategoriesController extends AppController | ||
40 | return true; | 40 | return true; |
41 | } | 41 | } |
42 | 42 | ||
43 | - if($this->userHasRole('Administration Plus')) { | 43 | + if($this->userHasRoleAtLeast('Administration Plus')) { |
44 | if($action != 'delete') return true; | 44 | if($action != 'delete') return true; |
45 | } | 45 | } |
46 | 46 |
src/Controller/DocumentsController.php
@@ -34,7 +34,7 @@ class DocumentsController extends AppController { | @@ -34,7 +34,7 @@ class DocumentsController extends AppController { | ||
34 | 'admission', | 34 | 'admission', |
35 | 'sortie' | 35 | 'sortie' |
36 | ])) { | 36 | ])) { |
37 | - if ($this->userHasRole('Administration')) { | 37 | + if ($this->userHasRoleAtLeast('Administration')) { |
38 | return true; | 38 | return true; |
39 | } | 39 | } |
40 | } | 40 | } |
@@ -43,7 +43,7 @@ class DocumentsController extends AppController { | @@ -43,7 +43,7 @@ class DocumentsController extends AppController { | ||
43 | 'delete', | 43 | 'delete', |
44 | 'edit' | 44 | 'edit' |
45 | ])) { | 45 | ])) { |
46 | - if ($this->userHasRole('Administration')) { | 46 | + if ($this->userHasRoleAtLeast('Administration')) { |
47 | return true; | 47 | return true; |
48 | } | 48 | } |
49 | $u = TableRegistry::get('Users')->find()->where([ | 49 | $u = TableRegistry::get('Users')->find()->where([ |
src/Controller/EmpruntsController.php
@@ -30,7 +30,7 @@ class EmpruntsController extends AppController | @@ -30,7 +30,7 @@ class EmpruntsController extends AppController | ||
30 | 30 | ||
31 | $action = $this->request->getAttribute('params')['action']; | 31 | $action = $this->request->getAttribute('params')['action']; |
32 | 32 | ||
33 | - if($this->userHasRole('Responsable')) return true; | 33 | + if($this->userHasRoleAtLeast('Responsable')) return true; |
34 | 34 | ||
35 | //Pour un "utilisateur" | 35 | //Pour un "utilisateur" |
36 | if (in_array($action, ['edit', 'delete'])) { | 36 | if (in_array($action, ['edit', 'delete'])) { |
src/Controller/FichemetrologiquesController.php
@@ -29,8 +29,8 @@ class FichemetrologiquesController extends AppController | @@ -29,8 +29,8 @@ class FichemetrologiquesController extends AppController | ||
29 | 29 | ||
30 | $action = $this->request->getAttribute('params')['action']; | 30 | $action = $this->request->getAttribute('params')['action']; |
31 | 31 | ||
32 | - if($this->userHasRole('Administration')) return true; | ||
33 | - if($this->userHasRole('Responsable') && $action == 'fichemetro') return true; | 32 | + if($this->userHasRoleAtLeast('Administration')) return true; |
33 | + if($this->userHasRoleAtLeast('Responsable') && $action == 'fichemetro') return true; | ||
34 | //Pour un "utilisateur" | 34 | //Pour un "utilisateur" |
35 | if (in_array($action, ['edit', 'delete'])) { | 35 | if (in_array($action, ['edit', 'delete'])) { |
36 | $id = (int)$this->request->getAttribute('params')['pass'][0]; | 36 | $id = (int)$this->request->getAttribute('params')['pass'][0]; |
src/Controller/FormulesController.php
1 | <?php | 1 | <?php |
2 | namespace App\Controller; | 2 | namespace App\Controller; |
3 | 3 | ||
4 | -use App\Controller\AppController; | ||
5 | use Cake\ORM\TableRegistry; | 4 | use Cake\ORM\TableRegistry; |
6 | 5 | ||
7 | /** | 6 | /** |
@@ -26,7 +25,7 @@ class FormulesController extends AppController | @@ -26,7 +25,7 @@ class FormulesController extends AppController | ||
26 | 25 | ||
27 | $action = $this->request->getAttribute('params')['action']; | 26 | $action = $this->request->getAttribute('params')['action']; |
28 | 27 | ||
29 | - if($this->userHasRole('Administration')) return true; | 28 | + if($this->userHasRoleAtLeast('Administration')) return true; |
30 | 29 | ||
31 | //Pour un "utilisateur" | 30 | //Pour un "utilisateur" |
32 | if (in_array($action, ['edit', 'delete'])) { | 31 | if (in_array($action, ['edit', 'delete'])) { |
src/Controller/FournisseursController.php
@@ -34,7 +34,7 @@ class FournisseursController extends AppController | @@ -34,7 +34,7 @@ class FournisseursController extends AppController | ||
34 | return true; | 34 | return true; |
35 | } | 35 | } |
36 | 36 | ||
37 | - if($this->userHasRole('Administration Plus')) { | 37 | + if($this->userHasRoleAtLeast('Administration Plus')) { |
38 | if($action != 'delete') return true; | 38 | if($action != 'delete') return true; |
39 | } | 39 | } |
40 | 40 |
src/Controller/GroupesMetiersController.php
@@ -35,7 +35,7 @@ class GroupesMetiersController extends AppController | @@ -35,7 +35,7 @@ class GroupesMetiersController extends AppController | ||
35 | return true; | 35 | return true; |
36 | } | 36 | } |
37 | 37 | ||
38 | - if($this->userHasRole('Administration Plus')) { | 38 | + if($this->userHasRoleAtLeast('Administration Plus')) { |
39 | if($action != 'delete') return true; | 39 | if($action != 'delete') return true; |
40 | } | 40 | } |
41 | 41 |
src/Controller/GroupesThematiquesController.php
@@ -36,7 +36,7 @@ class GroupesThematiquesController extends AppController | @@ -36,7 +36,7 @@ class GroupesThematiquesController extends AppController | ||
36 | return true; | 36 | return true; |
37 | } | 37 | } |
38 | 38 | ||
39 | - if($this->userHasRole('Administration Plus')) { | 39 | + if($this->userHasRoleAtLeast('Administration Plus')) { |
40 | if($action != 'delete') return true; | 40 | if($action != 'delete') return true; |
41 | } | 41 | } |
42 | 42 |
src/Controller/MaterielsController.php
@@ -17,7 +17,7 @@ class MaterielsController extends AppController { | @@ -17,7 +17,7 @@ class MaterielsController extends AppController { | ||
17 | const TOBEARCHIVED = 3; | 17 | const TOBEARCHIVED = 3; |
18 | const ARCHIVED = 4; | 18 | const ARCHIVED = 4; |
19 | 19 | ||
20 | - private $allStatus = [ | 20 | + const allStatus = [ |
21 | 'CREATED' => self::CREATED, | 21 | 'CREATED' => self::CREATED, |
22 | 'VALIDATED' => self::VALIDATED, | 22 | 'VALIDATED' => self::VALIDATED, |
23 | 'TOBEARCHIVED' => self::TOBEARCHIVED, | 23 | 'TOBEARCHIVED' => self::TOBEARCHIVED, |
@@ -102,7 +102,7 @@ class MaterielsController extends AppController { | @@ -102,7 +102,7 @@ class MaterielsController extends AppController { | ||
102 | return true; | 102 | return true; |
103 | } else if ($role == 'Responsable' && $this->isRespGroup($id, $user[$configuration->authentificationType_ldap][0])) { | 103 | } else if ($role == 'Responsable' && $this->isRespGroup($id, $user[$configuration->authentificationType_ldap][0])) { |
104 | return true; | 104 | return true; |
105 | - } else if ($this->userHasRole('Administration')) { | 105 | + } else if ($this->userHasRoleAtLeast('Administration')) { |
106 | return true; | 106 | return true; |
107 | } | 107 | } |
108 | */ | 108 | */ |
@@ -119,7 +119,7 @@ class MaterielsController extends AppController { | @@ -119,7 +119,7 @@ class MaterielsController extends AppController { | ||
119 | break; | 119 | break; |
120 | } | 120 | } |
121 | } | 121 | } |
122 | - if ($this->userHasRole('Administration Plus')) { | 122 | + if ($this->userHasRoleAtLeast('Administration Plus')) { |
123 | return true; | 123 | return true; |
124 | } | 124 | } |
125 | break; | 125 | break; |
@@ -142,7 +142,7 @@ class MaterielsController extends AppController { | @@ -142,7 +142,7 @@ class MaterielsController extends AppController { | ||
142 | return true; | 142 | return true; |
143 | } else if ($role == 'Responsable' && $this->isRespGroup($id, $user[$configuration->authentificationType_ldap][0])) { | 143 | } else if ($role == 'Responsable' && $this->isRespGroup($id, $user[$configuration->authentificationType_ldap][0])) { |
144 | return true; | 144 | return true; |
145 | - } else if ($this->userHasRole('Administration')) { | 145 | + } else if ($this->userHasRoleAtLeast('Administration')) { |
146 | return true; | 146 | return true; |
147 | } | 147 | } |
148 | */ | 148 | */ |
@@ -164,7 +164,7 @@ class MaterielsController extends AppController { | @@ -164,7 +164,7 @@ class MaterielsController extends AppController { | ||
164 | case 'statusCreated': // de-validation d'un materiel (repasse à CREATED) | 164 | case 'statusCreated': // de-validation d'un materiel (repasse à CREATED) |
165 | $id = (int) $this->request->getAttribute('params')['pass'][0]; | 165 | $id = (int) $this->request->getAttribute('params')['pass'][0]; |
166 | if ($role == 'Responsable' && $this->isRespGroup($id, $user[$configuration->authentificationType_ldap][0])) return true; | 166 | if ($role == 'Responsable' && $this->isRespGroup($id, $user[$configuration->authentificationType_ldap][0])) return true; |
167 | - else if ($this->userHasRole('Administration')) return true; | 167 | + else if ($this->userHasRoleAtLeast('Administration')) return true; |
168 | break; | 168 | break; |
169 | 169 | ||
170 | case 'statusValidated': | 170 | case 'statusValidated': |
@@ -173,7 +173,7 @@ class MaterielsController extends AppController { | @@ -173,7 +173,7 @@ class MaterielsController extends AppController { | ||
173 | if ($this->isCreated($id)) { | 173 | if ($this->isCreated($id)) { |
174 | return true; | 174 | return true; |
175 | } | 175 | } |
176 | - } else if ($this->userHasRole('Administration')) { | 176 | + } else if ($this->userHasRoleAtLeast('Administration')) { |
177 | if ($this->isCreated($id)) { | 177 | if ($this->isCreated($id)) { |
178 | return true; | 178 | return true; |
179 | } | 179 | } |
@@ -186,7 +186,7 @@ class MaterielsController extends AppController { | @@ -186,7 +186,7 @@ class MaterielsController extends AppController { | ||
186 | if ($this->isValidated($id)) { | 186 | if ($this->isValidated($id)) { |
187 | return true; | 187 | return true; |
188 | } | 188 | } |
189 | - } else if ($this->userHasRole('Administration')) { | 189 | + } else if ($this->userHasRoleAtLeast('Administration')) { |
190 | if ($this->isValidated($id)) { | 190 | if ($this->isValidated($id)) { |
191 | return true; | 191 | return true; |
192 | } | 192 | } |
@@ -195,7 +195,7 @@ class MaterielsController extends AppController { | @@ -195,7 +195,7 @@ class MaterielsController extends AppController { | ||
195 | 195 | ||
196 | case 'statusArchived': | 196 | case 'statusArchived': |
197 | $id = (int) $this->request->getAttribute('params')['pass'][0]; | 197 | $id = (int) $this->request->getAttribute('params')['pass'][0]; |
198 | - if ($this->userHasRole('Administration')) { | 198 | + if ($this->userHasRoleAtLeast('Administration')) { |
199 | if ($this->isToBeArchived($id)) { | 199 | if ($this->isToBeArchived($id)) { |
200 | if ($role == 'Super Administrateur') { | 200 | if ($role == 'Super Administrateur') { |
201 | return false; | 201 | return false; |
@@ -207,7 +207,7 @@ class MaterielsController extends AppController { | @@ -207,7 +207,7 @@ class MaterielsController extends AppController { | ||
207 | break; | 207 | break; |
208 | 208 | ||
209 | case 'export': | 209 | case 'export': |
210 | - if ($this->userHasRole('Responsable')) { | 210 | + if ($this->userHasRoleAtLeast('Responsable')) { |
211 | return true; | 211 | return true; |
212 | } | 212 | } |
213 | break; | 213 | break; |
@@ -226,7 +226,7 @@ class MaterielsController extends AppController { | @@ -226,7 +226,7 @@ class MaterielsController extends AppController { | ||
226 | case 'setLabelIsPlacedOrNotPlaced': | 226 | case 'setLabelIsPlacedOrNotPlaced': |
227 | case 'setLabelIsNotPlaced': | 227 | case 'setLabelIsNotPlaced': |
228 | case 'printLabelRuban': | 228 | case 'printLabelRuban': |
229 | - if ($this->userHasRole('Administration')) { | 229 | + if ($this->userHasRoleAtLeast('Administration')) { |
230 | return true; | 230 | return true; |
231 | } | 231 | } |
232 | break; | 232 | break; |
@@ -432,7 +432,8 @@ class MaterielsController extends AppController { | @@ -432,7 +432,8 @@ class MaterielsController extends AppController { | ||
432 | $IS_VALIDATED = ( $materiel->status == 'VALIDATED' ); | 432 | $IS_VALIDATED = ( $materiel->status == 'VALIDATED' ); |
433 | $IS_TOBEARCHIVED = ( $materiel->status == 'TOBEARCHIVED' ); | 433 | $IS_TOBEARCHIVED = ( $materiel->status == 'TOBEARCHIVED' ); |
434 | $IS_ARCHIVED = ( $materiel->status == 'ARCHIVED' ); | 434 | $IS_ARCHIVED = ( $materiel->status == 'ARCHIVED' ); |
435 | - $status = $this->allStatus[$materiel->status]; | 435 | + //$status = $this->allStatus[$materiel->status]; |
436 | + $status = self::allStatus[$materiel->status]; | ||
436 | $this->set('IS_CREATED', $IS_CREATED); | 437 | $this->set('IS_CREATED', $IS_CREATED); |
437 | $this->set('IS_VALIDATED', $IS_VALIDATED); | 438 | $this->set('IS_VALIDATED', $IS_VALIDATED); |
438 | $this->set('IS_TOBEARCHIVED', $IS_TOBEARCHIVED); | 439 | $this->set('IS_TOBEARCHIVED', $IS_TOBEARCHIVED); |
src/Controller/OrganismesController.php
@@ -39,7 +39,7 @@ class OrganismesController extends AppController | @@ -39,7 +39,7 @@ class OrganismesController extends AppController | ||
39 | return true; | 39 | return true; |
40 | } | 40 | } |
41 | 41 | ||
42 | - if($this->userHasRole('Administration Plus')) { | 42 | + if($this->userHasRoleAtLeast('Administration Plus')) { |
43 | if($action != 'delete') return true; | 43 | if($action != 'delete') return true; |
44 | } | 44 | } |
45 | 45 |
src/Controller/PagesController.php
@@ -28,7 +28,37 @@ use Cake\ORM\TableRegistry; | @@ -28,7 +28,37 @@ use Cake\ORM\TableRegistry; | ||
28 | */ | 28 | */ |
29 | class PagesController extends AppController | 29 | class PagesController extends AppController |
30 | { | 30 | { |
31 | - | 31 | + |
32 | + /** | ||
33 | + * @param $user | ||
34 | + * @return boolean | ||
35 | + * | ||
36 | + * Give authorization for materiels | ||
37 | + */ | ||
38 | + /* | ||
39 | + // (EP) TODO: ameliorer ca avec des variables globales IS_VALIDATED, IS_ADMIN, ... | ||
40 | + public function isAuthorized($user) { | ||
41 | + $path = func_get_args(); | ||
42 | + if($path[0] === null) { | ||
43 | + $path[0] = ''; | ||
44 | + } | ||
45 | + $page = $subpage = null; | ||
46 | + if (!empty($path[0])) { | ||
47 | + $page = $path[0]; | ||
48 | + } | ||
49 | + if (!empty($path[1])) { | ||
50 | + $subpage = $path[1]; | ||
51 | + } | ||
52 | + if ($page == 'tools') { | ||
53 | + // Autoriser seulement à partir du role ADMIN et + | ||
54 | + if ($this->userHasRoleAtLeast('Utilisateur')) { | ||
55 | + return false; | ||
56 | + } | ||
57 | + } | ||
58 | + return true; | ||
59 | + } | ||
60 | + */ | ||
61 | + | ||
32 | /** | 62 | /** |
33 | * Displays a view | 63 | * Displays a view |
34 | * | 64 | * |
@@ -39,8 +69,7 @@ class PagesController extends AppController | @@ -39,8 +69,7 @@ class PagesController extends AppController | ||
39 | public function display() | 69 | public function display() |
40 | { | 70 | { |
41 | 71 | ||
42 | - | ||
43 | - $configuration = $this->confLabinvent; | 72 | + $configuration = $this->confLabinvent; |
44 | 73 | ||
45 | $path = func_get_args(); | 74 | $path = func_get_args(); |
46 | if($path[0] === null) { | 75 | if($path[0] === null) { |
@@ -48,13 +77,12 @@ class PagesController extends AppController | @@ -48,13 +77,12 @@ class PagesController extends AppController | ||
48 | } | 77 | } |
49 | $this->myDebug($path); | 78 | $this->myDebug($path); |
50 | 79 | ||
51 | - //Si l'utilisateur n'est pas connecté, on le redirige vers la page login.ctp | ||
52 | - //sauf si l'action demandé est 'about' ou si le mode install est activé | ||
53 | - if (!($this->LdapAuth->user($configuration->authentificationType_ldap)[0]) && $path[0] != 'about' && !($configuration->mode_install)) { | ||
54 | - return $this->redirect(['controller' => 'users', 'action' => 'login']); | ||
55 | - } | ||
56 | - | ||
57 | - | 80 | + //Si l'utilisateur n'est pas connecté, on le redirige vers la page login.ctp |
81 | + //sauf si l'action demandée est 'about' ou si le mode install est activé | ||
82 | + if (!($this->LdapAuth->user($configuration->authentificationType_ldap)[0]) && $path[0] != 'about' && !($configuration->mode_install)) { | ||
83 | + return $this->redirect(['controller' => 'users', 'action' => 'login']); | ||
84 | + } | ||
85 | + | ||
58 | $count = count($path); | 86 | $count = count($path); |
59 | if (!$count) { | 87 | if (!$count) { |
60 | return $this->redirect('/'); | 88 | return $this->redirect('/'); |
@@ -67,6 +95,14 @@ class PagesController extends AppController | @@ -67,6 +95,14 @@ class PagesController extends AppController | ||
67 | if (!empty($path[1])) { | 95 | if (!empty($path[1])) { |
68 | $subpage = $path[1]; | 96 | $subpage = $path[1]; |
69 | } | 97 | } |
98 | + | ||
99 | + if ($page == 'tools') { | ||
100 | + // Autoriser seulement à partir du role ADMIN et + | ||
101 | + if (! $this->userHasRoleAtLeast('Administration')) { | ||
102 | + return $this->redirect('/'); | ||
103 | + } | ||
104 | + } | ||
105 | + | ||
70 | $this->set(compact('page', 'subpage')); | 106 | $this->set(compact('page', 'subpage')); |
71 | 107 | ||
72 | try { | 108 | try { |
src/Controller/SitesController.php
@@ -35,7 +35,7 @@ class SitesController extends AppController | @@ -35,7 +35,7 @@ class SitesController extends AppController | ||
35 | return true; | 35 | return true; |
36 | } | 36 | } |
37 | 37 | ||
38 | - if($this->userHasRole('Administration Plus')) { | 38 | + if($this->userHasRoleAtLeast('Administration Plus')) { |
39 | if($action != 'delete') return true; | 39 | if($action != 'delete') return true; |
40 | } | 40 | } |
41 | 41 |
src/Controller/SousCategoriesController.php
@@ -38,7 +38,7 @@ class SousCategoriesController extends AppController | @@ -38,7 +38,7 @@ class SousCategoriesController extends AppController | ||
38 | return true; | 38 | return true; |
39 | } | 39 | } |
40 | 40 | ||
41 | - if($this->userHasRole('Administration Plus')) { | 41 | + if($this->userHasRoleAtLeast('Administration Plus')) { |
42 | if($action != 'delete') return true; | 42 | if($action != 'delete') return true; |
43 | } | 43 | } |
44 | 44 |
src/Controller/SuivisController.php
@@ -25,7 +25,7 @@ class SuivisController extends AppController { | @@ -25,7 +25,7 @@ class SuivisController extends AppController { | ||
25 | ]) | 25 | ]) |
26 | ->first()['role']; | 26 | ->first()['role']; |
27 | $action = $this->request->getAttribute('params')['action']; | 27 | $action = $this->request->getAttribute('params')['action']; |
28 | - if ($this->userHasRole('Administration')) | 28 | + if ($this->userHasRoleAtLeast('Administration')) |
29 | return true; | 29 | return true; |
30 | // Pour un "utilisateur" | 30 | // Pour un "utilisateur" |
31 | if (in_array($action, [ | 31 | if (in_array($action, [ |
src/Controller/SurCategoriesController.php
@@ -39,7 +39,7 @@ class SurCategoriesController extends AppController | @@ -39,7 +39,7 @@ class SurCategoriesController extends AppController | ||
39 | return true; | 39 | return true; |
40 | } | 40 | } |
41 | 41 | ||
42 | - if($this->userHasRole('Administration Plus')) { | 42 | + if($this->userHasRoleAtLeast('Administration Plus')) { |
43 | if($action != 'delete') return true; | 43 | if($action != 'delete') return true; |
44 | } | 44 | } |
45 | 45 |
src/Controller/TypeDocumentsController.php
@@ -35,7 +35,7 @@ class TypeDocumentsController extends AppController | @@ -35,7 +35,7 @@ class TypeDocumentsController extends AppController | ||
35 | return true; | 35 | return true; |
36 | } | 36 | } |
37 | 37 | ||
38 | - if($this->userHasRole('Administration Plus')) { | 38 | + if($this->userHasRoleAtLeast('Administration Plus')) { |
39 | if($action != 'delete') return true; | 39 | if($action != 'delete') return true; |
40 | } | 40 | } |
41 | 41 |
src/Controller/TypeSuivisController.php
@@ -35,7 +35,7 @@ class TypeSuivisController extends AppController | @@ -35,7 +35,7 @@ class TypeSuivisController extends AppController | ||
35 | return true; | 35 | return true; |
36 | } | 36 | } |
37 | 37 | ||
38 | - if($this->userHasRole('Administration Plus')) { | 38 | + if($this->userHasRoleAtLeast('Administration Plus')) { |
39 | if($action != 'delete') return true; | 39 | if($action != 'delete') return true; |
40 | } | 40 | } |
41 | 41 |
src/Controller/UnitesController.php
@@ -34,7 +34,7 @@ class UnitesController extends AppController | @@ -34,7 +34,7 @@ class UnitesController extends AppController | ||
34 | return true; | 34 | return true; |
35 | } | 35 | } |
36 | 36 | ||
37 | - if($this->userHasRole('Administration Plus')) { | 37 | + if($this->userHasRoleAtLeast('Administration Plus')) { |
38 | if($action != 'delete') return true; | 38 | if($action != 'delete') return true; |
39 | } | 39 | } |
40 | 40 |
tests/Fixture/ConfigurationsFixture.php
@@ -52,7 +52,9 @@ class ConfigurationsFixture extends TestFixture | @@ -52,7 +52,9 @@ class ConfigurationsFixture extends TestFixture | ||
52 | 'prix_inventaire_administratif' => ['type' => 'integer', 'length' => 10, 'null' => true, 'default' => 800, 'comment' => '', 'precision' => null], | 52 | 'prix_inventaire_administratif' => ['type' => 'integer', 'length' => 10, 'null' => true, 'default' => 800, 'comment' => '', 'precision' => null], |
53 | 'taille_max_doc' => ['type' => 'integer', 'length' => 15, 'null' => true, 'default' => 8000000, 'comment' => '', 'precision' => null], | 53 | 'taille_max_doc' => ['type' => 'integer', 'length' => 15, 'null' => true, 'default' => 8000000, 'comment' => '', 'precision' => null], |
54 | 'metrologie' => [ 'type' => 'boolean' , 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null], | 54 | 'metrologie' => [ 'type' => 'boolean' , 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null], |
55 | - 'aff_par_defaut' => ['type' => 'integer', 'length' => 6, 'null' => false, 'default' => 20, 'comment' => '', 'precision' => null], | 55 | + 'aff_par_defaut' => ['type' => 'integer', 'length' => 6, 'null' => false, 'default' => 20, 'comment' => '', 'precision' => null], |
56 | + 'procedure_sur_accueil' => [ 'type' => 'boolean' , 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null], | ||
57 | + | ||
56 | '_constraints' => [ | 58 | '_constraints' => [ |
57 | 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], | 59 | 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []], |
58 | 'nom_UNIQUE' => ['type' => 'unique', 'columns' => ['nom'], 'length' => []], | 60 | 'nom_UNIQUE' => ['type' => 'unique', 'columns' => ['nom'], 'length' => []], |
@@ -102,7 +104,10 @@ class ConfigurationsFixture extends TestFixture | @@ -102,7 +104,10 @@ class ConfigurationsFixture extends TestFixture | ||
102 | 'emailGuest10' => 'Lorem ipsum dolor sit amet', | 104 | 'emailGuest10' => 'Lorem ipsum dolor sit amet', |
103 | 'test' => 1, | 105 | 'test' => 1, |
104 | 'prix_inventaire_administratif' => 800, | 106 | 'prix_inventaire_administratif' => 800, |
105 | - 'metrologie' => 1, | 107 | + |
108 | + 'metrologie' => 1, | ||
109 | + 'procedure_sur_accueil' => 1, | ||
110 | + | ||
106 | ], | 111 | ], |
107 | ]; | 112 | ]; |
108 | } | 113 | } |
tests/Fixture/MaterielsFixture.php
@@ -559,6 +559,7 @@ class MaterielsFixture extends TestFixture { | @@ -559,6 +559,7 @@ class MaterielsFixture extends TestFixture { | ||
559 | [ | 559 | [ |
560 | 'id' => 1, | 560 | 'id' => 1, |
561 | 'designation' => 'matos 1 USER', | 561 | 'designation' => 'matos 1 USER', |
562 | + //'designation' => 'Test 1', | ||
562 | 'sur_categorie_id' => 1, | 563 | 'sur_categorie_id' => 1, |
563 | 'categorie_id' => 1, | 564 | 'categorie_id' => 1, |
564 | 'sous_categorie_id' => 1, | 565 | 'sous_categorie_id' => 1, |
tests/Fixture/UsersFixture.php
@@ -57,9 +57,11 @@ class UsersFixture extends TestFixture | @@ -57,9 +57,11 @@ class UsersFixture extends TestFixture | ||
57 | 'id' => 1, | 57 | 'id' => 1, |
58 | //'nom' => 'test1 test2', | 58 | //'nom' => 'test1 test2', |
59 | 'nom' => 'user1 SUPER', | 59 | 'nom' => 'user1 SUPER', |
60 | + //'username' => 'testa', | ||
60 | 'username' => 'user1_SUPER', | 61 | 'username' => 'user1_SUPER', |
61 | 'password' => '$2y$10$VtYdA8Evkc.K.VpvqmF9wui5hc9ep19f8ukWBeFBIlunXSHPqw.K2', | 62 | 'password' => '$2y$10$VtYdA8Evkc.K.VpvqmF9wui5hc9ep19f8ukWBeFBIlunXSHPqw.K2', |
62 | - 'email' => 'testa@test.fr', | 63 | + //'email' => 'testa@test.fr', |
64 | + 'email' => 'user1_SUPER@test.fr', | ||
63 | 'role' => 'Super Administrateur', | 65 | 'role' => 'Super Administrateur', |
64 | 'groupes_metier_id' => 1, | 66 | 'groupes_metier_id' => 1, |
65 | 'groupe_thematique_id' => 1 | 67 | 'groupe_thematique_id' => 1 |
tests/TestCase/Controller/General.php
@@ -2,9 +2,11 @@ | @@ -2,9 +2,11 @@ | ||
2 | namespace App\Test\TestCase\Controller; | 2 | namespace App\Test\TestCase\Controller; |
3 | 3 | ||
4 | use Cake\TestSuite\IntegrationTestCase; | 4 | use Cake\TestSuite\IntegrationTestCase; |
5 | +use App\Controller\AppController; | ||
6 | +//use Cake\ORM\TableRegistry; | ||
7 | + | ||
5 | //use App\Controller\MaterielsController; | 8 | //use App\Controller\MaterielsController; |
6 | //use Cake\ORM\TableRegistry; | 9 | //use Cake\ORM\TableRegistry; |
7 | -//use phpDocumentor\Reflection\Types\Self_; | ||
8 | 10 | ||
9 | /** | 11 | /** |
10 | * App\Controller\GeneralController Test Case | 12 | * App\Controller\GeneralController Test Case |
@@ -13,11 +15,13 @@ class General extends IntegrationTestCase { | @@ -13,11 +15,13 @@ class General extends IntegrationTestCase { | ||
13 | 15 | ||
14 | 16 | ||
15 | //TODO: definine this in a superclass | 17 | //TODO: definine this in a superclass |
18 | + /* | ||
16 | const PROFILE_USER = 1; | 19 | const PROFILE_USER = 1; |
17 | const PROFILE_RESPONSABLE = 2; | 20 | const PROFILE_RESPONSABLE = 2; |
18 | const PROFILE_ADMIN = 3; | 21 | const PROFILE_ADMIN = 3; |
19 | const PROFILE_ADMINPLUS = 4; | 22 | const PROFILE_ADMINPLUS = 4; |
20 | const PROFILE_SUPERADMIN = 5; | 23 | const PROFILE_SUPERADMIN = 5; |
24 | + */ | ||
21 | protected $ROLES = [ | 25 | protected $ROLES = [ |
22 | 'USER', | 26 | 'USER', |
23 | 'RESP', | 27 | 'RESP', |
@@ -25,11 +29,100 @@ class General extends IntegrationTestCase { | @@ -25,11 +29,100 @@ class General extends IntegrationTestCase { | ||
25 | 'ADMINP', | 29 | 'ADMINP', |
26 | 'SUPER' | 30 | 'SUPER' |
27 | ]; | 31 | ]; |
32 | + | ||
33 | + const PROFILES = AppController::PROFILES; | ||
34 | + | ||
35 | + public static function getRoleLevel($role) { return AppController::getRoleLevel($role); } | ||
36 | + | ||
37 | + | ||
38 | + /* | ||
39 | + public $ControllerApp = null; | ||
40 | + public function setUp() { | ||
41 | + parent::setUp(); | ||
42 | + | ||
43 | + /* | ||
44 | + $config = TableRegistry::exists('Materiels') ? [] : [ | ||
45 | + 'className' => 'App\Model\Table\MaterielsTable' | ||
46 | + ]; | ||
47 | + $this->Materiels = TableRegistry::get('Materiels', $config); | ||
48 | + | ||
49 | + $config = TableRegistry::exists('Suivis') ? [] : [ | ||
50 | + 'className' => 'App\Model\Table\SuivisTable' | ||
51 | + ]; | ||
52 | + $this->Suivis = TableRegistry::get('Suivis', $config); | ||
53 | + */ /* | ||
28 | 54 | ||
55 | + $this->ControllerApp = new AppController(); | ||
56 | + } | ||
57 | + | ||
58 | + public function tearDown() { | ||
59 | + //unset($this->Materiels); | ||
60 | + //unset($this->Suivis); | ||
61 | + unset($this->ControllerApp); | ||
62 | + | ||
63 | + parent::tearDown(); | ||
64 | + } | ||
65 | + */ | ||
29 | 66 | ||
30 | - /* FONCTIONS UTILITAIRES UTILISÉES PAR LES TESTS */ | 67 | + |
68 | + /* FONCTIONS UTILITAIRES UTILISÉES PAR (tous) LES TESTS */ | ||
69 | + | ||
70 | + public function USER_IS_ADMIN_AT_LEAST($role) { | ||
71 | + return in_array($role, ['ADMIN','ADMINP','SUPER']); | ||
72 | + } | ||
73 | + | ||
74 | + public function authAs($role) { | ||
75 | + switch ($role) { | ||
76 | + case 'USER': $this->authUtilisateur(); | ||
77 | + break; | ||
78 | + case 'RESP': $this->authResponsable(); | ||
79 | + break; | ||
80 | + case 'ADMIN': $this->authAdmin(); | ||
81 | + break; | ||
82 | + case 'ADMINP': $this->authAdminPlus(); | ||
83 | + break; | ||
84 | + case 'SUPER': $this->authSuperAdmin(); | ||
85 | + break; | ||
86 | + } | ||
87 | + } | ||
88 | + | ||
89 | + public function authUser($cn, $givenName='test1', $sn='test2') { | ||
90 | + $user = [ | ||
91 | + 'Auth' => [ | ||
92 | + 'User' => [ | ||
93 | + 'sn' => [ | ||
94 | + 0 => $sn | ||
95 | + ], | ||
96 | + 'mail' => [ | ||
97 | + 0 => 'testa@test.fr' | ||
98 | + ], | ||
99 | + 'givenname' => [ | ||
100 | + 0 => $givenName | ||
101 | + ], | ||
102 | + 'cn' => [ | ||
103 | + 0 => $cn | ||
104 | + ], | ||
105 | + 'userpassword' => [ | ||
106 | + 0 => 'test' | ||
107 | + ] | ||
108 | + ] | ||
109 | + ] | ||
110 | + ]; | ||
111 | + $this->session($user); | ||
112 | + | ||
113 | + $authType = [ | ||
114 | + 'authType' => 'cn' | ||
115 | + ]; | ||
116 | + $this->session($authType); | ||
117 | + } | ||
31 | 118 | ||
32 | public function authSuperAdmin() { | 119 | public function authSuperAdmin() { |
120 | + $this->authUser('user1_SUPER', 'user1', 'SUPER'); | ||
121 | + //$this->authUser('user1_SUPER', 'test1', 'test2'); | ||
122 | + //$this->authUser('testa', 'user1', 'SUPER'); | ||
123 | + } | ||
124 | + /* | ||
125 | + public function authSuperAdmin() { | ||
33 | $user = [ | 126 | $user = [ |
34 | 'Auth' => [ | 127 | 'Auth' => [ |
35 | 'User' => [ | 128 | 'User' => [ |
@@ -59,9 +152,13 @@ class General extends IntegrationTestCase { | @@ -59,9 +152,13 @@ class General extends IntegrationTestCase { | ||
59 | ]; | 152 | ]; |
60 | $this->session($authType); | 153 | $this->session($authType); |
61 | } | 154 | } |
155 | + */ | ||
62 | 156 | ||
63 | public function authAdminPlus() { | 157 | public function authAdminPlus() { |
64 | - $user = [ | 158 | + $this->authUser('user2_ADMINPLUS', 'test3', 'test4'); |
159 | + } | ||
160 | + /* | ||
161 | + $user = [ | ||
65 | 'Auth' => [ | 162 | 'Auth' => [ |
66 | 'User' => [ | 163 | 'User' => [ |
67 | 'sn' => [ | 164 | 'sn' => [ |
@@ -90,8 +187,12 @@ class General extends IntegrationTestCase { | @@ -90,8 +187,12 @@ class General extends IntegrationTestCase { | ||
90 | ]; | 187 | ]; |
91 | $this->session($authType); | 188 | $this->session($authType); |
92 | } | 189 | } |
190 | + */ | ||
93 | 191 | ||
94 | public function authAdmin() { | 192 | public function authAdmin() { |
193 | + $this->authUser('user3_ADMIN', 'test5', 'test6'); | ||
194 | + } | ||
195 | + /* | ||
95 | $user = [ | 196 | $user = [ |
96 | 'Auth' => [ | 197 | 'Auth' => [ |
97 | 'User' => [ | 198 | 'User' => [ |
@@ -121,8 +222,12 @@ class General extends IntegrationTestCase { | @@ -121,8 +222,12 @@ class General extends IntegrationTestCase { | ||
121 | ]; | 222 | ]; |
122 | $this->session($authType); | 223 | $this->session($authType); |
123 | } | 224 | } |
225 | + */ | ||
124 | 226 | ||
125 | public function authResponsable() { | 227 | public function authResponsable() { |
228 | + $this->authUser('user4_RESP', 'test7', 'test8'); | ||
229 | + } | ||
230 | + /* | ||
126 | $user = [ | 231 | $user = [ |
127 | 'Auth' => [ | 232 | 'Auth' => [ |
128 | 'User' => [ | 233 | 'User' => [ |
@@ -152,9 +257,13 @@ class General extends IntegrationTestCase { | @@ -152,9 +257,13 @@ class General extends IntegrationTestCase { | ||
152 | ]; | 257 | ]; |
153 | $this->session($authType); | 258 | $this->session($authType); |
154 | } | 259 | } |
260 | + */ | ||
155 | 261 | ||
156 | public function authUtilisateur() { | 262 | public function authUtilisateur() { |
157 | - $user = [ | 263 | + $this->authUser('user5_USER', 'test9', 'test0'); |
264 | + } | ||
265 | + /* | ||
266 | + $user = [ | ||
158 | 'Auth' => [ | 267 | 'Auth' => [ |
159 | 'User' => [ | 268 | 'User' => [ |
160 | 'sn' => [ | 269 | 'sn' => [ |
@@ -183,5 +292,30 @@ class General extends IntegrationTestCase { | @@ -183,5 +292,30 @@ class General extends IntegrationTestCase { | ||
183 | ]; | 292 | ]; |
184 | $this->session($authType); | 293 | $this->session($authType); |
185 | } | 294 | } |
295 | + */ | ||
296 | + | ||
297 | + //protected function assertResponseContainsIf($role, $condition, $content, $messageIfNot=null) { | ||
298 | + //protected function assertResponseContainsIf(string $role, bool $condition, array $contents, $testOpposite=true) { | ||
299 | + protected function assertResponseContainsIf($role, $condition, array $contents, $testOpposite=true) { | ||
300 | + if ($condition) { | ||
301 | + $messageOnFail = 'devrait avoir accès'; | ||
302 | + $assertMethod = 'assertResponseContains'; | ||
303 | + } | ||
304 | + else { | ||
305 | + if (!$testOpposite) return; | ||
306 | + $messageOnFail = 'ne devrait PAS avoir accès'; | ||
307 | + $assertMethod = 'assertResponseNotContains'; | ||
308 | + } | ||
309 | + foreach ($contents as $content=>$endmsg) | ||
310 | + $this->$assertMethod($content, 'Le profil (rôle) '.$role.' '.$messageOnFail.' '.$endmsg); | ||
311 | + /* | ||
312 | + $this->assertResponseContains($content, 'Le profil (rôle) '.$role.' devrait avoir accès à '. $messageIfNot); | ||
313 | + } | ||
314 | + else { | ||
315 | + $this->assertResponseNotContains($content, 'Le profil (rôle) '.$role.' ne devrait PAS avoir accès à '. $messageIfNot); | ||
316 | + } | ||
317 | + */ | ||
318 | + } | ||
319 | + | ||
186 | 320 | ||
187 | } | 321 | } |
188 | \ No newline at end of file | 322 | \ No newline at end of file |
tests/TestCase/Controller/MaterielsControllerTest.php
@@ -13,6 +13,7 @@ use Cake\ORM\TableRegistry; | @@ -13,6 +13,7 @@ use Cake\ORM\TableRegistry; | ||
13 | class MaterielsControllerTest extends General { | 13 | class MaterielsControllerTest extends General { |
14 | //class MaterielsControllerTest extends IntegrationTestCase { | 14 | //class MaterielsControllerTest extends IntegrationTestCase { |
15 | 15 | ||
16 | + | ||
16 | /** | 17 | /** |
17 | * Fixtures | 18 | * Fixtures |
18 | * | 19 | * |
@@ -39,13 +40,44 @@ class MaterielsControllerTest extends General { | @@ -39,13 +40,44 @@ class MaterielsControllerTest extends General { | ||
39 | ]; | 40 | ]; |
40 | 41 | ||
41 | 42 | ||
43 | + /* | ||
42 | private $statuses = [ | 44 | private $statuses = [ |
43 | 'CREATED', | 45 | 'CREATED', |
44 | 'VALIDATED', | 46 | 'VALIDATED', |
45 | 'TOBEARCHIVED', | 47 | 'TOBEARCHIVED', |
46 | 'ARCHIVED' | 48 | 'ARCHIVED' |
47 | ]; | 49 | ]; |
50 | + */ | ||
51 | + private $STATUSES = MaterielsController::allStatus; | ||
52 | + | ||
53 | + const mandatoryFieldsForCreation = [ | ||
54 | + //'id', | ||
55 | + 'designation', | ||
56 | + 'sur_categorie_id', | ||
57 | + 'categorie_id', | ||
58 | + //'materiel_administratif', 'materiel_technique', | ||
59 | + //'status' => 'CREATED', | ||
60 | + 'date_acquisition' | ||
61 | + ]; | ||
62 | + | ||
63 | + private $newMaterielWithAllMandatoryFields = [ | ||
64 | + //'id' => 16, | ||
65 | + 'designation' => 'Test 15', | ||
66 | + 'sur_categorie_id' => 1, | ||
67 | + 'categorie_id' => 1, | ||
68 | + 'materiel_administratif' => 0, | ||
69 | + 'materiel_technique' => 1, | ||
70 | + //'status' => 'CREATED', | ||
71 | + 'date_acquisition' => '19-04-2016', | ||
72 | + /* | ||
73 | + 'nom_responsable' => 'Jacques Utilisateur', | ||
74 | + 'email_responsable' => 'Jacques.Utilisateur@irap.omp.eu' | ||
75 | + 'nom_createur' => 'Pallier Etienne', | ||
76 | + 'nom_modificateur' => 'Jean Administration', | ||
77 | + */ | ||
78 | + ]; | ||
48 | 79 | ||
80 | + | ||
49 | 81 | ||
50 | /* FONCTIONS UTILITAIRES UTILISÉES PAR LES TESTS */ | 82 | /* FONCTIONS UTILITAIRES UTILISÉES PAR LES TESTS */ |
51 | 83 | ||
@@ -201,7 +233,9 @@ class MaterielsControllerTest extends General { | @@ -201,7 +233,9 @@ class MaterielsControllerTest extends General { | ||
201 | } | 233 | } |
202 | 234 | ||
203 | */ | 235 | */ |
236 | + | ||
204 | 237 | ||
238 | + | ||
205 | /** | 239 | /** |
206 | * setUp method | 240 | * setUp method |
207 | * | 241 | * |
@@ -239,92 +273,95 @@ class MaterielsControllerTest extends General { | @@ -239,92 +273,95 @@ class MaterielsControllerTest extends General { | ||
239 | 273 | ||
240 | 274 | ||
241 | /* | 275 | /* |
242 | - * Tests organisés par ACTION | 276 | + * Tests organisés par (CONTROLEUR puis par) ACTION |
277 | + * | ||
278 | + * Ici, on teste les ACTIONS du controleur MaterielsController | ||
279 | + * Voir https://docs.google.com/document/d/1-OhEeoi96j6ueUl5NQCQ9ZsTfbJTFw3ZVaWU2iYly_o/edit#heading=h.bxuswhw2zzwt | ||
243 | * | 280 | * |
244 | - * Chaque test doit tester l'accès à cette ACTION pour chaque ROLE | 281 | + * Chaque test d'une ACTION doit tester l'appel de cette action pour chaque ROLE |
245 | * | 282 | * |
246 | - * Voir la liste des ACTIONS (à tester dans le même ordre ici) : | ||
247 | - * https://docs.google.com/document/d/1-OhEeoi96j6ueUl5NQCQ9ZsTfbJTFw3ZVaWU2iYly_o/edit#heading=h.u1v9mlc9wtqp | ||
248 | - */ | ||
249 | - | ||
250 | - /* | ||
251 | - * ************ CONTROLEUR PAGES ************* | ||
252 | - */ | ||
253 | - | ||
254 | - /* | ||
255 | - * ACTION "pages/about" : aller à la page "A propos" | ||
256 | - * + | ||
257 | - * ACTION "pages/home" : aller à l'Accueil | ||
258 | - * (avec ou sans connexion) | ||
259 | - */ | ||
260 | - | ||
261 | - /* | ||
262 | - * ACTION "pages/tools" : aller aux Outils | ||
263 | - */ | ||
264 | - | ||
265 | - | ||
266 | - /* | ||
267 | - * ************ CONTROLEUR USERS ************* | ||
268 | - */ | ||
269 | - | ||
270 | - /* | ||
271 | - * ACTION "users/login" : se connecter | ||
272 | - * + | ||
273 | - * ACTION "users/logout" : se déconnecter | ||
274 | - * (avec ou sans connexion) | ||
275 | - */ | ||
276 | - | ||
277 | - | ||
278 | - /* | ||
279 | - * ************ CONTROLEUR MATERIELS ************* | ||
280 | - * Voir | ||
281 | - * https://docs.google.com/document/d/1-OhEeoi96j6ueUl5NQCQ9ZsTfbJTFw3ZVaWU2iYly_o/edit#heading=h.bxuswhw2zzwt | ||
282 | */ | 283 | */ |
283 | 284 | ||
284 | - | ||
285 | 285 | ||
286 | - /* | ||
287 | - * I - ACTION READ | ||
288 | - * (1) READ ALL : "materiels/index" : Voir la liste des matériels | 286 | + /* |
287 | + * ***************************************************************************** | ||
288 | + * ACTION READ | ||
289 | + * (1) READ ALL (index) : Voir la liste des matériels | ||
290 | + * ***************************************************************************** | ||
289 | */ | 291 | */ |
290 | - | ||
291 | - public function testActionIndexGroup() { | ||
292 | - $this->testIndexNoAuth(); | ||
293 | - $this->testIndex(); | ||
294 | - } | ||
295 | 292 | ||
296 | /** | 293 | /** |
297 | - * Test index method if no authentified | ||
298 | - * | ||
299 | - * @return void | ||
300 | - */ | ||
301 | - public function testIndexNoAuth() { | ||
302 | - $this->get('/materiels/index'); | ||
303 | -// $this->assertRedirect('/users/login', 'Problème : Accès à materiels/index SANS AUTHENTIFICATION'); | ||
304 | -// Le changement est dû au changement de version de cakephp 3.2 vers 3.4 | ||
305 | - $this->assertRedirect('/users/login?redirect=%2Fmateriels%2Findex', 'Problème : Accès à materiels/index SANS AUTHENTIFICATION'); | ||
306 | - } | ||
307 | - | ||
308 | - /** | ||
309 | * Test index method | 294 | * Test index method |
310 | * | 295 | * |
311 | * @return void | 296 | * @return void |
312 | */ | 297 | */ |
313 | - public function testIndex() { | ||
314 | - $this->authSuperAdmin(); | ||
315 | - | ||
316 | - // 1) On doit pouvoir accéder à la page une fois authentifié | 298 | + public function testMat20ReadAll() { // test INDEX action |
299 | + foreach ($this->ROLES as $role) $this->_testMatReadAllAs($role); | ||
300 | + } | ||
301 | + | ||
302 | + private function _testMatReadAllAs($role) | ||
303 | + { | ||
304 | + $this->setUp(); | ||
305 | + | ||
306 | + // On doit pouvoir accéder à la page une fois authentifié | ||
307 | + $this->authAs($role); | ||
317 | $this->get('/materiels/index'); | 308 | $this->get('/materiels/index'); |
318 | $this->assertNoRedirect("Authentifié mais redirection vers /users/login."); | 309 | $this->assertNoRedirect("Authentifié mais redirection vers /users/login."); |
319 | 310 | ||
320 | - // 2) On doit avoir 7 matériels | ||
321 | - $this->assertResponseContains("Liste des matériels (7)", "Le nombre de materiels renvoyé est incorrect."); | 311 | + // Seul admin+ peut voir les materiels archivés et a accès à des filtres par statut + bouton exporter + cases à cocher |
312 | + //if ( in_array($role, ['ADMIN','ADMINP','SUPER']) ) { | ||
313 | + if ($this->USER_IS_ADMIN_AT_LEAST($role)) { | ||
314 | + $this->assertResponseContains('Liste des matériels (7)', 'Le profil '.$role.' devrait voir les matériels archivés.'); | ||
315 | + $this->assertResponseContains("A valider", 'Le profil '.$role.' devrait avoir accès à des filtres par statut.'); | ||
316 | + $this->assertResponseContains("A sortir", 'Le profil '.$role.' devrait avoir accès à des filtres par statut.'); | ||
317 | + } | ||
318 | + else { | ||
319 | + $this->assertResponseContains("Liste des matériels (6)", 'Le profil '.$role.' ne devrait PAS voir les matériels archivés.'); | ||
320 | + $this->assertResponseNotContains("A valider", 'Le profil '.$role.' ne devrait PAS avoir accès à des filtres par statut.'); | ||
321 | + } | ||
322 | + $this->assertResponseContainsIf($role, ($role != 'USER'), ["Exporter la liste complete"=>"un bouton Exporter"]); | ||
323 | + | ||
324 | + $this->get('/materiels/index/CREATED'); | ||
325 | + //TODO: il faudrait remplacer "false" par "true" dans ce test | ||
326 | + $this->assertResponseContainsIf( | ||
327 | + $role, | ||
328 | + //in_array($role,['ADMIN','ADMINP','SUPER']), | ||
329 | + $this->USER_IS_ADMIN_AT_LEAST($role), | ||
330 | + [ | ||
331 | + "checkbox" => "à des checkboxes", | ||
332 | + "Exporter la liste des matériels cochés" => "au bouton d\'exportation de liste", | ||
333 | + "Valider les matériels cochés" => "au bouton de validation de liste" | ||
334 | + ], | ||
335 | + false | ||
336 | + ); | ||
337 | + /* | ||
338 | + if ( in_array($role, ['ADMIN','ADMINP','SUPER']) ) { | ||
339 | + $this->assertResponseContains('checkbox', 'Le profil '.$role.' devrait avoir accès à des checkboxes'); | ||
340 | + $this->assertResponseContains("Exporter la liste des matériels cochés", 'Le profil '.$role.' devrait avoir accès au bouton d\'exportation de liste'); | ||
341 | + $this->assertResponseContains("Valider les matériels cochés", 'Le profil '.$role.' devrait avoir accès au bouton de validation de liste'); | ||
342 | + } | ||
343 | + else { | ||
344 | + } | ||
345 | + */ | ||
346 | + | ||
347 | + $this->tearDown(); | ||
322 | } | 348 | } |
323 | - | 349 | + public function testMat21ReadAllAsAnonymous() { // test INDEX action |
350 | + // On ne doit pas avoir accès sans authentification | ||
351 | + $this->get('/materiels/index'); | ||
352 | + // $this->assertRedirect('/users/login', 'Problème : Accès à materiels/index SANS AUTHENTIFICATION'); | ||
353 | + // Le changement est dû au changement de version de cakephp 3.2 vers 3.4 | ||
354 | + $this->assertRedirect('/users/login?redirect=%2Fmateriels%2Findex', 'Problème : Accès à materiels/index SANS AUTHENTIFICATION'); | ||
355 | + } | ||
356 | + | ||
357 | + | ||
358 | + | ||
324 | 359 | ||
325 | /* | 360 | /* |
326 | - * I - ACTION READ | ||
327 | - * (2) READ ONE : "materiels/view/id" : Voir le détail d'un matériel | 361 | + * ***************************************************************************** |
362 | + * ACTION READ | ||
363 | + * (2) READ ONE (view/id) : Voir le détail d'un matériel | ||
364 | + * ***************************************************************************** | ||
328 | */ | 365 | */ |
329 | 366 | ||
330 | /** | 367 | /** |
@@ -333,58 +370,155 @@ class MaterielsControllerTest extends General { | @@ -333,58 +370,155 @@ class MaterielsControllerTest extends General { | ||
333 | * @group failing | 370 | * @group failing |
334 | * @return void | 371 | * @return void |
335 | */ | 372 | */ |
336 | - public function testView() { | ||
337 | - $this->authSuperAdmin(); | 373 | + public function testMat10ReadOne() { // test VIEW action |
374 | + foreach ($this->ROLES as $role) $this->_testMatReadOneAs($role); | ||
375 | + } | ||
376 | + private function _testMatReadOneAs($role) | ||
377 | + { | ||
378 | + $this->setUp(); | ||
338 | 379 | ||
380 | + //$this->authSuperAdmin(); | ||
381 | + $this->authAs($role); | ||
339 | $this->get('/materiels/view/3'); | 382 | $this->get('/materiels/view/3'); |
340 | $this->assertResponseContains("Test 3", "Le matériel retourné n'est pas celui demandé."); | 383 | $this->assertResponseContains("Test 3", "Le matériel retourné n'est pas celui demandé."); |
384 | + $this->assertResponseContains('alt="QrCode', "Le QRCode n'est pas sur la vue matériel."); | ||
341 | $this->assertResponseContains("Suivi(s) du matériel (1)", "Le nb de suivis liés au matériel est incorrect."); | 385 | $this->assertResponseContains("Suivi(s) du matériel (1)", "Le nb de suivis liés au matériel est incorrect."); |
342 | $this->assertResponseContains("Emprunt(s) du matériel (1)", "Le nb d'emprunts liés au matériel est incorrect."); | 386 | $this->assertResponseContains("Emprunt(s) du matériel (1)", "Le nb d'emprunts liés au matériel est incorrect."); |
343 | $this->assertResponseContains("Fichier(s) lié(s) au matériel (1)", "Le nb de fichiers liés au matériel est incorrect."); | 387 | $this->assertResponseContains("Fichier(s) lié(s) au matériel (1)", "Le nb de fichiers liés au matériel est incorrect."); |
388 | + // Only admin+ see admin section: | ||
389 | + //if ( in_array($role, ['ADMIN','ADMINP','SUPER']) ) { | ||
390 | + if ($this->USER_IS_ADMIN_AT_LEAST($role)) { | ||
391 | + $this->assertResponseContains("Informations administratives"); | ||
392 | + $this->assertResponseContains("CentreFinancier/EOTP"); | ||
393 | + } | ||
394 | + else $this->assertResponseNotContains("Informations administratives"); | ||
395 | + | ||
396 | + $this->tearDown(); | ||
397 | + | ||
344 | } | 398 | } |
345 | - | 399 | + |
400 | + | ||
346 | 401 | ||
347 | /* | 402 | /* |
348 | - * II - ACTION CREATE | ||
349 | - * ACTION "materiels/add" : Créer un matériel | 403 | + * ***************************************************************************** |
404 | + * ACTION CREATE (add) : Créer un matériel | ||
405 | + * ***************************************************************************** | ||
350 | */ | 406 | */ |
351 | 407 | ||
352 | /** | 408 | /** |
353 | - * Test add method | 409 | + * Test testMat30AccessCreateForm |
354 | * | 410 | * |
355 | * @return void | 411 | * @return void |
356 | */ | 412 | */ |
357 | - public function testAdd() { | ||
358 | - $this->authSuperAdmin(); | ||
359 | - | ||
360 | - $data = [ | ||
361 | - 'id' => 15, | ||
362 | - 'designation' => 'Test 15', | ||
363 | - 'sur_categorie_id' => 1, | ||
364 | - 'categorie_id' => 1, | ||
365 | - 'materiel_administratif' => 0, | ||
366 | - 'materiel_technique' => 1, | ||
367 | - 'status' => 'CREATED', | ||
368 | - 'date_acquisition' => '19-04-2016', | ||
369 | - 'nom_createur' => 'Pallier Etienne', | ||
370 | - 'nom_modificateur' => 'Jean Administration', | ||
371 | - 'nom_responsable' => 'Jacques Utilisateur', | ||
372 | - 'email_responsable' => 'Jacques.Utilisateur@irap.omp.eu' | ||
373 | - ]; | ||
374 | - $this->post('/materiels/add', $data); | ||
375 | - | ||
376 | - $this->get('/materiels/index'); | ||
377 | - $this->assertResponseContains("Liste des matériels (8)", "Le matériel ne s'ajoute pas correctement."); | 413 | + public function testMat30AccessCreateForm() { |
414 | + foreach ($this->ROLES as $role) $this->_testMatAccessCreateFormAs($role); | ||
415 | + } | ||
416 | + | ||
417 | + private function _testMatAccessCreateFormAs($role) | ||
418 | + { | ||
419 | + $this->setUp(); | ||
378 | 420 | ||
379 | - $this->assertResponseContains("Test 15", "Le matériel ne s'ajoute pas correctement."); | ||
380 | - $this->assertResponseContains("TEST-2016-0015", "La génération du n°de labo n'est pas bonne."); | 421 | + // On doit pouvoir accéder à la page une fois authentifié |
422 | + $this->authAs($role); | ||
423 | + $this->get('/materiels/add'); | ||
424 | + $this->assertResponseContains('Ajouter', 'La page n\'existe pas'); | ||
425 | + $this->assertResponseContainsIf( | ||
426 | + $role, | ||
427 | + //in_array($role,['ADMIN', 'ADMINP', 'SUPER']), | ||
428 | + $this->USER_IS_ADMIN_AT_LEAST($role), | ||
429 | + ["EOTP" => "à la partie administrative sur le formulaire add"] | ||
430 | + ); | ||
431 | + /* | ||
432 | + $this->assertResponseNotContains('EOTP', 'Le profil utilisateur a accès à la partie administrative sur le formulaire add.'); | ||
433 | + $this->assertResponseContains('EOTP', 'Le profil admin+ n\'a pas accès à la partie administrative sur le formulaire add.'); | ||
434 | + */ | ||
435 | + | ||
436 | + $this->tearDown(); | ||
381 | } | 437 | } |
438 | + | ||
382 | 439 | ||
383 | /** | 440 | /** |
384 | - * Test valueNeccessaryNotEmpty method | 441 | + * Test testMat31Create |
385 | * | 442 | * |
386 | * @return void | 443 | * @return void |
387 | */ | 444 | */ |
445 | + public function testMat31CreateAsSuper() { $this->_testMatCreateAs('SUPER'); } | ||
446 | + public function testMat31CreateAsAdminp() { $this->_testMatCreateAs('ADMINP'); } | ||
447 | + public function testMat31CreateAsAdmin() { $this->_testMatCreateAs('ADMIN'); } | ||
448 | + public function testMat31CreateAsResp() { $this->_testMatCreateAs('RESP'); } | ||
449 | + public function testMat31CreateAsUser() { $this->_testMatCreateAs('USER'); } | ||
450 | + | ||
451 | + public function testMat32CreateAdministratifOrTechnicalAsSuper() { $this->_testMatCreateAdministratifOrTechnicalAs('SUPER'); } | ||
452 | + private function _testMatCreateAdministratifOrTechnicalAs($role) { | ||
453 | + $newMateriel = $this->newMaterielWithAllMandatoryFields; | ||
454 | + $fields = ['materiel_administratif','materiel_technique']; | ||
455 | + // test with materiel_administratif and materiel_technique, all combinations from (0,0) to (1,1) | ||
456 | + //for ($i=0,$j=0; $i<=1,$j<=1 ; $i++,$j++) { | ||
457 | + for ($i=0; $i<=1 ; $i++) { | ||
458 | + for ($j=0; $j<=1 ; $j++) { | ||
459 | + $newMateriel["$fields[0]"] = $i; | ||
460 | + $newMateriel["$fields[1]"] = $j; | ||
461 | + $combination = [$i,$j]; | ||
462 | + if ($combination == [0,0]) $this->_testMatCreate1FailsAs($role, $newMateriel, implode(',',$combination)); | ||
463 | + if ($combination == [0,1]) { | ||
464 | + // cree un nouveau materiel | ||
465 | + $this->_testMatCreateAs($role, $newMateriel, implode(',',$combination)); | ||
466 | + // supprimer un materiel pour avoir toujours le meme nombre | ||
467 | + //TODO: impossible de supprimer le matos 1, why ??? | ||
468 | + //$this->post('/materiels/delete/1'); | ||
469 | + $this->post('/materiels/delete/11'); | ||
470 | + $this->get('/materiels/index'); | ||
471 | + $nbmat = $this->USER_IS_ADMIN_AT_LEAST($role) ? 7 : 6; | ||
472 | + $this->assertResponseContains("Liste des matériels (".$nbmat.")", $role.','.implode($combination)); | ||
473 | + } | ||
474 | + // Administratif : (1,0) et (1,1) : ok si prix > 800 | ||
475 | + // No need to test the case [1,1] because same as [1,0] | ||
476 | + if ($combination == [1,0]) { | ||
477 | + //if ($i == 1) { | ||
478 | + | ||
479 | + // prix null => fails | ||
480 | + $this->_testMatCreate1FailsAs($role, $newMateriel, implode(',',$combination)); | ||
481 | + | ||
482 | + // prix < 800 => fails | ||
483 | + $newMateriel['prix_ht'] = 799; | ||
484 | + $this->_testMatCreate1FailsAs($role, $newMateriel, implode(',',$combination)); | ||
485 | + | ||
486 | + // prix >= 800 => ok | ||
487 | + $newMateriel['prix_ht'] = 800; | ||
488 | + $this->_testMatCreateAs($role, $newMateriel, implode(',',$combination)); | ||
489 | + /* | ||
490 | + // supprimer un materiel pour avoir toujours le meme nombre | ||
491 | + //TODO: impossible de supprimer le matos 1, why ??? | ||
492 | + //$this->post('/materiels/delete/1'); | ||
493 | + $this->post('/materiels/delete/2'); | ||
494 | + $this->get('/materiels/index'); | ||
495 | + $nbmat = $this->USER_IS_ADMIN_AT_LEAST($role) ? 7 : 6; | ||
496 | + $this->assertResponseContains("Liste des matériels (".$nbmat.")", $role.','.implode($combination)); | ||
497 | + */ | ||
498 | + } | ||
499 | + } | ||
500 | + } | ||
501 | + } | ||
502 | + | ||
503 | + private function _testMatCreateAs($role, $materiel=null) | ||
504 | + { | ||
505 | + $materiel = $materiel ? $this->newMaterielWithAllMandatoryFields : $materiel; | ||
506 | + //$this->setUp(); | ||
507 | + // On doit pouvoir accéder à la page une fois authentifié | ||
508 | + $this->authAs($role); | ||
509 | + $this->get('/materiels/index'); | ||
510 | + $nbmat = $this->USER_IS_ADMIN_AT_LEAST($role) ? 7 : 6; | ||
511 | + $this->assertResponseContains("Liste des matériels (".$nbmat.")", $role); | ||
512 | + $this->post('/materiels/add', $this->newMaterielWithAllMandatoryFields); | ||
513 | + $this->get('/materiels/index'); | ||
514 | + $nbmat++; | ||
515 | + $this->assertResponseContains("Liste des matériels (".$nbmat.")", $role." Le matériel ne s'ajoute pas correctement"); | ||
516 | + $this->assertResponseContains("Test 15", "Le matériel ne s'ajoute pas correctement."); | ||
517 | + $this->assertResponseContains("TEST-2016-0015", "La génération du n°de labo n'est pas bonne."); | ||
518 | + //$this->tearDown(); | ||
519 | + } | ||
520 | + | ||
521 | + /* | ||
388 | public function testValueNeccessaryNotEmpty() { | 522 | public function testValueNeccessaryNotEmpty() { |
389 | $this->authSuperAdmin(); | 523 | $this->authSuperAdmin(); |
390 | 524 | ||
@@ -407,8 +541,61 @@ class MaterielsControllerTest extends General { | @@ -407,8 +541,61 @@ class MaterielsControllerTest extends General { | ||
407 | $this->get('/materiels/index'); | 541 | $this->get('/materiels/index'); |
408 | $this->assertResponseContains("Liste des matériels (7)", "Le matériel s'ajoute alors que les champs obligatoires ne sont pas rempli."); | 542 | $this->assertResponseContains("Liste des matériels (7)", "Le matériel s'ajoute alors que les champs obligatoires ne sont pas rempli."); |
409 | } | 543 | } |
544 | + */ | ||
545 | + | ||
546 | + /** | ||
547 | + * Test testMat32CreateFails | ||
548 | + * | ||
549 | + * @return void | ||
550 | + */ | ||
551 | + public function testMat33CreateFailsAsSuper() { $this->_testMatCreateFailsAs('SUPER'); } | ||
552 | + public function testMat33CreateFailsAsUser() { $this->_testMatCreateFailsAs('USER'); } | ||
553 | + private function _testMatCreateFailsAs($role) { | ||
554 | + // test with each mandatory field except materiel_administratif and materiel_technique | ||
555 | + foreach (self::mandatoryFieldsForCreation as $mandatoryField) { | ||
556 | + $newMaterielWithMissingMandatoryFields = $this->newMaterielWithAllMandatoryFields; | ||
557 | + $newMaterielWithMissingMandatoryFields[$mandatoryField] = null; | ||
558 | + $this->_testMatCreate1FailsAs($role, $newMaterielWithMissingMandatoryFields, $mandatoryField); | ||
559 | + } | ||
560 | + // test with missing materiel_administratif AND materiel_technique null (equivalent to 0,0) | ||
561 | + $newMaterielWithMissingMandatoryFields = $this->newMaterielWithAllMandatoryFields; | ||
562 | + $fields = ['materiel_administratif','materiel_technique']; | ||
563 | + foreach ($fields as $f) $newMaterielWithMissingMandatoryFields["$f"] = null; | ||
564 | + $this->_testMatCreate1FailsAs($role, $newMaterielWithMissingMandatoryFields, implode(',',$fields)); | ||
565 | + } | ||
566 | + private function _testMatCreate1FailsAs($role, $newMaterielWithMissingMandatoryFields, $mandatoryField) { | ||
567 | + $this->setUp(); | ||
568 | + | ||
569 | + //$newMaterielWithMissingMandatoryFields = $this->newMaterielWithAllMandatoryFields; | ||
570 | + //$newMaterielWithMissingMandatoryFields['sur_categorie_id'] = null; | ||
571 | + /* Mandatory fields : | ||
572 | + 'id' => 15, | ||
573 | + 'designation' => 'Test 15', | ||
574 | + 'sur_categorie_id' => 1, | ||
575 | + 'categorie_id' => 1, | ||
576 | + 'materiel_administratif' => 0, | ||
577 | + 'materiel_technique' => 1, | ||
578 | + //'status' => 'CREATED', | ||
579 | + 'date_acquisition' => '19-04-2016', | ||
580 | + */ | ||
581 | + //$this->setUp(); | ||
582 | + // On doit pouvoir accéder à la page une fois authentifié | ||
583 | + $this->authAs($role); | ||
584 | + $this->get('/materiels/index'); | ||
585 | + $nbmat = $this->USER_IS_ADMIN_AT_LEAST($role) ? 7 : 6; | ||
586 | + $this->assertResponseContains("Liste des matériels (".$nbmat.")", $role.','.$mandatoryField); | ||
587 | + $this->post('/materiels/add', $newMaterielWithMissingMandatoryFields); | ||
588 | + $this->get('/materiels/index'); | ||
589 | + $this->assertResponseContains("Liste des matériels (".$nbmat.")", $role." Le matériel s'ajoute alors que le champ obligatoire ".$mandatoryField." n'est pas rempli"); | ||
590 | + | ||
591 | + $this->tearDown(); | ||
592 | + } | ||
593 | + | ||
594 | + | ||
410 | 595 | ||
411 | 596 | ||
597 | + | ||
598 | + | ||
412 | 599 | ||
413 | 600 | ||
414 | /* | 601 | /* |
@@ -422,19 +609,8 @@ class MaterielsControllerTest extends General { | @@ -422,19 +609,8 @@ class MaterielsControllerTest extends General { | ||
422 | */ | 609 | */ |
423 | 610 | ||
424 | public function testUpdate() { // ACTION 'edit' | 611 | public function testUpdate() { // ACTION 'edit' |
425 | - foreach ($this->ROLES as $role) { | ||
426 | - switch ($role) { | ||
427 | - case 'USER': $this->authUtilisateur(); | ||
428 | - break; | ||
429 | - case 'RESP': $this->authResponsable(); | ||
430 | - break; | ||
431 | - case 'ADMIN': $this->authAdmin(); | ||
432 | - break; | ||
433 | - case 'ADMINP': $this->authAdminPlus(); | ||
434 | - break; | ||
435 | - case 'SUPER': $this->authSuperAdmin(); | ||
436 | - break; | ||
437 | - } | 612 | + foreach ($this->ROLES as $role) { |
613 | + $this->authAs($role); | ||
438 | if ($role=='USER') continue; | 614 | if ($role=='USER') continue; |
439 | $this->_testUpdates($role); | 615 | $this->_testUpdates($role); |
440 | } // foreach | 616 | } // foreach |
@@ -542,10 +718,13 @@ class MaterielsControllerTest extends General { | @@ -542,10 +718,13 @@ class MaterielsControllerTest extends General { | ||
542 | public function testDelete() { | 718 | public function testDelete() { |
543 | $this->authSuperAdmin(); | 719 | $this->authSuperAdmin(); |
544 | 720 | ||
721 | + //TODO: impossible de supprimer le matos 1, why ??? | ||
722 | + //$this->post('/materiels/delete/1'); | ||
545 | $this->post('/materiels/delete/2'); | 723 | $this->post('/materiels/delete/2'); |
546 | $this->get('/materiels/index'); | 724 | $this->get('/materiels/index'); |
547 | $this->assertResponseContains("Liste des matériels (6)", "Le matériel n'as pas été supprimé."); | 725 | $this->assertResponseContains("Liste des matériels (6)", "Le matériel n'as pas été supprimé."); |
548 | $this->assertResponseNotContains("Test 2", "Le matériel n'as pas été supprimé."); | 726 | $this->assertResponseNotContains("Test 2", "Le matériel n'as pas été supprimé."); |
727 | + //$this->assertResponseNotContains("matos 1 USER", "Le matériel n'as pas été supprimé."); | ||
549 | } | 728 | } |
550 | 729 | ||
551 | /* | 730 | /* |
@@ -886,102 +1065,8 @@ class MaterielsControllerTest extends General { | @@ -886,102 +1065,8 @@ class MaterielsControllerTest extends General { | ||
886 | $this->assertResponseNotContains('ARCHIVED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); | 1065 | $this->assertResponseNotContains('ARCHIVED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); |
887 | } | 1066 | } |
888 | 1067 | ||
889 | - /** | ||
890 | - * Test PresenceQrCodeMateriel | ||
891 | - * | ||
892 | - * @return void | ||
893 | - */ | ||
894 | - public function testPresenceQrCodeMateriel() { | ||
895 | - $this->authSuperAdmin(); | ||
896 | - | ||
897 | - $this->get('/materiels/view/12'); | ||
898 | - | ||
899 | - $this->assertResponseContains('alt="QrCode', "Le QRCode n'est pas sur la vue matériel."); | ||
900 | - } | ||
901 | - | ||
902 | - /** | ||
903 | - * Test ACLViewUtilisateur | ||
904 | - * | ||
905 | - * @return void | ||
906 | - */ | ||
907 | - public function testACLViewUtilisateur() { | ||
908 | - $this->authUtilisateur(); | ||
909 | - | ||
910 | - $this->get('/materiels/view/12'); | ||
911 | - | ||
912 | - $this->assertResponseContains('Test 12', 'Le profil utilisateur ne peut pas lire la view correctement.'); | ||
913 | - | ||
914 | - $this->assertResponseNotContains('EOTP', 'Le profil utilisateur a accès à la partie administrative sur la view.'); | ||
915 | - } | ||
916 | - | ||
917 | - /** | ||
918 | - * Test ACLViewAdmin | ||
919 | - * | ||
920 | - * @return void | ||
921 | - */ | ||
922 | - public function testACLViewAdmin() { | ||
923 | - $this->authAdmin(); | ||
924 | - | ||
925 | - $this->get('/materiels/view/12'); | ||
926 | - | ||
927 | - $this->assertResponseContains('Test 12', 'Le profil admin+ ne peut pas lire la view correctement.'); | ||
928 | - | ||
929 | - $this->assertResponseContains('EOTP', 'Le profil admin+ n\'a pas accès à la partie administrative sur la view.'); | ||
930 | - } | ||
931 | - | ||
932 | - /** | ||
933 | - * Test ACLIndexUtilisateur | ||
934 | - * | ||
935 | - * @return void | ||
936 | - */ | ||
937 | - public function testACLIndexUtilisateur() { | ||
938 | - $this->authUtilisateur(); | ||
939 | - | ||
940 | - $this->get('/materiels/index'); | ||
941 | - | ||
942 | - $this->assertResponseContains('Liste des matériels (6)', 'Le profil utilisateur a accès aux matériels archivés.'); | ||
943 | - } | ||
944 | - | ||
945 | - /** | ||
946 | - * Test ACLIndexAdmin | ||
947 | - * | ||
948 | - * @return void | ||
949 | - */ | ||
950 | - public function testACLIndexAdmin() { | ||
951 | - $this->authAdmin(); | ||
952 | - | ||
953 | - $this->get('/materiels/index'); | ||
954 | - | ||
955 | - $this->assertResponseContains('Liste des matériels (7)', 'Le profil admin n\'a pas accès aux matériels archivés.'); | ||
956 | - } | ||
957 | - | ||
958 | - /** | ||
959 | - * Test ACLAddUtilisateur | ||
960 | - * | ||
961 | - * @return void | ||
962 | - */ | ||
963 | - public function testACLAddUtilisateur() { | ||
964 | - $this->authUtilisateur(); | ||
965 | - | ||
966 | - $this->get('/materiels/add'); | ||
967 | - | ||
968 | - $this->assertResponseContains('Ajouter', 'La page n\'existe pas'); | ||
969 | - $this->assertResponseNotContains('EOTP', 'Le profil utilisateur a accès à la partie administrative sur le formulaire add.'); | ||
970 | - } | ||
971 | - | ||
972 | - /** | ||
973 | - * Test ACLAddAdmin | ||
974 | - * | ||
975 | - * @return void | ||
976 | - */ | ||
977 | - public function testACLAddAdmin() { | ||
978 | - $this->authAdmin(); | ||
979 | - | ||
980 | - $this->get('/materiels/add'); | ||
981 | - | ||
982 | - $this->assertResponseContains('EOTP', 'Le profil admin+ n\'a pas accès à la partie administrative sur le formulaire add.'); | ||
983 | - } | ||
984 | 1068 | ||
1069 | + | ||
985 | /** | 1070 | /** |
986 | * Test ACLEditUtilisateur | 1071 | * Test ACLEditUtilisateur |
987 | * | 1072 | * |
tests/TestCase/Controller/PagesControllerTest.php
@@ -29,7 +29,8 @@ class PagesControllerTest extends General | @@ -29,7 +29,8 @@ class PagesControllerTest extends General | ||
29 | * @var array | 29 | * @var array |
30 | */ | 30 | */ |
31 | public $fixtures = [ | 31 | public $fixtures = [ |
32 | - 'app.configurations', | 32 | + 'app.users', |
33 | + 'app.configurations', | ||
33 | ]; | 34 | ]; |
34 | 35 | ||
35 | /* | 36 | /* |
@@ -59,17 +60,69 @@ class PagesControllerTest extends General | @@ -59,17 +60,69 @@ class PagesControllerTest extends General | ||
59 | * | 60 | * |
60 | * @return void | 61 | * @return void |
61 | */ | 62 | */ |
62 | - public function testDisplay() | ||
63 | - { | ||
64 | - //$this->authUser(); | ||
65 | - $this->authSuperAdmin(); | ||
66 | - | ||
67 | - $this->get('/pages/home'); | ||
68 | - $this->assertResponseOk(); | ||
69 | - $this->assertResponseContains('Accueil'); | ||
70 | 63 | ||
71 | - } | 64 | + public function testPage10AccessHome() { |
65 | + foreach ($this->ROLES as $role) $this->subtestPageAccessHomeAs($role); | ||
66 | + } | ||
67 | + //public function testDisplay() | ||
68 | + private function subtestPageAccessHomeAs($role) | ||
69 | + { | ||
70 | + //$this->authUser(); | ||
71 | + $this->authAs($role); | ||
72 | + | ||
73 | + $this->get('/pages/home'); | ||
74 | + $this->assertResponseOk(); | ||
75 | + $this->assertResponseContains('Accueil'); | ||
76 | + $this->assertResponseContains('Voir mes matériels'); | ||
72 | 77 | ||
78 | + switch ($role) { | ||
79 | + case 'USER': | ||
80 | + $this->assertResponseContains('Utilisateur'); | ||
81 | + //$configuration->procedure_sur_accueil = TRUE; | ||
82 | + $this->assertResponseContains('Procédure à suivre'); | ||
83 | + break; | ||
84 | + case 'RESP': | ||
85 | + break; | ||
86 | + case 'ADMIN': | ||
87 | + $this->assertResponseContains('Administration'); | ||
88 | + $this->assertResponseContains('Voir les matériels à valider'); | ||
89 | + break; | ||
90 | + case 'ADMINP': | ||
91 | + break; | ||
92 | + case 'SUPER': | ||
93 | + $this->assertResponseContains('Super Administrateur'); | ||
94 | + break; | ||
95 | + } | ||
96 | + | ||
97 | + } | ||
98 | + | ||
99 | + | ||
100 | + public function testPage20AccessTools() { | ||
101 | + foreach ($this->ROLES as $role) $this->subtestPageAccessToolsAs($role); | ||
102 | + } | ||
103 | + //public function testDisplay() | ||
104 | + private function subtestPageAccessToolsAs($role) | ||
105 | + { | ||
106 | + $this->authAs($role); | ||
107 | + $this->get('/pages/tools'); | ||
108 | + | ||
109 | + if ( in_array($role, ['ADMIN','ADMINP','SUPER']) ) { | ||
110 | + //if ( $this->userHasRoleAtLeast('Administration') ) { | ||
111 | + //if ( $this->ControllerApp->userHasRoleAtLeast('Administration') ) { | ||
112 | + $this->assertResponseOk(); | ||
113 | + $this->assertResponseContains('Outils', $role.' should be allowed to access the Tools page'); | ||
114 | + $this->assertResponseContains('Gérer le contenu variable de ', $role); | ||
115 | + if ($role == 'SUPER') | ||
116 | + $this->assertResponseContains('Passer en mode DEBUG'); | ||
117 | + else | ||
118 | + $this->assertResponseNotContains('Passer en mode DEBUG'); | ||
119 | + } | ||
120 | + else { | ||
121 | + $this->assertResponseNotContains('Outils', $role.' should not be allowed to access the Tools page'); | ||
122 | + } | ||
123 | + } | ||
124 | + | ||
125 | + | ||
73 | /** | 126 | /** |
74 | * Test that missing template renders 404 page in production | 127 | * Test that missing template renders 404 page in production |
75 | * | 128 | * |
tests/TestCase/Controller/UsersControllerTest.php
@@ -54,30 +54,62 @@ class UsersControllerTest extends General | @@ -54,30 +54,62 @@ class UsersControllerTest extends General | ||
54 | */ | 54 | */ |
55 | 55 | ||
56 | 56 | ||
57 | + | ||
58 | + /** | ||
59 | + * Test UNauthentified access to website | ||
60 | + * | ||
61 | + * By default, must have ONLY access to /about page, or /login page | ||
62 | + * | ||
63 | + * @return void | ||
64 | + */ | ||
65 | + public function testUser10AccessAsAnonymous() { | ||
66 | + $this->get('/pages/about'); | ||
67 | + $this->assertResponseContains('A PROPOS DU LOGICIEL', 'Un utilisateur NON authentifié devrait avoir accès à la page /about'); | ||
68 | + $this->get('/'); | ||
69 | + $this->assertRedirect('/users/login', 'Un utilisateur NON authentifié devrait etre redirigé sur la page de login'); | ||
70 | + } | ||
71 | + | ||
57 | /** | 72 | /** |
58 | * Test login method | 73 | * Test login method |
59 | * | 74 | * |
60 | * @return void | 75 | * @return void |
61 | */ | 76 | */ |
62 | - public function testLogin() | 77 | + public function testUser20LoginAsSuper() |
63 | { | 78 | { |
64 | $this->post('/users/login', ['ldap' => 'user1_SUPER', 'password' => 'test']); | 79 | $this->post('/users/login', ['ldap' => 'user1_SUPER', 'password' => 'test']); |
65 | - $this->assertRedirect('/pages/home', 'La connection de l\'utilisateur ne fonctionne pas correctement'); | 80 | + $this->assertRedirect('/pages/home', 'Un utilisateur privilégié devrait pouvoir se loguer'); |
66 | } | 81 | } |
67 | - | 82 | + public function testUser21LoginAsUser() |
83 | + { | ||
84 | + $this->post('/users/login', ['ldap' => 'user5_USER', 'password' => 'test']); | ||
85 | + $this->assertRedirect('/pages/home', 'Un utilisateur non privilégié devrait pouvoir se loguer'); | ||
86 | + } | ||
87 | + | ||
68 | 88 | ||
69 | /** | 89 | /** |
70 | * Test logout method | 90 | * Test logout method |
91 | + * TODO: ca marche pas, impossible de simuler un vrai logout, l'utilisateur est toujours connecté !!! | ||
71 | * | 92 | * |
72 | * @return void | 93 | * @return void |
73 | */ | 94 | */ |
74 | - public function testLogout() | 95 | + public function TODOtestUser30Logout() |
75 | { | 96 | { |
76 | //$this->authUser(); | 97 | //$this->authUser(); |
77 | $this->authSuperAdmin(); | 98 | $this->authSuperAdmin(); |
78 | - | ||
79 | - $this->post('/users/logout'); | ||
80 | - $this->assertRedirect('/pages/home', 'La déconnection de l\'utilisateur ne fonctionne pas correctement'); | 99 | + $this->get('/pages/home'); |
100 | + //$this->assertSession(1, 'Auth.User.id'); // Check user is logged in | ||
101 | + $this->assertSession('user1_SUPER', 'Auth.User.cn.0'); // Check user is logged in | ||
102 | + $this->assertSession(['SUPER'], 'Auth.User.sn'); // Check user is logged in | ||
103 | + | ||
104 | + $this->get('/users/logout'); | ||
105 | + $this->assertSession(null, 'Auth.User'); // Check user is logged out | ||
106 | + //unset($this->session); | ||
107 | + //$this->assertRedirect('/pages/home', 'Un utilisateur devrait pouvoir se déloguer'); | ||
108 | + //$this->get('/pages/home'); | ||
109 | + $this->assertRedirect('/users/login', 'Un utilisateur devrait pouvoir se déloguer et ainsi revenir sur la page login'); | ||
110 | + //$this->assertRedirect(['controller' => 'Users', 'action' => 'login']); | ||
111 | + $this->get('/materiels'); | ||
112 | + $this->assertResponseNotContains('Liste des', 'On devrait normalement etre dé-logué !!! or on ne l\'est pas'); | ||
81 | } | 113 | } |
82 | 114 | ||
83 | /** | 115 | /** |