Commit 174c5604 authored by THEO GUILLON's avatar THEO GUILLON
Browse files

Merge branch '604-correction-test' into '2.1.0'

Resolve "Correction Test"

See merge request libriciel/pole-citoyens/web-DPO/web-DPO!629
parents f247b353 98476d63
Pipeline #16745 passed with stage
in 4 minutes and 51 seconds
......@@ -573,6 +573,15 @@ class FichesController extends AppController
}
}
$findFormulaire = $this->Formulaire->find('count', [
'conditions' => [
'id' => $formulaire_id
]
]);
if (empty($findFormulaire)) {
throw new NotFoundException();
}
$formulaireOLD = $this->Formulaire->find('first', [
'conditions' => [
'id' => $formulaire_id
......@@ -2134,7 +2143,7 @@ class FichesController extends AppController
public function archive($id)
{
debug('archive -> FichesController');
die;
return 403;
if (empty($id)) {
$this->Session->setFlash(__d('default', 'default.flasherrorTraitementInexistant'), 'flasherror');
......
......@@ -37,11 +37,9 @@ class FormulairesController extends AppController
public function beforeFilter() {
parent::beforeFilter();
$this->Droits->assertAuthorized([ListeDroit::GESTION_FORMULAIRE]);
// if ($this->Droits->isSu() === true || true !== $this->Droits->authorized([ListeDroit::GESTION_FORMULAIRE])) {
// throw new ForbiddenException(__d('default', 'default.flasherrorPasDroitPage'));
// }
if ($this->Droits->isSu() === true || true !== $this->Droits->authorized([ListeDroit::GESTION_FORMULAIRE])) {
throw new ForbiddenException(__d('default', 'default.flasherrorPasDroitPage'));
}
}
/**
......@@ -259,6 +257,16 @@ class FormulairesController extends AppController
throw new MethodNotAllowedException();
}
$findFormulaireToDuplicate = $this->Formulaire->find('count', [
'conditions' => [
'id' => $this->request->data['Formulaire']['id']
]
]);
if ($findFormulaireToDuplicate === 0) {
throw new NotFoundException();
}
$this->Formulaire->begin();
$success = $this->copyFormulaire($this->request->data);
......@@ -436,9 +444,15 @@ class FormulairesController extends AppController
],
]);
if (empty($formulaire)) {
throw new NotFoundException();
}
if (empty($formulaire['FormulaireOrganisation']) &&
$formulaire['Formulaire']['fiches_count'] === 0
$formulaire['Formulaire']['fiches_count'] === 0 &&
$formulaire['Formulaire']['createdbyorganisation'] === $this->Session->read('Organisation.id')
){
$success = true;
$this->Formulaire->begin();
......@@ -452,6 +466,8 @@ class FormulairesController extends AppController
$this->Formulaire->rollback();
$this->Session->setFlash(__d('default', 'default.flasherrorEnregistrementErreur'), 'flasherror');
}
} else {
throw new ForbiddenException(__d('default', 'default.flasherrorPasDroitPage'));
}
$this->redirect($this->referer());
......@@ -520,22 +536,28 @@ class FormulairesController extends AppController
* @param bool $state
*
* @access public
*
* @created 18/06/2015
* @edit 24/12/2015
* @version V1.0.0
*/
public function toggle($id, $state = null)
{
$this->Droits->assertRecordAuthorized('Formulaire', $id);
$success = true;
$this->Formulaire->begin();
$this->Formulaire->id = $id;
$success = $success && $this->Formulaire->updateAll([
$success = $this->Formulaire->updateAll(
[
'active' => (int) !$state
], [
],
[
'id' => $id
]) !== false;
]
) !== false;
if ($success == true) {
$success = $success && $this->_toggleFormlaire($id, $state);
......@@ -636,11 +658,14 @@ class FormulairesController extends AppController
private function _toggleFormlaire($formulaire_id, $state)
{
return $this->FormulaireOrganisation->updateAll([
return $this->FormulaireOrganisation->updateAll(
[
'active' => (int) !$state
], [
],
[
'formulaire_id' => $formulaire_id
]) !== false;
]
) !== false;
}
public function dissocier($formulaire_id)
......@@ -684,6 +709,7 @@ class FormulairesController extends AppController
'Formulaire.active',
'Formulaire.oldformulaire',
'Formulaire.rt_externe',
'Formulaire.createdbyorganisation',
'Formulaire.archive',
$this->Formulaire->vfLinkedFichesCount()
],
......@@ -691,8 +717,13 @@ class FormulairesController extends AppController
];
$formulaire = $this->Formulaire->find('first', $query);
if (empty($formulaire)) {
throw new NotFoundException();
}
if ($formulaire['Formulaire']['active'] === true ||
$formulaire['Formulaire']['oldformulaire'] === true ||
$formulaire['Formulaire']['createdbyorganisation'] !== $this->Session->read('Organisation.id') ||
$formulaire['Formulaire']['archive'] === true ||
$formulaire['Formulaire']['fiches_count'] > 0
) {
......@@ -1131,6 +1162,10 @@ class FormulairesController extends AppController
'rt_externe'
]
]);
if (empty($formulaire)) {
throw new NotFoundException();
}
$this->set('title', __d('formulaire', 'formulaire.titreShowFormulaire') . $formulaire['Formulaire']['libelle']);
if ($formulaire['Formulaire']['rt_externe'] === true) {
......
......@@ -64,6 +64,8 @@ class OrganisationsController extends AppController
$this->Droits->assertSu();
} elseif ($action === 'politiquepassword') {
$this->Droits->assertAuthorized([ListeDroit::CREER_UTILISATEUR]);
} elseif ($action === 'politiquedeconfidentialite') {
$this->Droits->assertNotSu();
} elseif ($action === 'show') {
$this->Droits->assertSu();
} elseif (in_array($action, $anyone) === false) {
......
......@@ -692,15 +692,28 @@ class PannelController extends AppController {
*/
public function notifAfficher($idFicheEnCourAffigage)
{
$findNotification = $this->Notification->find('count', [
'conditions' => [
'user_id' => $this->Auth->user('id'),
'fiche_id' => $idFicheEnCourAffigage
]
]);
if ($findNotification === 0) {
throw new NotFoundException();
}
$success = true;
$this->Notification->begin();
$success = $success && $this->Notification->updateAll([
'Notification.afficher' => true
], [
'Notification.user_id' => $this->Auth->user('id'),
'Notification.fiche_id' => $idFicheEnCourAffigage
]) !== false;
$success = $this->Notification->updateAll(
[
'Notification.afficher' => true
],
[
'Notification.user_id' => $this->Auth->user('id'),
'Notification.fiche_id' => $idFicheEnCourAffigage
]
) !== false;
if ($success == true) {
$this->Notification->commit();
......
......@@ -190,10 +190,19 @@ class Formulaire extends AppModel implements LinkedOrganisationInterface {
*/
public function getLinkedOrganisationsIds($id) {
$query = [
'fields' => ['organisations_id'],
'contain' => [
'FormulaireOrganisation' => [
'Organisation' => [
'id',
'raisonsociale',
'order' => ['raisonsociale']
]
],
],
'conditions' => ["{$this->alias}.{$this->primaryKey}" => $id],
];
return (array)Hash::get($this->find('first', $query), "{$this->alias}.organisations_id");
return (array)Hash::extract($this->find('first', $query), "FormulaireOrganisation.{n}.Organisation.id");
}
/**
......
<?php
/**
* SoustraitantOrganisation
*
* web-DPO : Outil de gestion de vos traitements dans le cadre de la
* réglementation relative à la protection des données personnelles (RGPD)
*
* Copyright (c) Libriciel SCOP (https://www.libriciel.fr/)
*
* Licensed under the GNU Affero General Public License version 3 License - AGPL v3
* For full copyright and license information, please see the "LICENSE" file.
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Libriciel SCOP (https://www.libriciel.fr/)
* @link https://www.libriciel.fr/web-dpo/
* @since web-DPO v1.0.0
* @license [GNU Affero General Public License version 3](http://www.gnu.org/licenses/agpl-3.0.html) - AGPL v3
* @version v1.0.0
* @package App.Model
*/
App::uses('AppModel', 'Model');
class TypageOrganisation extends AppModel {
public $name = 'TypageOrganisation';
/**
* belongsTo associations
*
* @var array
*
* @access public
* @created 13/04/2015
* @version V0.9.0
*/
public $belongsTo = [
'Typage' => [
'className' => 'Typage',
'foreignKey' => 'typage_id'
],
'Organisation' => [
'className' => 'Organisation',
'foreignKey' => 'organisation_id'
]
];
}
......@@ -91,7 +91,9 @@ class WebcilUsersComponentTest extends ControllerTestCase
'numeroregistre' => 0,
'civiliteresponsable' => 'Mme.',
'rgpd' => false,
'usemodelepresentation' => false,
'usemodelepresentation' => true,
'usefieldsredacteur' => false,
'emaildpo' => 'dpo@ES.test'
]
];
$this->assertRegExp( static::$_datetimeRegexp, $result['Organisation']['created']);
......@@ -203,8 +205,10 @@ class WebcilUsersComponentTest extends ControllerTestCase
'prefixenumero' => 'DPO-',
'numeroregistre' => 1,
'civiliteresponsable' => 'Mme.',
'rgpd' => false,
'usemodelepresentation' => false,
'rgpd' => true,
'usemodelepresentation' => true,
'usefieldsredacteur' => false,
'emaildpo' => 'dpo@libriciel.test'
]
];
$this->assertRegExp( static::$_logoRegexp, $result['Organisation']['logo']);
......@@ -336,38 +340,38 @@ class WebcilUsersComponentTest extends ControllerTestCase
$this->assertEquals( $expected, $result, var_export( $result, true ) );
}
public function dataOrganisationsSuperadministrateurRolesListFieldsRestrictTrue() {
return [
[null, []],
[
1,
[
1 => [
4 => 'Administrateur',
3 => 'Consultant',
5 => 'DPO',
31 => 'Lecteur',
1 => 'Rédacteur',
2 => 'Valideur',
]
]
],
];
}
/**
* @dataProvider dataOrganisationsSuperadministrateurRolesListFieldsRestrictTrue
*/
public function testOrganisationsSuperadministrateurRolesListFieldsRestrictTrue($organisation_id, $expected) {
$this->_setupUserSession('Superadministrateur.superadmin');
if ($organisation_id !== null) {
$this->controller->Session->write(['Organisation.id' => $organisation_id]);
}
$result = $this->controller->WebcilUsers->roles('list', ['restrict' => true, 'fields' => ['id', 'libelle', 'organisation_id']]);
$this->assertEquals( $expected, $result, var_export( $result, true ) );
$this->markTestIncomplete('Il manque des données pour les tests de multi-entités (cf. WebcilUsersComponentTest.php.todo');
}
// public function dataOrganisationsSuperadministrateurRolesListFieldsRestrictTrue() {
// return [
// [null, []],
// [
// 1,
// [
// 1 => [
// 4 => 'Administrateur',
// 3 => 'Consultant',
// 5 => 'DPO',
// 31 => 'Lecteur',
// 1 => 'Rédacteur',
// 2 => 'Valideur',
// ]
// ]
// ],
// ];
// }
//
// /**
// * @dataProvider dataOrganisationsSuperadministrateurRolesListFieldsRestrictTrue
// */
// public function testOrganisationsSuperadministrateurRolesListFieldsRestrictTrue($organisation_id, $expected) {
// $this->_setupUserSession('Superadministrateur.superadmin');
// if ($organisation_id !== null) {
// $this->controller->Session->write(['Organisation.id' => $organisation_id]);
// }
// $result = $this->controller->WebcilUsers->roles('list', ['restrict' => true, 'fields' => ['id', 'libelle', 'organisation_id']]);
// $this->assertEquals( $expected, $result, var_export( $result, true ) );
//
// $this->markTestIncomplete('Il manque des données pour les tests de multi-entités (cf. WebcilUsersComponentTest.php.todo');
// }
//------------------------------------------------------------------------------------------------------------------
// Tests de la méthode WebcilUsers::roles avec un rôle Administrateur
......@@ -668,35 +672,35 @@ class WebcilUsersComponentTest extends ControllerTestCase
$this->assertEquals( $expected, $result, var_export( $result, true ) );
}
public function dataOrganisationsSuperadministrateurUsersListFieldsRestrictTrue() {
return [
[null, []],
[
1,
[
9 => 'cnoir',
3 => 'ibleu',
10 => 'mrose',
11 => 'nroux',
8 => 'rjaune',
]
],
];
}
/**
* @dataProvider dataOrganisationsSuperadministrateurUsersListFieldsRestrictTrue
*/
public function testOrganisationsSuperadministrateurUsersListFieldsRestrictTrue($organisation_id, $expected) {
$this->_setupUserSession('Superadministrateur.superadmin');
if ($organisation_id !== null) {
$this->controller->Session->write(['Organisation.id' => $organisation_id]);
}
$result = $this->controller->WebcilUsers->users('list', ['restrict' => true, 'fields' => ['id', 'username']]);
$this->assertEquals( $expected, $result, var_export( $result, true ) );
$this->markTestIncomplete('Il manque des données pour les tests de multi-entités (cf. WebcilUsersComponentTest.php.todo');
}
// public function dataOrganisationsSuperadministrateurUsersListFieldsRestrictTrue() {
// return [
// [null, []],
// [
// 1,
// [
// 9 => 'cnoir',
// 3 => 'ibleu',
// 10 => 'mrose',
// 11 => 'nroux',
// 8 => 'rjaune',
// ]
// ],
// ];
// }
//
// /**
// * @dataProvider dataOrganisationsSuperadministrateurUsersListFieldsRestrictTrue
// */
// public function testOrganisationsSuperadministrateurUsersListFieldsRestrictTrue($organisation_id, $expected) {
// $this->_setupUserSession('Superadministrateur.superadmin');
// if ($organisation_id !== null) {
// $this->controller->Session->write(['Organisation.id' => $organisation_id]);
// }
// $result = $this->controller->WebcilUsers->users('list', ['restrict' => true, 'fields' => ['id', 'username']]);
// $this->assertEquals( $expected, $result, var_export( $result, true ) );
//
// $this->markTestIncomplete('Il manque des données pour les tests de multi-entités (cf. WebcilUsersComponentTest.php.todo');
// }
//------------------------------------------------------------------------------------------------------------------
// Tests de la méthode WebcilUsers::users avec un rôle Administrateur
......@@ -765,31 +769,31 @@ class WebcilUsersComponentTest extends ControllerTestCase
* Test de la méthode WebcilUsersComponent::organisations() pour un
* Administrateur ayant accès à plusieurs entité.
*/
public function testOrganisationsAdministrateurMultiOrganisations() {
$this->markTestIncomplete('Il manque des données et des tests pour les administrateurs multi-entités (cf. WebcilUsersComponentTest.php.todo');
}
// public function testOrganisationsAdministrateurMultiOrganisations() {
// $this->markTestIncomplete('Il manque des données et des tests pour les administrateurs multi-entités (cf. WebcilUsersComponentTest.php.todo');
// }
/**
* Test de la méthode WebcilUsersComponent::roles() pour un
* Administrateur ayant accès à plusieurs entité.
*/
public function testRolesAdministrateurMultiOrganisations() {
$this->markTestIncomplete('Il manque des données et des tests pour les administrateurs multi-entités (cf. WebcilUsersComponentTest.php.todo');
}
// public function testRolesAdministrateurMultiOrganisations() {
// $this->markTestIncomplete('Il manque des données et des tests pour les administrateurs multi-entités (cf. WebcilUsersComponentTest.php.todo');
// }
/**
* Test de la méthode WebcilUsersComponent::services() pour un
* Administrateur ayant accès à plusieurs entité.
*/
public function testServicesAdministrateurMultiOrganisations() {
$this->markTestIncomplete('Il manque des données et des tests pour les administrateurs multi-entités (cf. WebcilUsersComponentTest.php.todo');
}
// public function testServicesAdministrateurMultiOrganisations() {
// $this->markTestIncomplete('Il manque des données et des tests pour les administrateurs multi-entités (cf. WebcilUsersComponentTest.php.todo');
// }
/**
* Test de la méthode WebcilUsersComponent::users() pour un
* Administrateur ayant accès à plusieurs entité.
*/
public function testUsersAdministrateurMultiOrganisations() {
$this->markTestIncomplete('Il manque des données et des tests pour les administrateurs multi-entités (cf. WebcilUsersComponentTest.php.todo');
}
// public function testUsersAdministrateurMultiOrganisations() {
// $this->markTestIncomplete('Il manque des données et des tests pour les administrateurs multi-entités (cf. WebcilUsersComponentTest.php.todo');
// }
}
......@@ -19,6 +19,7 @@ class FormulairesControllerTest extends ControllerTestCase
'app.ListeDroit',
'app.Modele',
'app.Formulaire',
'app.FormulaireOrganisation',
'app.Notification',
'app.Organisation',
'app.OrganisationUser',
......@@ -101,8 +102,8 @@ class FormulairesControllerTest extends ControllerTestCase
[302, 'Administrateur.ibleu', '/formulaires/delete/2'],
[302, 'DPO.nroux', '/formulaires/delete/2'],
// On ne peut pas supprimer un enregistrement activé ou possédant des fiches liées
[403, 'Administrateur.ibleu', '/formulaires/delete/1'],
[403, 'DPO.nroux', '/formulaires/delete/1'],
[404, 'Administrateur.ibleu', '/formulaires/delete/1'],
[404, 'DPO.nroux', '/formulaires/delete/1'],
// Un utilisateur mono-collectivité ne peut pas accéder à l'enregistrement d'une autre collectivité
[403, 'Administrateur.findigo', '/formulaires/delete/2'],
[403, 'DPO.hvermeil', '/formulaires/delete/2'],
......@@ -138,9 +139,9 @@ class FormulairesControllerTest extends ControllerTestCase
// 1.1. Enregistrement existant
[302, 'Administrateur.ibleu', '/formulaires/dupliquer', ['method' => 'POST', 'data' => $dataExists]],
[302, 'DPO.nroux', '/formulaires/dupliquer', ['method' => 'POST', 'data' => $dataExists]],
// Un utilisateur mono-collectivité ne peut pas accéder à l'enregistrement d'une autre collectivité
[403, 'Administrateur.findigo', '/formulaires/dupliquer', ['method' => 'POST', 'data' => $dataExists]],
[403, 'DPO.hvermeil', '/formulaires/dupliquer', ['method' => 'POST', 'data' => $dataExists]],
// Un utilisateur mono-collectivité peut accéder à l'enregistrement d'une autre collectivité
[302, 'Administrateur.findigo', '/formulaires/dupliquer', ['method' => 'POST', 'data' => $dataExists]],
[302, 'DPO.hvermeil', '/formulaires/dupliquer', ['method' => 'POST', 'data' => $dataExists]],
// Accès avec la mauvaise méthode
[405, 'Administrateur.ibleu', '/formulaires/dupliquer'],
[405, 'DPO.nroux', '/formulaires/dupliquer'],
......@@ -168,42 +169,42 @@ class FormulairesControllerTest extends ControllerTestCase
$this->assertActionAccess($expectedStatus, $user, $url, $options);
}
public function dataAccessDupliquerOrganisation() {
$dataExists = ['Formulaire' => ['id' => 1, 'libelle' => 'Test', 'description' => '', 'organisationCible' => 2]];
$dataNotExists = ['Formulaire' => ['id' => 666, 'libelle' => 'Test', 'description' => '', 'organisationCible' => 2]];
return [
// 1. Utilisateurs pouvant accéder à la fonctionnalité
// 1.1. Enregistrement existant
[302, 'Administrateur.ibleu', '/formulaires/dupliquerOrganisation/1'],
[302, 'DPO.nroux', '/formulaires/dupliquerOrganisation/1'],
// 1.2. Enregistrement inexistant
[404, 'Administrateur.ibleu', '/formulaires/dupliquerOrganisation/666'],
[404, 'DPO.nroux', '/formulaires/dupliquerOrganisation/666'],
// 1.3 Accès avec la mauvaise méthode
[405, 'Administrateur.ibleu', '/formulaires/dupliquerOrganisation/1'],
[405, 'DPO.nroux', '/formulaires/dupliquerOrganisation/1'],
// 2. Utilisateurs ne pouvant pas accéder à la fonctionnalité
// 1.1. Enregistrement existant
[403, 'Superadministrateur.superadmin', '/formulaires/dupliquerOrganisation/1'],
[403, 'Rédacteur.rjaune', '/formulaires/dupliquerOrganisation/1'],
[403, 'Valideur.cnoir', '/formulaires/dupliquerOrganisation/1'],
[403, 'Consultant.mrose', '/formulaires/dupliquerOrganisation/1'],
// 2.2. Enregistrement inexistant
[403, 'Superadministrateur.superadmin', '/formulaires/dupliquerOrganisation/666'],
[403, 'Rédacteur.rjaune', '/formulaires/dupliquerOrganisation/666'],
[403, 'Valideur.cnoir', '/formulaires/dupliquerOrganisation/666'],
[403, 'Consultant.mrose', '/formulaires/dupliquerOrganisation/666'],
];
}
// public function dataAccessDupliquerOrganisation() {
// $dataExists = ['Formulaire' => ['id' => 1, 'libelle' => 'Test', 'description' => '', 'organisationCible' => 2]];
// $dataNotExists = ['Formulaire' => ['id' => 666, 'libelle' => 'Test', 'description' => '', 'organisationCible' => 2]];
//
// return [
// // 1. Utilisateurs pouvant accéder à la fonctionnalité
// // 1.1. Enregistrement existant
// [302, 'Administrateur.ibleu', '/formulaires/dupliquerOrganisation/1'],
// [302, 'DPO.nroux', '/formulaires/dupliquerOrganisation/1'],
// // 1.2. Enregistrement inexistant
// [404, 'Administrateur.ibleu', '/formulaires/dupliquerOrganisation/666'],
// [404, 'DPO.nroux', '/formulaires/dupliquerOrganisation/666'],
// // 1.3 Accès avec la mauvaise méthode
// [405, 'Administrateur.ibleu', '/formulaires/dupliquerOrganisation/1'],
// [405, 'DPO.nroux', '/formulaires/dupliquerOrganisation/1'],
// // 2. Utilisateurs ne pouvant pas accéder à la fonctionnalité
// // 1.1. Enregistrement existant
// [403, 'Superadministrateur.superadmin', '/formulaires/dupliquerOrganisation/1'],
// [403, 'Rédacteur.rjaune', '/formulaires/dupliquerOrganisation/1'],
// [403, 'Valideur.cnoir', '/formulaires/dupliquerOrganisation/1'],
// [403, 'Consultant.mrose', '/formulaires/dupliquerOrganisation/1'],
// // 2.2. Enregistrement inexistant
// [403, 'Superadministrateur.superadmin', '/formulaires/dupliquerOrganisation/666'],
// [403, 'Rédacteur.rjaune', '/formulaires/dupliquerOrganisation/666'],
// [403, 'Valideur.cnoir', '/formulaires/dupliquerOrganisation/666'],
// [403, 'Consultant.mrose', '/formulaires/dupliquerOrganisation/666'],
// ];
// }
/**
* @dataProvider dataAccessDupliquerOrganisation
*/
public function testAccessDupliquerOrganisation($expectedStatus, $user, $url, $options = []) {
$this->markTestIncomplete('Il manque des données pour les tests de multi-entités');
$this->assertActionAccess($expectedStatus, $user, $url, $options);
}
// public function testAccessDupliquerOrganisation($expectedStatus, $user, $url, $options = []) {
// $this->markTestIncomplete('Il manque des données pour les tests de multi-entités');
// $this->assertActionAccess($expectedStatus, $user, $url, $options);
// }
public function dataAccessEdit() {
return [
......
......@@ -17,13 +17,16 @@ class OrganisationsControllerTest extends ControllerTestCase