diff --git a/Absence/Type/TypeController.php b/Absence/Type/TypeController.php index 8b716ff0..d0edfdeb 100644 --- a/Absence/Type/TypeController.php +++ b/Absence/Type/TypeController.php @@ -84,10 +84,7 @@ private function getList(IRequest $request, IResponse $response) } catch (\Exception $e) { return $this->getResponseError($response, $e); } - $entites = []; - foreach ($responseResources as $responseResource) { - $entites[] = $this->buildData($responseResource); - } + $entites = array_map([$this, 'buildData'], $responseResources); return $this->getResponseSuccess($response, $entites, 200); } diff --git a/Absence/Type/TypeDao.php b/Absence/Type/TypeDao.php index 91db62fb..c612e15f 100644 --- a/Absence/Type/TypeDao.php +++ b/Absence/Type/TypeDao.php @@ -61,11 +61,11 @@ public function getList(array $parametres) throw new \UnexpectedValueException('No resource match with these parameters'); } - $entites = []; - foreach ($data as $value) { - $entite = new TypeEntite($this->getStorage2Entite($value)); - $entites[$entite->getId()] = $entite; - } + $entites = array_map(function ($value) { + return new TypeEntite($this->getStorage2Entite($value)); + }, + $data + ); return $entites; } diff --git a/Groupe/GroupeController.php b/Groupe/GroupeController.php index 85609a40..0af4b13c 100644 --- a/Groupe/GroupeController.php +++ b/Groupe/GroupeController.php @@ -91,10 +91,7 @@ private function getList(IRequest $request, IResponse $response) } catch (\Exception $e) { return $this->getResponseError($response, $e); } - $entites = []; - foreach ($groupes as $groupe) { - $entites[] = $this->buildData($groupe); - } + $entites = array_map([$this, 'buildData'], $groupes); return $this->getResponseSuccess($response, $entites, 200); } diff --git a/Groupe/GroupeDao.php b/Groupe/GroupeDao.php index 2ce9c9b8..8616c344 100644 --- a/Groupe/GroupeDao.php +++ b/Groupe/GroupeDao.php @@ -64,11 +64,11 @@ public function getList(array $parametres) throw new \UnexpectedValueException('No resource match with these parameters'); } - $entites = []; - foreach ($data as $value) { - $entite = new GroupeEntite($this->getStorage2Entite($value)); - $entites[$entite->getId()] = $entite; - } + $entites = array_map(function ($value) { + return new GroupeEntite($this->getStorage2Entite($value)); + }, + $data + ); return $entites; } diff --git a/Groupe/GroupeEntite.php b/Groupe/GroupeEntite.php index 7801d8e4..40017b43 100644 --- a/Groupe/GroupeEntite.php +++ b/Groupe/GroupeEntite.php @@ -12,7 +12,7 @@ * @since 0.7 * @see \LibertAPI\Tests\Units\Groupe\GroupeEntite * - * Ne devrait être contacté que par le GroupeRepository + * Ne devrait être contacté que par le GroupeDao * Ne devrait contacter personne */ class GroupeEntite extends \LibertAPI\Tools\Libraries\AEntite diff --git a/Groupe/Responsable/ResponsableController.php b/Groupe/Responsable/ResponsableController.php new file mode 100644 index 00000000..986da937 --- /dev/null +++ b/Groupe/Responsable/ResponsableController.php @@ -0,0 +1,87 @@ + + * @author Wouldsmina + * + * @since 0.7 + * @see \Tests\Units\GroupeController + * + * Ne devrait être contacté que par le routeur + * Ne devrait contacter que le ResponsableRepository + */ +final class ResponsableController extends \LibertAPI\Tools\Libraries\AController +implements Interfaces\IGetable +{ + /** + * {@inheritDoc} + */ + protected function ensureAccessUser($order, UtilisateurEntite $utilisateur) + { + unset($order); + if (!$utilisateur->isAdmin()) { + throw new \LibertAPI\Tools\Exceptions\MissingRightException(''); + } + } + + /** + * {@inheritDoc} + */ + public function get(IRequest $request, IResponse $response, array $arguments) + { + unset($arguments); + try { + $this->ensureAccessUser(__FUNCTION__, $this->currentUser); + $groupes = $this->repository->getList( + $request->getQueryParams() + ); + } catch (\UnexpectedValueException $e) { + return $this->getResponseNoContent($response); + } catch (\LibertAPI\Tools\Exceptions\MissingRightException $e) { + return $this->getResponseForbidden($response, $request); + } catch (\Exception $e) { + return $this->getResponseError($response, $e); + } + $entites = array_map([$this, 'buildData'], $groupes); + + return $this->getResponseSuccess($response, $entites, 200); + } + + /** + * Construit le « data » du json + * + * @param UtilisateurEntite $entite Responsable + * + * @return array + */ + private function buildData(UtilisateurEntite $entite) + { + return [ + 'id' => $entite->getId(), + 'login' => $entite->getLogin(), + 'nom' => $entite->getNom(), + 'prenom' => $entite->getPrenom(), + 'isResp' => $entite->isResponsable(), + 'isAdmin' => $entite->isAdmin(), + 'isHr' => $entite->isHautReponsable(), + 'isActif' => $entite->isActif(), + 'password' => $entite->getMotDePasse(), + 'quotite' => $entite->getQuotite(), + 'email' => $entite->getMail(), + 'numeroExercice' => $entite->getNumeroExercice(), + 'planningId' => $entite->getPlanningId(), + 'heureSolde' => $entite->getHeureSolde(), + 'dateInscription' => $entite->getDateInscription(), + 'dateLastAccess' => $entite->getDateLastAccess(), + ]; + } +} diff --git a/Groupe/Responsable/ResponsableDao.php b/Groupe/Responsable/ResponsableDao.php new file mode 100644 index 00000000..335b9c38 --- /dev/null +++ b/Groupe/Responsable/ResponsableDao.php @@ -0,0 +1,148 @@ + + * @author Wouldsmina + * + * @since 0.7 + * + * Ne devrait être contacté que par ResponsableRepository + * Ne devrait contacter personne + */ +class ResponsableDao extends \LibertAPI\Tools\Libraries\ADao +{ + /************************************************* + * GET + *************************************************/ + + /** + * @inheritDoc + */ + public function getById($id) + { + throw new \RuntimeException('Action is forbidden'); + } + + /** + * @inheritDoc + */ + public function getList(array $parametres) + { + $this->queryBuilder->select('users.*, users.u_login AS id'); + $this->queryBuilder->innerJoin('current', 'conges_users', 'users', 'current.gr_login = u_login'); + $this->setWhere($parametres); + $res = $this->queryBuilder->execute(); + + $data = $res->fetchAll(\PDO::FETCH_ASSOC); + if (empty($data)) { + throw new \UnexpectedValueException('No resource match with these parameters'); + } + + $entites = array_map(function ($value) { + return new UtilisateurEntite($this->getStorage2Entite($value)); + }, $data); + + return $entites; + } + + /** + * @inheritDoc + * + * Duplication de la fonction dans UtilisateurDao (Cf. decisions.md #2018-02-17) + */ + final protected function getStorage2Entite(array $dataDao) + { + return [ + 'id' => $dataDao['id'], + 'login' => $dataDao['u_login'], + 'nom' => $dataDao['u_nom'], + 'prenom' => $dataDao['u_prenom'], + 'isResp' => $dataDao['u_is_resp'] === 'Y', + 'isAdmin' => $dataDao['u_is_admin'] === 'Y', + 'isHr' => $dataDao['u_is_hr'] === 'Y', + 'isActive' => $dataDao['u_is_active'] === 'Y', + 'seeAll' => $dataDao['u_see_all'] === 'Y', + 'password' => $dataDao['u_passwd'], + 'quotite' => $dataDao['u_quotite'], + 'email' => $dataDao['u_email'], + 'numeroExercice' => $dataDao['u_num_exercice'], + 'planningId' => $dataDao['planning_id'], + 'heureSolde' => $dataDao['u_heure_solde'], + 'dateInscription' => $dataDao['date_inscription'], + 'token' => $dataDao['token'], + 'dateLastAccess' => $dataDao['date_last_access'], + ]; + } + + /************************************************* + * POST + *************************************************/ + + /** + * @inheritDoc + */ + public function post(AEntite $entite) + { + throw new \RuntimeException('Action is forbidden'); + } + + /************************************************* + * PUT + *************************************************/ + + /** + * @inheritDoc + */ + public function put(AEntite $entite) + { + throw new \RuntimeException('Action is forbidden'); + } + + /** + * @inheritDoc + */ + final protected function getEntite2Storage(AEntite $entite) + { + return []; + } + + /************************************************* + * DELETE + *************************************************/ + + /** + * @inheritDoc + */ + public function delete($id) + { + throw new \RuntimeException('Action is forbidden'); + } + + /** + * Définit les filtres à appliquer à la requête + * + * @param array $parametres + * @example [filter => []] + */ + private function setWhere(array $parametres) + { + if (!empty($parametres['id'])) { + $this->queryBuilder->andWhere('g_gid = :id'); + $this->queryBuilder->setParameter(':id', (int) $parametres['id']); + } + } + + /** + * @inheritDoc + */ + final protected function getTableName() + { + return 'conges_groupe_resp'; + } +} diff --git a/Groupe/Responsable/ResponsableRepository.php b/Groupe/Responsable/ResponsableRepository.php new file mode 100644 index 00000000..6f52425c --- /dev/null +++ b/Groupe/Responsable/ResponsableRepository.php @@ -0,0 +1,73 @@ + + * @author Wouldsmina + * + * @since 0.5 + * @see \LibertAPI\Tests\Units\Groupe\ResponsableRepository + */ +class ResponsableRepository extends \LibertAPI\Tools\Libraries\ARepository +{ + /************************************************* + * GET + *************************************************/ + + /** + * @inheritDoc + */ + public function getOne($id) + { + throw new \RuntimeException('#' . $id . ' is not a callable resource'); + } + + /** + * @inheritDoc + */ + final protected function getParamsConsumer2Dao(array $paramsConsumer) + { + unset($paramsConsumer); + return []; + } + + /************************************************* + * POST + *************************************************/ + + /** + * @inheritDoc + */ + public function postOne(array $data, AEntite $entite) + { + throw new \RuntimeException('Action is forbidden'); + } + + /************************************************* + * PUT + *************************************************/ + + /** + * @inheritDoc + */ + public function putOne(array $data, AEntite $entite) + { + throw new \RuntimeException('Action is forbidden'); + } + + /************************************************* + * DELETE + *************************************************/ + + /** + * @inheritDoc + */ + public function deleteOne(AEntite $entite) + { + throw new \RuntimeException('Action is forbidden'); + } +} diff --git a/Journal/JournalController.php b/Journal/JournalController.php index b4f29d0f..31491829 100644 --- a/Journal/JournalController.php +++ b/Journal/JournalController.php @@ -34,7 +34,6 @@ protected function ensureAccessUser($order, \LibertAPI\Utilisateur\UtilisateurEn * @param array $arguments Arguments de route * * @return IResponse - * @throws \Exception en cas d'erreur inconnue (fallback, ne doit pas arriver) */ public function get(IRequest $request, IResponse $response, array $arguments) { @@ -46,13 +45,9 @@ public function get(IRequest $request, IResponse $response, array $arguments) } catch (\UnexpectedValueException $e) { return $this->getResponseNoContent($response); } catch (\Exception $e) { - throw $e; - } - - $entites = []; - foreach ($resources as $resource) { - $entites[] = $this->buildData($resource); + return $this->getResponseError($response, $e); } + $entites = array_map([$this, 'buildData'], $resources); return $this->getResponseSuccess($response, $entites, 200); } diff --git a/Journal/JournalDao.php b/Journal/JournalDao.php index 0f2d9cfb..1d4dfbb6 100644 --- a/Journal/JournalDao.php +++ b/Journal/JournalDao.php @@ -39,11 +39,9 @@ public function getList(array $parametres) throw new \UnexpectedValueException('No resource match with these parameters'); } - $entites = []; - foreach ($data as $value) { - $entite = new JournalEntite($this->getStorage2Entite($value)); - $entites[$entite->getId()] = $entite; - } + $entites = array_map(function ($value) { + return new JournalEntite($this->getStorage2Entite($value)); + }, $data); return $entites; } diff --git a/Planning/Creneau/CreneauController.php b/Planning/Creneau/CreneauController.php index d06c6872..ba64061d 100644 --- a/Planning/Creneau/CreneauController.php +++ b/Planning/Creneau/CreneauController.php @@ -85,10 +85,7 @@ private function getList(IResponse $response, $planningId) } catch (\Exception $e) { return $this->getResponseError($response, $e); } - $entites = []; - foreach ($creneaux as $creneau) { - $entites[] = $this->buildData($creneau); - } + $entites = array_map([$this, 'buildData'], $creneaux); return $this->getResponseSuccess($response, $entites, 200); } diff --git a/Planning/Creneau/CreneauEntite.php b/Planning/Creneau/CreneauEntite.php index f5522605..f92ea027 100644 --- a/Planning/Creneau/CreneauEntite.php +++ b/Planning/Creneau/CreneauEntite.php @@ -12,7 +12,7 @@ * @since 0.1 * @see \LibertAPI\Tests\Units\Planning\Creneau\Entite * - * Ne devrait être contacté que par le Planning\Creneau\Repository + * Ne devrait être contacté que par le Planning\Creneau\CreneauDao * Ne devrait contacter personne */ class CreneauEntite extends \LibertAPI\Tools\Libraries\AEntite diff --git a/Planning/PlanningController.php b/Planning/PlanningController.php index 97ff0568..cfbe1dc0 100644 --- a/Planning/PlanningController.php +++ b/Planning/PlanningController.php @@ -94,10 +94,7 @@ private function getList(IRequest $request, IResponse $response) } catch (\Exception $e) { return $this->getResponseError($response, $e); } - $entites = []; - foreach ($plannings as $planning) { - $entites[] = $this->buildData($planning); - } + $entites = array_map([$this, 'buildData'], $plannings); return $this->getResponseSuccess($response, $entites, 200); } diff --git a/Planning/PlanningEntite.php b/Planning/PlanningEntite.php index 7985ffe8..dc442dd1 100644 --- a/Planning/PlanningEntite.php +++ b/Planning/PlanningEntite.php @@ -12,7 +12,7 @@ * @since 0.1 * @see \LibertAPI\Tests\Units\Planning\PlanningEntite * - * Ne devrait être contacté que par le Planning\Repository + * Ne devrait être contacté que par le Planning\PlanningDao * Ne devrait contacter personne */ class PlanningEntite extends \LibertAPI\Tools\Libraries\AEntite diff --git a/Tests/Units/Groupe/Responsable/ResponsableController.php b/Tests/Units/Groupe/Responsable/ResponsableController.php new file mode 100644 index 00000000..d22af5ae --- /dev/null +++ b/Tests/Units/Groupe/Responsable/ResponsableController.php @@ -0,0 +1,121 @@ + + * @author Wouldsmina + * + * @since 0.7 + */ +final class ResponsableController extends \LibertAPI\Tests\Units\Tools\Libraries\AController +{ + /** + * @var UtilisateurEntite Standardisation d'un rôle admin + */ + protected $currentAdmin; + + /** + * {@inheritdoc} + */ + public function beforeTestMethod($method) + { + parent::beforeTestMethod($method); + $this->currentAdmin = new UtilisateurEntite(['id' => 'user', 'isAdmin' => true]); + } + + /** + * {@inheritdoc} + */ + protected function initRepository() + { + $this->mockGenerator->orphanize('__construct'); + $this->mockGenerator->shuntParentClassCalls(); + $this->repository = new \mock\LibertAPI\Groupe\Responsable\ResponsableRepository(); + } + + /** + * {@inheritdoc} + */ + protected function initEntite() + { + $this->entite = new \LibertAPI\Utilisateur\UtilisateurEntite([ + 'id' => 816, + 'login' => 'Spider-man', + 'nom' => 'Parker', + 'prenom' => 'Peter', + 'isResp' => 'N', + 'isAdmin' => 'N', + 'isHr' => 'N', + 'isActif' => 'Y', + 'seeAll' => 'N', + 'password' => 'MJ', + 'quotite' => '10', + 'email' => 'p.parker@dailybugle.com', + 'numeroExercice' => 3, + 'planningId' => 666, + 'heureSolde' => 1, + 'dateInscription' => '1-08-1962', + 'token' => '', + 'dateLastAccess' => '1-08-2006', + ]); + } + + /************************************************* + * GET + *************************************************/ + + /** + * Teste la méthode get d'une liste trouvée + */ + public function testGetFound() + { + $this->calling($this->request)->getQueryParams = []; + $this->calling($this->repository)->getList = [$this->entite,]; + $this->newTestedInstance($this->repository, $this->router, $this->currentAdmin); + $response = $this->testedInstance->get($this->request, $this->response, []); + $data = $this->getJsonDecoded($response->getBody()); + + $this->integer($response->getStatusCode())->isIdenticalTo(200); + $this->array($data) + ->integer['code']->isIdenticalTo(200) + ->string['status']->isIdenticalTo('success') + ->string['message']->isIdenticalTo('OK') + //->array['data']->hasSize(1) // TODO: l'asserter atoum en sucre syntaxique est buggé, faire un ticket + ; + $this->array($data['data'][0])->hasKey('id'); + } + + /** + * Teste la méthode get d'une liste non trouvée + */ + public function testGetNotFound() + { + $this->calling($this->request)->getQueryParams = []; + $this->calling($this->repository)->getList = function () { + throw new \UnexpectedValueException(''); + }; + $this->newTestedInstance($this->repository, $this->router, $this->currentAdmin); + $response = $this->testedInstance->get($this->request, $this->response, []); + + $this->assertSuccessEmpty($response); + } + + /** + * Teste le fallback de la méthode get d'une liste + */ + public function testGetFallback() + { + $this->calling($this->request)->getQueryParams = []; + $this->calling($this->repository)->getList = function () { + throw new \Exception(''); + }; + $this->newTestedInstance($this->repository, $this->router, $this->currentAdmin); + + $response = $this->testedInstance->get($this->request, $this->response, []); + $this->assertError($response); + } +} diff --git a/Tests/Units/Groupe/Responsable/ResponsableDao.php b/Tests/Units/Groupe/Responsable/ResponsableDao.php new file mode 100644 index 00000000..4d78531a --- /dev/null +++ b/Tests/Units/Groupe/Responsable/ResponsableDao.php @@ -0,0 +1,114 @@ + + * @author Wouldsmina + * + * @since 0.7 + */ +final class ResponsableDao extends \LibertAPI\Tests\Units\Tools\Libraries\ADao +{ + /************************************************* + * GET + *************************************************/ + + /** + * Teste la méthode getById avec un id non trouvé + */ + public function testGetByIdNotFound() + { + $this->exception(function () { + $this->newTestedInstance($this->connector)->getById(0); + }); + } + + /** + * Teste la méthode getById avec un id trouvé + */ + public function testGetByIdFound() + { + $this->exception(function () { + $this->newTestedInstance($this->connector)->getById(0); + }); + } + + /************************************************* + * POST + *************************************************/ + + /** + * Teste la méthode post quand tout est ok + */ + public function testPostOk() + { + $this->newTestedInstance($this->connector); + + $this->exception(function () { + $this->testedInstance->post(new UtilisateurEntite([])); + })->isInstanceOf(\RuntimeException::class); + } + + /************************************************* + * PUT + *************************************************/ + + /** + * Teste la méthode put quand tout est ok + */ + public function testPutOk() + { + $this->newTestedInstance($this->connector); + + $this->exception(function () { + $this->testedInstance->put(new UtilisateurEntite([])); + })->isInstanceOf(\RuntimeException::class); + } + + /************************************************* + * DELETE + *************************************************/ + + /** + * Teste la méthode delete + */ + public function testDeleteOk() + { + $this->newTestedInstance($this->connector); + + $this->exception(function () { + $this->testedInstance->delete([]); + })->isInstanceOf(\RuntimeException::class); + } + + /** + * Duplication de la fonction dans UtilisateurDao (Cf. decisions.md #2018-02-17) + */ + protected function getStorageContent() + { + return [ + 'id' => 'Aladdin', + 'token' => 'token', + 'date_last_access' => 'date_last_access', + 'u_login' => 'Aladdin', + 'u_prenom' => 'Aladdin', + 'u_nom' => 'Genie', + 'u_is_resp' => 'Y', + 'u_is_admin' => 'Y', + 'u_is_hr' => 'N', + 'u_is_active' => 'Y', + 'u_see_all' => 'Y', + 'u_passwd' => 'Sésame Ouvre toi', + 'u_quotite' => '21220', + 'u_email' => 'aladdin@example.org', + 'u_num_exercice' => '3', + 'planning_id' => 12, + 'u_heure_solde' => 1, + 'date_inscription' => 123456789, + ]; + } +} diff --git a/Tests/Units/Groupe/Responsable/ResponsableRepository.php b/Tests/Units/Groupe/Responsable/ResponsableRepository.php new file mode 100644 index 00000000..9eba57d9 --- /dev/null +++ b/Tests/Units/Groupe/Responsable/ResponsableRepository.php @@ -0,0 +1,100 @@ + + * @author Wouldsmina + * + * @since 0.5 + */ +final class ResponsableRepository extends \LibertAPI\Tests\Units\Tools\Libraries\ARepository +{ + protected function initDao() + { + $this->mockGenerator->orphanize('__construct'); + $this->mockGenerator->shuntParentClassCalls(); + $this->dao = new \mock\LibertAPI\Groupe\Responsable\ResponsableDao(); + } + + protected function initEntite() + { + $this->entite = new \LibertAPI\Utilisateur\UtilisateurEntite([]); + } + + /************************************************* + * GET + *************************************************/ + + /** + * Teste la méthode getOne + */ + public function testGetOne() + { + $this->calling($this->dao)->getById = []; + $this->newTestedInstance($this->dao); + + $this->exception(function () { + $this->testedInstance->getOne(99); + })->isInstanceOf(\RuntimeException::class); + } + + + /************************************************* + * POST + *************************************************/ + + /** + * Teste la méthode postOne + */ + public function testPostOne() + { + $this->newTestedInstance($this->dao); + + $this->exception(function () { + $this->testedInstance->postOne([], $this->entite); + })->isInstanceOf(\RuntimeException::class); + } + + /************************************************* + * PUT + *************************************************/ + + /** + * Teste la méthode putOne + */ + public function testPutOne() + { + $this->newTestedInstance($this->dao); + + $this->exception(function () { + $this->testedInstance->putOne([], $this->entite); + })->isInstanceOf(\RuntimeException::class); + } + + /************************************************* + * DELETE + *************************************************/ + + /** + * Teste la méthode deleteOne + */ + public function testDeleteOne() + { + $this->newTestedInstance($this->dao); + + $this->exception(function () { + $this->testedInstance->deleteOne($this->entite); + })->isInstanceOf(\RuntimeException::class); + } + + /** + * @inheritDoc + */ + protected function getEntiteContent() + { + return [ + ]; + } +} diff --git a/Tests/Units/Journal/JournalController.php b/Tests/Units/Journal/JournalController.php index 48f18158..6ecaed18 100644 --- a/Tests/Units/Journal/JournalController.php +++ b/Tests/Units/Journal/JournalController.php @@ -63,9 +63,7 @@ protected function initEntite() public function testGetFound() { $this->calling($this->request)->getQueryParams = []; - $this->calling($this->repository)->getList = [ - 42 => $this->entite, - ]; + $this->calling($this->repository)->getList = [$this->entite,]; $this->newTestedInstance($this->repository, $this->router, $this->currentEmploye); $response = $this->testedInstance->get($this->request, $this->response, []); $data = $this->getJsonDecoded($response->getBody()); @@ -106,8 +104,7 @@ public function testGetFallback() }; $this->newTestedInstance($this->repository, $this->router, $this->currentEmploye); - $this->exception(function () { - $this->testedInstance->get($this->request, $this->response, []); - })->isInstanceOf('\Exception'); + $response = $this->testedInstance->get($this->request, $this->response, []); + $this->assertError($response); } } diff --git a/Tests/Units/Journal/JournalDao.php b/Tests/Units/Journal/JournalDao.php index 3b75789c..01fc4c26 100644 --- a/Tests/Units/Journal/JournalDao.php +++ b/Tests/Units/Journal/JournalDao.php @@ -1,6 +1,8 @@ newTestedInstance($this->connector); $this->exception(function () { - $this->testedInstance->delete([]); + $this->testedInstance->post(new JournalEntite([])); })->isInstanceOf(\RuntimeException::class); } @@ -63,7 +65,7 @@ public function testPutOk() $this->newTestedInstance($this->connector); $this->exception(function () { - $this->testedInstance->delete([]); + $this->testedInstance->put(new JournalEntite([])); })->isInstanceOf(\RuntimeException::class); } diff --git a/Tests/Units/Planning/PlanningController.php b/Tests/Units/Planning/PlanningController.php index 23184323..a632263c 100644 --- a/Tests/Units/Planning/PlanningController.php +++ b/Tests/Units/Planning/PlanningController.php @@ -32,6 +32,10 @@ protected function initEntite() $this->entite->getMockController()->getStatus = 12; } + /************************************************* + * GET + *************************************************/ + /** * Teste la méthode get d'une liste avec des droits insuffisants */ diff --git a/Tests/Units/Tools/Libraries/ARestController.php b/Tests/Units/Tools/Libraries/ARestController.php index f799f567..0e00d770 100644 --- a/Tests/Units/Tools/Libraries/ARestController.php +++ b/Tests/Units/Tools/Libraries/ARestController.php @@ -99,9 +99,7 @@ abstract protected function getOne(); public function testGetListFound() { $this->request->getMockController()->getQueryParams = []; - $this->repository->getMockController()->getList = [ - 42 => $this->entite, - ]; + $this->repository->getMockController()->getList = [$this->entite,]; $this->newTestedInstance($this->repository, $this->router, $this->currentAdmin); $response = $this->getList(); diff --git a/Tools/Libraries/ADao.php b/Tools/Libraries/ADao.php index 5e41e833..58cf9bff 100644 --- a/Tools/Libraries/ADao.php +++ b/Tools/Libraries/ADao.php @@ -21,7 +21,7 @@ public function __construct(Driver\Connection $storageConnector) { $this->storageConnector = $storageConnector; $this->queryBuilder = $storageConnector->createQueryBuilder(); - $this->queryBuilder->from($this->getTableName()); + $this->queryBuilder->from($this->getTableName(), 'current'); } /** diff --git a/Tools/Route/Groupe.php b/Tools/Route/Groupe.php index 566ede35..eab0e1bd 100644 --- a/Tools/Route/Groupe.php +++ b/Tools/Route/Groupe.php @@ -10,6 +10,9 @@ $this->group('/{groupeId:[0-9]+}', function () { /* Detail */ $this->get('', 'controller:get')->setName('getGroupeDetail'); + + /* Dependances de groupe : responsable */ + $this->get('/responsable', 'controller:get')->setName('getGroupeResponsableListe'); }); /* Collection */ diff --git a/Utilisateur/UtilisateurController.php b/Utilisateur/UtilisateurController.php index 7d0ce1ab..ad2ecf56 100644 --- a/Utilisateur/UtilisateurController.php +++ b/Utilisateur/UtilisateurController.php @@ -97,10 +97,7 @@ private function getList(IRequest $request, IResponse $response) } catch (\Exception $e) { return $this->getResponseError($response, $e); } - $entites = []; - foreach ($utilisateurs as $utilisateur) { - $entites[] = $this->buildData($utilisateur); - } + $entites = array_map([$this, 'buildData'], $utilisateurs); return $this->getResponseSuccess($response, $entites, 200); } diff --git a/Utilisateur/UtilisateurDao.php b/Utilisateur/UtilisateurDao.php index 38aa0c4e..53312731 100644 --- a/Utilisateur/UtilisateurDao.php +++ b/Utilisateur/UtilisateurDao.php @@ -58,11 +58,9 @@ public function getList(array $parametres) throw new \UnexpectedValueException('No resource match with these parameters'); } - $entites = []; - foreach ($data as $value) { - $entite = new UtilisateurEntite($this->getStorage2Entite($value)); - $entites[$entite->getId()] = $entite; - } + $entites = array_map(function ($value) { + return new UtilisateurEntite($this->getStorage2Entite($value)); + }, $data); return $entites; } diff --git a/Utilisateur/UtilisateurEntite.php b/Utilisateur/UtilisateurEntite.php index ac2312f6..acf6333b 100644 --- a/Utilisateur/UtilisateurEntite.php +++ b/Utilisateur/UtilisateurEntite.php @@ -14,7 +14,7 @@ * @since 0.2 * @see \LibertAPI\Tests\Units\Utilisateur\Entite * - * Ne devrait être contacté que par le Utilisateur\Repository + * Ne devrait être contacté que par le Utilisateur\UtilisateurDao et Groupe\Responsable\ResponsableDao * Ne devrait contacter personne */ class UtilisateurEntite extends \LibertAPI\Tools\Libraries\AEntite diff --git a/decisions.md b/decisions.md index e5aebf84..22a92839 100644 --- a/decisions.md +++ b/decisions.md @@ -1,3 +1,8 @@ +## 2018-02-17 +* Dans le processus d'écriture de routes pour l'API, la table `conges_groupe_resp` fait apparaître une relation N-N ; problème, rien est encore fait dans ce sens et le [« package par feature »](http://www.codingthearchitecture.com/2015/03/08/package_by_component_and_architecturally_aligned_testing.html) nous ennuie un peu. Suivant la règle de 3 et le principe selon lequel on doit repousser les décisions importantes plus tard, je vise la simplicité et manipule l'entité « Utilisateur/UtilisateurEntite » suite à la requête. Quand nous en saurons plus on changera. + +~ Prytoegrian + ## 2017-11-04 * À l'origine, j'avais mis les routes au pluriel car la sémantique était meilleure (avec `GET /plannings`, je veux la liste des plannings), mais l'idée atteint ses limites quand on se confronte à la langue (ex : journaux). Obliger à tenir une map serait inutilement lourd, aussi je vais au plus simple et je mets toutes les routes au singulier. @@ -20,7 +25,7 @@ * Histoire de faciliter la transmission des connaissances et des intentions, j'amorce la création de ce fichier, en m'appuyant sur cette [proposition](http://akazlou.com/posts/2015-11-09-every-project-should-have-decisions.html). -* Convaincu de la nécessité de séparer les reponsabilités de l'application malgré une apparence de simplicité, je commence la création d'une API. +* Convaincu de la nécessité de séparer les responsabilités de l'application malgré une apparence de simplicité, je commence la création d'une API. L'un des risques qu'il pourrait y avoir est la dispersion et un ralentissement dans le processus de production, puisqu'il faut qu'un projet soit à jour pour que l'autre puisse avancer. Je suppose que ça ne sera vrai que le temps que l'API gagne en puissance.