From bc5f332e832b169c1b49351c199ef4ac6259025d Mon Sep 17 00:00:00 2001 From: Damien <damien.burel@maarch.org> Date: Mon, 19 Feb 2018 12:14:04 +0100 Subject: [PATCH] FEAT #75 List templates unit test --- core/Controllers/GroupController.php | 6 +- core/Test/ListTemplateControllerTest.php | 207 ++++++++++++++++++ phpunit.xml | 2 + .../controllers/ListTemplateController.php | 7 +- .../models/ListTemplateModelAbstract.php | 2 +- 5 files changed, 216 insertions(+), 8 deletions(-) create mode 100644 core/Test/ListTemplateControllerTest.php diff --git a/core/Controllers/GroupController.php b/core/Controllers/GroupController.php index 237426b543d..cbbab074d50 100644 --- a/core/Controllers/GroupController.php +++ b/core/Controllers/GroupController.php @@ -88,15 +88,17 @@ class GroupController } $data = $request->getParams(); - $check = Validator::stringType()->notEmpty()->validate($data['description']); $check = $check && Validator::stringType()->notEmpty()->validate($data['security']['where_clause']); $check = $check && Validator::stringType()->notEmpty()->validate($data['security']['maarch_comment']); - if (!$check) { return $response->withStatus(400)->withJson(['errors' => 'Bad Request']); } + if (!PreparedClauseController::isClauseValid(['clause' => $data['security']['where_clause'], 'userId' => $GLOBALS['userId']])) { + return $response->withStatus(400)->withJson(['errors' => _INVALID_CLAUSE]); + } + GroupModel::update(['id' => $aArgs['id'], 'description' => $data['description'], 'clause' => $data['security']['where_clause'], 'comment' => $data['security']['maarch_comment']]); return $response->withJson(['success' => 'success']); diff --git a/core/Test/ListTemplateControllerTest.php b/core/Test/ListTemplateControllerTest.php new file mode 100644 index 00000000000..89fa2c4a7ea --- /dev/null +++ b/core/Test/ListTemplateControllerTest.php @@ -0,0 +1,207 @@ +<?php + +/** +* Copyright Maarch since 2008 under licence GPLv3. +* See LICENCE.txt file at the root folder for more details. +* This file is part of Maarch software. +* +*/ + +use PHPUnit\Framework\TestCase; + +class ListTemplateControllerTest extends TestCase +{ + private static $id = null; + + public function testCreate() + { + $listTemplateController = new \Entity\controllers\ListTemplateController(); + + // CREATE + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'POST']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + + $aArgs = [ + 'object_type' => 'VISA_CIRCUIT', + 'title' => 'TEST-LISTTEMPLATE123-TITLE', + 'description' => 'TEST LISTTEMPLATE123 DESCRIPTION', + 'items' => [ + [ + 'sequence' => 0, + 'item_id' => 'bbain', + 'item_type' => 'user_id', + 'item_mode' => 'visa' + ], + [ + 'sequence' => 1, + 'item_id' => 'ssissoko', + 'item_type' => 'user_id', + 'item_mode' => 'visa' + ], + [ + 'sequence' => 0, + 'item_id' => 'bboule', + 'item_type' => 'user_id', + 'item_mode' => 'sign' + ] + ], + ]; + $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request); + + $response = $listTemplateController->create($fullRequest, new \Slim\Http\Response()); + $responseBody = json_decode((string)$response->getBody()); + + $this->assertSame('success', $responseBody->success); + + // READ + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + $response = $listTemplateController->get($request, new \Slim\Http\Response()); + $responseBody = json_decode((string)$response->getBody()); + + foreach ($responseBody->listTemplates as $listTemplate) { + if ($listTemplate->title == 'TEST-LISTTEMPLATE123-TITLE') { + self::$id = $listTemplate->id; + $this->assertSame('VISA_CIRCUIT', $listTemplate->object_type); + $this->assertSame('VISA_CIRCUIT_', substr($listTemplate->object_id, 0, 13)); + $this->assertSame('TEST LISTTEMPLATE123 DESCRIPTION', $listTemplate->description); + } + } + if (empty(self::$id)) { + $this->assertSame('Error', 'Creation failed'); + } + + // READ + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + $response = $listTemplateController->getById($request, new \Slim\Http\Response(), ['id' => self::$id]); + $responseBody = json_decode((string)$response->getBody()); + + $this->assertSame('VISA_CIRCUIT', $responseBody->listTemplate[0]->object_type); + $this->assertSame('TEST-LISTTEMPLATE123-TITLE', $responseBody->listTemplate[0]->title); + $this->assertSame('TEST LISTTEMPLATE123 DESCRIPTION', $responseBody->listTemplate[0]->description); + $this->assertSame(0, $responseBody->listTemplate[0]->sequence); + $this->assertSame('bbain', $responseBody->listTemplate[0]->item_id); + $this->assertSame('user_id', $responseBody->listTemplate[0]->item_type); + $this->assertSame('visa', $responseBody->listTemplate[0]->item_mode); + $this->assertSame('Y', $responseBody->listTemplate[0]->visible); + + $this->assertSame('VISA_CIRCUIT', $responseBody->listTemplate[1]->object_type); + $this->assertSame('TEST-LISTTEMPLATE123-TITLE', $responseBody->listTemplate[1]->title); + $this->assertSame('TEST LISTTEMPLATE123 DESCRIPTION', $responseBody->listTemplate[1]->description); + $this->assertSame(1, $responseBody->listTemplate[1]->sequence); + $this->assertSame('ssissoko', $responseBody->listTemplate[1]->item_id); + $this->assertSame('user_id', $responseBody->listTemplate[1]->item_type); + $this->assertSame('visa', $responseBody->listTemplate[1]->item_mode); + $this->assertSame('Y', $responseBody->listTemplate[1]->visible); + + $this->assertSame('VISA_CIRCUIT', $responseBody->listTemplate[2]->object_type); + $this->assertSame('TEST-LISTTEMPLATE123-TITLE', $responseBody->listTemplate[2]->title); + $this->assertSame('TEST LISTTEMPLATE123 DESCRIPTION', $responseBody->listTemplate[2]->description); + $this->assertSame(0, $responseBody->listTemplate[2]->sequence); + $this->assertSame('bboule', $responseBody->listTemplate[2]->item_id); + $this->assertSame('user_id', $responseBody->listTemplate[2]->item_type); + $this->assertSame('sign', $responseBody->listTemplate[2]->item_mode); + $this->assertSame('Y', $responseBody->listTemplate[2]->visible); + } + + public function testUpdate() + { + $listTemplateController = new \Entity\controllers\ListTemplateController(); + + // UPDATE + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'PUT']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + $aArgs = [ + 'title' => 'TEST-LISTTEMPLATE123-TITLE-UPDATED', + 'description' => 'TEST LISTTEMPLATE123 DESCRIPTION UPDATED', + 'items' => [ + [ + 'sequence' => 0, + 'item_id' => 'kkaar', + 'item_type' => 'user_id', + 'item_mode' => 'visa' + ], + [ + 'sequence' => 0, + 'item_id' => 'ppetit', + 'item_type' => 'user_id', + 'item_mode' => 'sign' + ] + ], + ]; + + $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request); + + $response = $listTemplateController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]); + $responseBody = json_decode((string)$response->getBody()); + + $this->assertSame('success', $responseBody->success); + + // READ + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + $response = $listTemplateController->get($request, new \Slim\Http\Response()); + $responseBody = json_decode((string)$response->getBody()); + + self::$id = null; + foreach ($responseBody->listTemplates as $listTemplate) { + if ($listTemplate->title == 'TEST-LISTTEMPLATE123-TITLE-UPDATED') { + self::$id = $listTemplate->id; + $this->assertSame('VISA_CIRCUIT', $listTemplate->object_type); + $this->assertSame('VISA_CIRCUIT_', substr($listTemplate->object_id, 0, 13)); + $this->assertSame('TEST LISTTEMPLATE123 DESCRIPTION UPDATED', $listTemplate->description); + } + } + if (empty(self::$id)) { + $this->assertSame('Error', 'Update failed'); + } + + // READ + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + $response = $listTemplateController->getById($request, new \Slim\Http\Response(), ['id' => self::$id]); + $responseBody = json_decode((string)$response->getBody()); + + $this->assertSame('VISA_CIRCUIT', $responseBody->listTemplate[0]->object_type); + $this->assertSame('TEST-LISTTEMPLATE123-TITLE-UPDATED', $responseBody->listTemplate[0]->title); + $this->assertSame('TEST LISTTEMPLATE123 DESCRIPTION UPDATED', $responseBody->listTemplate[0]->description); + $this->assertSame(0, $responseBody->listTemplate[0]->sequence); + $this->assertSame('kkaar', $responseBody->listTemplate[0]->item_id); + $this->assertSame('user_id', $responseBody->listTemplate[0]->item_type); + $this->assertSame('visa', $responseBody->listTemplate[0]->item_mode); + $this->assertSame('Y', $responseBody->listTemplate[0]->visible); + + $this->assertSame('VISA_CIRCUIT', $responseBody->listTemplate[1]->object_type); + $this->assertSame('TEST-LISTTEMPLATE123-TITLE-UPDATED', $responseBody->listTemplate[1]->title); + $this->assertSame('TEST LISTTEMPLATE123 DESCRIPTION UPDATED', $responseBody->listTemplate[1]->description); + $this->assertSame(0, $responseBody->listTemplate[1]->sequence); + $this->assertSame('ppetit', $responseBody->listTemplate[1]->item_id); + $this->assertSame('user_id', $responseBody->listTemplate[1]->item_type); + $this->assertSame('sign', $responseBody->listTemplate[1]->item_mode); + $this->assertSame('Y', $responseBody->listTemplate[1]->visible); + + $this->assertSame(null, $responseBody->listTemplate[2]); + } + + public function testDelete() + { + $listTemplateController = new \Entity\controllers\ListTemplateController(); + + // DELETE + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'DELETE']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + $response = $listTemplateController->delete($request, new \Slim\Http\Response(), ['id' => self::$id]); + $responseBody = json_decode((string)$response->getBody()); + + $this->assertSame('success', $responseBody->success); + + // READ + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + $response = $listTemplateController->getById($request, new \Slim\Http\Response(), ['id' => self::$id]); + $responseBody = json_decode((string)$response->getBody()); + + $this->assertSame('List template not found', $responseBody->errors); + } +} diff --git a/phpunit.xml b/phpunit.xml index 13e8d590d3d..a0616131b92 100755 --- a/phpunit.xml +++ b/phpunit.xml @@ -5,6 +5,8 @@ <!--directory>core/Test</directory--> <file>core/Test/ActionControllerTest.php</file> <file>core/Test/BasketControllerTest.php</file> + <file>core/Test/EntityControllerTest.php</file> + <file>core/Test/ListTemplateControllerTest.php</file> <file>core/Test/DoctypeControllerTest.php</file> <file>core/Test/NotificationControllerTest.php</file> <file>core/Test/NotificationScheduleControllerTest.php</file> diff --git a/src/app/entity/controllers/ListTemplateController.php b/src/app/entity/controllers/ListTemplateController.php index f905df46c5b..0dcd4ce204f 100644 --- a/src/app/entity/controllers/ListTemplateController.php +++ b/src/app/entity/controllers/ListTemplateController.php @@ -84,7 +84,7 @@ class ListTemplateController $data['object_id'] = $data['object_type'] . '_' . DatabaseModel::uniqueId(); } - $checkItems = ListTemplateController::checkItems(['item' => $data['items']]); + $checkItems = ListTemplateController::checkItems(['items' => $data['items']]); if (!empty($checkItems['errors'])) { return $response->withStatus(400)->withJson(['errors' => $checkItems['errors']]); } @@ -141,7 +141,7 @@ class ListTemplateController } } - $checkItems = ListTemplateController::checkItems(['item' => $data['items']]); + $checkItems = ListTemplateController::checkItems(['items' => $data['items']]); if (!empty($checkItems['errors'])) { return $response->withStatus(400)->withJson(['errors' => $checkItems['errors']]); } @@ -226,9 +226,6 @@ class ListTemplateController if (empty($item['item_mode'])) { return ['errors' => 'Item_mode is empty']; } - if (is_numeric($item['sequence'])) { - return ['errors' => 'Sequence is not numeric']; - } } return ['success' => 'success']; diff --git a/src/app/entity/models/ListTemplateModelAbstract.php b/src/app/entity/models/ListTemplateModelAbstract.php index 7efeac40d23..3c7b4bc3494 100644 --- a/src/app/entity/models/ListTemplateModelAbstract.php +++ b/src/app/entity/models/ListTemplateModelAbstract.php @@ -61,7 +61,7 @@ class ListTemplateModelAbstract public static function create(array $aArgs) { - ValidatorModel::notEmpty($aArgs, ['object_id', 'object_type', 'sequence', 'item_id', 'item_type', 'item_mode']); + ValidatorModel::notEmpty($aArgs, ['object_id', 'object_type', 'item_id', 'item_type', 'item_mode']); ValidatorModel::stringType($aArgs, ['object_id', 'object_type', 'item_id', 'item_type', 'title', 'description']); ValidatorModel::intVal($aArgs, ['sequence']); -- GitLab