From 08540e5b738c2ed4ca4c0c424d1c39e103bad0df Mon Sep 17 00:00:00 2001 From: Guillaume Heurtier <guillaume.heurtier@maarch.org> Date: Tue, 5 May 2020 16:46:12 +0200 Subject: [PATCH] FEAT #13676 TIME 6:15 improved list template unit tests --- phpunit.xml | 2 +- .../controllers/ListTemplateController.php | 4 +- .../app/entity/ListTemplateControllerTest.php | 918 +++++++++++++++++- 3 files changed, 911 insertions(+), 13 deletions(-) diff --git a/phpunit.xml b/phpunit.xml index 86f08623c6c..baf628b959e 100755 --- a/phpunit.xml +++ b/phpunit.xml @@ -19,7 +19,6 @@ <file>test/unitTests/app/entity/EntitySeparatorControllerTest.php</file> <file>test/unitTests/app/group/GroupControllerTest.php</file> <file>test/unitTests/app/group/PrivilegeControllerTest.php</file> - <file>test/unitTests/app/entity/ListTemplateControllerTest.php</file> <file>test/unitTests/app/indexingModel/IndexingModelControllerTest.php</file> <file>test/unitTests/app/notification/NotificationControllerTest.php</file> <file>test/unitTests/app/notification/NotificationScheduleControllerTest.php</file> @@ -27,6 +26,7 @@ <file>test/unitTests/app/priority/PriorityControllerTest.php</file> <file>test/unitTests/app/resource/ResControllerTest.php</file> <file>test/unitTests/app/resource/ResourceListControllerTest.php</file> + <file>test/unitTests/app/entity/ListTemplateControllerTest.php</file> <file>test/unitTests/app/indexing/IndexingControllerTest.php</file> <file>test/unitTests/app/resource/ExportControllerTest.php</file> <file>test/unitTests/app/resource/LinkControllerTest.php</file> diff --git a/src/app/entity/controllers/ListTemplateController.php b/src/app/entity/controllers/ListTemplateController.php index 9a7acc5fc78..a6f2fa14883 100755 --- a/src/app/entity/controllers/ListTemplateController.php +++ b/src/app/entity/controllers/ListTemplateController.php @@ -24,8 +24,6 @@ use Resource\models\ResModel; use Respect\Validation\Validator; use Slim\Http\Request; use Slim\Http\Response; -use SrcCore\models\CoreConfigModel; -use SrcCore\models\CurlModel; use SrcCore\models\DatabaseModel; use SrcCore\models\ValidatorModel; use User\models\UserModel; @@ -252,6 +250,8 @@ class ListTemplateController if (empty($listTemplate)) { return $response->withStatus(400)->withJson(['errors' => 'List template not found']); } + + $listTemplate['entityId'] = $listTemplate['entity_id']; if (empty($listTemplate['owner'])) { if (!PrivilegeController::hasPrivilege(['privilegeId' => 'manage_entities', 'userId' => $GLOBALS['id']]) && !empty($listTemplate['entityId'])) { return $response->withStatus(403)->withJson(['errors' => 'Service forbidden']); diff --git a/test/unitTests/app/entity/ListTemplateControllerTest.php b/test/unitTests/app/entity/ListTemplateControllerTest.php index f81b4e3320f..e68f7cec46d 100755 --- a/test/unitTests/app/entity/ListTemplateControllerTest.php +++ b/test/unitTests/app/entity/ListTemplateControllerTest.php @@ -21,7 +21,7 @@ class ListTemplateControllerTest extends TestCase $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'POST']); $request = \Slim\Http\Request::createFromEnvironment($environment); - $aArgs = [ + $body = [ 'type' => 'visaCircuit', 'title' => 'TEST-LISTTEMPLATE123-TITLE', 'description' => 'TEST LISTTEMPLATE123 DESCRIPTION', @@ -43,12 +43,12 @@ class ListTemplateControllerTest extends TestCase ] ], ]; - $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request); + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); - $aArgs = [ + $queryParams = [ 'admin' => true ]; - $fullRequest = $fullRequest->withQueryParams($aArgs); + $fullRequest = $fullRequest->withQueryParams($queryParams); $response = $listTemplateController->create($fullRequest, new \Slim\Http\Response()); $responseBody = json_decode((string)$response->getBody()); @@ -73,8 +73,6 @@ class ListTemplateControllerTest extends TestCase $this->assertNotEmpty(self::$id); // 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()); @@ -96,6 +94,224 @@ class ListTemplateControllerTest extends TestCase $this->assertSame(17, $responseBody->listTemplate->items[2]->item_id); $this->assertSame('user', $responseBody->listTemplate->items[2]->item_type); $this->assertSame('sign', $responseBody->listTemplate->items[2]->item_mode); + + // Errors + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'POST']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + + $body = [ + 'type' => 'raceCircuit', + 'title' => 'TEST-LISTTEMPLATE123-TITLE', + 'description' => 'TEST LISTTEMPLATE123 DESCRIPTION', + 'items' => [ + [ + 'id' => 5, + 'type' => 'user', + 'mode' => 'visa' + ], + [ + 'id' => 10, + 'type' => 'user', + 'mode' => 'visa' + ], + [ + 'id' => 17, + 'type' => 'user', + 'mode' => 'sign' + ] + ] + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $listTemplateController->create($fullRequest, new \Slim\Http\Response()); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Bad allowed types', $responseBody['errors']); + + $body = [ + 'type' => 'diffusionList', + 'title' => 'TEST-LISTTEMPLATE123-TITLE', + 'description' => 'TEST LISTTEMPLATE123 DESCRIPTION', + 'items' => [ + [ + 'id' => 5, + 'type' => 'user', + 'mode' => 'visa' + ], + [ + 'id' => 10, + 'type' => 'user', + 'mode' => 'visa' + ], + [ + 'id' => 17, + 'type' => 'user', + 'mode' => 'sign' + ] + ], + 'entityId' => 6 + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + $queryParams = [ + 'admin' => true + ]; + $fullRequest = $fullRequest->withQueryParams($queryParams); + $response = $listTemplateController->create($fullRequest, new \Slim\Http\Response()); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Entity is already linked to this type of template', $responseBody['errors']); + + $GLOBALS['login'] = 'bblier'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + + $body = [ + 'type' => 'visaCircuit', + 'title' => 'TEST-LISTTEMPLATE123-TITLE', + 'description' => 'TEST LISTTEMPLATE123 DESCRIPTION', + 'items' => [ + [ + 'id' => 5, + 'type' => 'user', + 'mode' => 'visa' + ], + [ + 'id' => 10, + 'type' => 'user', + 'mode' => 'visa' + ], + [ + 'id' => 17, + 'type' => 'user', + 'mode' => 'sign' + ] + ], + 'entityId' => 6 + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + $queryParams = [ + 'admin' => true + ]; + $fullRequest = $fullRequest->withQueryParams($queryParams); + $response = $listTemplateController->create($fullRequest, new \Slim\Http\Response()); + $this->assertSame(403, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Entity out of perimeter', $responseBody['errors']); + + $GLOBALS['login'] = 'superadmin'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + + $body = [ + 'type' => 'visaCircuit', + 'title' => 'TEST-LISTTEMPLATE123-TITLE', + 'description' => 'TEST LISTTEMPLATE123 DESCRIPTION', + 'items' => [ + [ + 'id' => 5, + 'type' => 'user', + 'mode' => 'visa' + ], + [ + 'id' => 10, + 'type' => 'user', + 'mode' => 'visa' + ], + [ + 'id' => 17, + 'mode' => 'visa' + ] + ], + 'entityId' => 6 + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + $queryParams = [ + 'admin' => true + ]; + $fullRequest = $fullRequest->withQueryParams($queryParams); + $response = $listTemplateController->create($fullRequest, new \Slim\Http\Response()); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('type is empty', $responseBody['errors']); + + $GLOBALS['login'] = 'ddur'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + + // Mode not admin + $body = [ + 'type' => 'visaCircuit', + 'title' => 'TEST-LISTTEMPLATE123-TITLE', + 'description' => 'TEST LISTTEMPLATE123 DESCRIPTION', + 'items' => [ + [ + 'id' => 5, + 'type' => 'user', + 'mode' => 'visa' + ], + [ + 'id' => 10, + 'type' => 'user', + 'mode' => 'visa' + ], + [ + 'id' => 17, + 'type' => 'user', + 'mode' => 'sign' + ] + ] + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $listTemplateController->create($fullRequest, new \Slim\Http\Response()); + $this->assertSame(403, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Service forbidden', $responseBody['errors']); + + $body['type'] = 'diffusionList'; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $listTemplateController->create($fullRequest, new \Slim\Http\Response()); + $this->assertSame(403, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Service forbidden', $responseBody['errors']); + + $body['type'] = 'opinionCircuit'; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $listTemplateController->create($fullRequest, new \Slim\Http\Response()); + $this->assertSame(403, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Service forbidden', $responseBody['errors']); + + // Mode admin + $body['entityId'] = 21; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + $queryParams = [ + 'admin' => true + ]; + $fullRequest = $fullRequest->withQueryParams($queryParams); + + $response = $listTemplateController->create($fullRequest, new \Slim\Http\Response()); + $this->assertSame(403, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Service forbidden', $responseBody['errors']); + + unset($body['entityId']); + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + $queryParams = [ + 'admin' => true + ]; + $fullRequest = $fullRequest->withQueryParams($queryParams); + + $response = $listTemplateController->create($fullRequest, new \Slim\Http\Response()); + $this->assertSame(403, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Service forbidden', $responseBody['errors']); + + $GLOBALS['login'] = 'superadmin'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; } public function testUpdate() @@ -125,8 +341,6 @@ class ListTemplateControllerTest extends TestCase $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request); $response = $listTemplateController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]); - $responseBody = json_decode((string)$response->getBody()); - $this->assertSame(204, $response->getStatusCode()); // READ @@ -167,18 +381,702 @@ class ListTemplateControllerTest extends TestCase $this->assertSame('sign', $responseBody->listTemplate->items[1]->item_mode); $this->assertSame(null, $responseBody->listTemplate->items[2]); + + // Errors + $aArgs = [ + 'title' => '', + 'description' => 'TEST LISTTEMPLATE123 DESCRIPTION UPDATED', + 'items' => [ + [ + 'id' => 10, + 'type' => 'user', + 'mode' => 'visa' + ], + [ + 'id' => 17, + 'type' => 'user', + 'mode' => 'sign' + ] + ], + ]; + + $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request); + + $response = $listTemplateController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Bad Request', $responseBody['errors']); + + $GLOBALS['login'] = 'ddur'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + + $aArgs = [ + 'title' => 'TEST', + 'description' => 'TEST LISTTEMPLATE123 DESCRIPTION UPDATED', + 'items' => [ + [ + 'id' => 10, + 'type' => 'user', + 'mode' => 'visa' + ], + [ + 'id' => 17, + 'type' => 'user', + 'mode' => 'sign' + ] + ], + ]; + $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request); + + $response = $listTemplateController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(403, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Service forbidden', $responseBody['errors']); + + \Entity\models\ListTemplateModel::update([ + 'set' => ['entity_id' => 6], + 'where' => ['id = ?'], + 'data' => [self::$id] + ]); + + $response = $listTemplateController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(403, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Service forbidden', $responseBody['errors']); + + $GLOBALS['login'] = 'bblier'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + + $response = $listTemplateController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id * 1000]); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('List template not found', $responseBody['errors']); + + $response = $listTemplateController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(403, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Entity out of perimeter', $responseBody['errors']); + + \Entity\models\ListTemplateModel::update([ + 'set' => ['entity_id' => null], + 'where' => ['id = ?'], + 'data' => [self::$id] + ]); + + $GLOBALS['login'] = 'superadmin'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + + // test control items + $body = [ + 'type' => 'visaCircuit', + 'title' => 'TEST-LISTTEMPLATE123-TITLE', + 'description' => 'TEST LISTTEMPLATE123 DESCRIPTION', + 'items' => [ + [ + 'id' => 5, + 'type' => 'user', + 'mode' => 'visa' + ], + [ + 'id' => 10, + 'type' => 'user', + 'mode' => 'visa' + ], + [ + 'type' => 'user', + 'mode' => 'visa' + ] + ], + 'entityId' => 6 + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $listTemplateController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('id is empty', $responseBody['errors']); + + $body = [ + 'type' => 'visaCircuit', + 'title' => 'TEST-LISTTEMPLATE123-TITLE', + 'description' => 'TEST LISTTEMPLATE123 DESCRIPTION', + 'items' => [ + [ + 'id' => 5, + 'type' => 'user', + ], + [ + 'id' => 10, + 'type' => 'user', + 'mode' => 'visa' + ], + [ + 'type' => 'user', + 'mode' => 'visa' + ] + ], + 'entityId' => 6 + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $listTemplateController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('mode is empty', $responseBody['errors']); + + $body = [ + 'type' => 'diffusionList', + 'title' => 'TEST-LISTTEMPLATE123-TITLE', + 'description' => 'TEST LISTTEMPLATE123 DESCRIPTION', + 'items' => [ + [ + 'id' => 5, + 'type' => 'user', + 'mode' => 'dest' + ], + [ + 'id' => 10, + 'type' => 'user', + 'mode' => 'dest' + ], + [ + 'id' => 17, + 'type' => 'user', + 'mode' => 'sign' + ] + ] + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $listTemplateController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Dest user is not present in this entity', $responseBody['errors']); + + \Entity\models\ListTemplateModel::update([ + 'set' => ['entity_id' => 4, 'type' => 'opinionCircuit'], + 'where' => ['id = ?'], + 'data' => [self::$id] + ]); + + $body = [ + 'type' => 'opinionCircuit', + 'title' => 'TEST-LISTTEMPLATE123-TITLE', + 'description' => 'TEST LISTTEMPLATE123 DESCRIPTION', + 'items' => [ + [ + 'id' => 8, + 'type' => 'user', + 'mode' => 'dest' + ], + [ + 'id' => 17, + 'type' => 'user', + 'mode' => 'dest' + ] + ] + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $listTemplateController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('item has not enough privileges', $responseBody['errors']); + + \Entity\models\ListTemplateModel::update([ + 'set' => ['type' => 'visaCircuit'], + 'where' => ['id = ?'], + 'data' => [self::$id] + ]); + + $body = [ + 'type' => 'visaCircuit', + 'title' => 'TEST-LISTTEMPLATE123-TITLE', + 'description' => 'TEST LISTTEMPLATE123 DESCRIPTION', + 'items' => [ + [ + 'id' => 8, + 'type' => 'user', + 'mode' => 'dest' + ], + [ + 'id' => 17, + 'type' => 'user', + 'mode' => 'dest' + ] + ] + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $listTemplateController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('item has not enough privileges', $responseBody['errors']); + + \Entity\models\ListTemplateModel::update([ + 'set' => ['entity_id' => 1], + 'where' => ['id = ?'], + 'data' => [self::$id] + ]); + + $body = [ + 'type' => 'diffusionList', + 'title' => 'TEST-LISTTEMPLATE123-TITLE', + 'description' => 'TEST LISTTEMPLATE123 DESCRIPTION', + 'items' => [ + [ + 'id' => 10, + 'type' => 'user', + 'mode' => 'dest' + ], + [ + 'id' => 10, + 'type' => 'user', + 'mode' => 'dest' + ], + [ + 'id' => 10, + 'type' => 'user', + 'mode' => 'dest' + ] + ] + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + + $response = $listTemplateController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('More than one dest not allowed', $responseBody['errors']); + + \Entity\models\ListTemplateModel::update([ + 'set' => ['entity_id' => null], + 'where' => ['id = ?'], + 'data' => [self::$id] + ]); + } + + public function testGetByEntityId() + { + $listTemplateController = new \Entity\controllers\ListTemplateController(); + + // Errors + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + + $response = $listTemplateController->getByEntityId($request, new \Slim\Http\Response(), ['entityId' => 1000]); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Entity does not exist', $responseBody['errors']); + + $queryParams = [ + 'type' => 'toto' + ]; + $fullRequest = $request->withQueryParams($queryParams); + $response = $listTemplateController->getByEntityId($fullRequest, new \Slim\Http\Response(), ['entityId' => 6]); + $this->assertSame(200, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + + $this->assertIsArray($responseBody['listTemplates']); + $this->assertIsArray($responseBody['listTemplates'][0]); + $this->assertSame(6, $responseBody['listTemplates'][0]['id']); + $this->assertIsString($responseBody['listTemplates'][0]['title']); + $this->assertIsString($responseBody['listTemplates'][0]['description']); + $this->assertSame('diffusionList', $responseBody['listTemplates'][0]['type']); + $this->assertSame(6, $responseBody['listTemplates'][0]['entity_id']); + $this->assertSame(null, $responseBody['listTemplates'][0]['owner']); + $this->assertIsArray($responseBody['listTemplates'][0]['items']); + + $this->assertSame(6, $responseBody['listTemplates'][0]['items'][0]['list_template_id']); + $this->assertSame(19, $responseBody['listTemplates'][0]['items'][0]['item_id']); + $this->assertSame('user', $responseBody['listTemplates'][0]['items'][0]['item_type']); + $this->assertSame('dest', $responseBody['listTemplates'][0]['items'][0]['item_mode']); + $this->assertSame(0, $responseBody['listTemplates'][0]['items'][0]['sequence']); + $this->assertIsString($responseBody['listTemplates'][0]['items'][0]['labelToDisplay']); + $this->assertIsString($responseBody['listTemplates'][0]['items'][0]['descriptionToDisplay']); + $this->assertSame(true, $responseBody['listTemplates'][0]['items'][0]['hasPrivilege']); + + $this->assertSame(6, $responseBody['listTemplates'][0]['items'][1]['list_template_id']); + $this->assertSame(1, $responseBody['listTemplates'][0]['items'][1]['item_id']); + $this->assertSame('entity', $responseBody['listTemplates'][0]['items'][1]['item_type']); + $this->assertSame('cc', $responseBody['listTemplates'][0]['items'][1]['item_mode']); + $this->assertSame(1, $responseBody['listTemplates'][0]['items'][1]['sequence']); + $this->assertIsString($responseBody['listTemplates'][0]['items'][1]['labelToDisplay']); + $this->assertEmpty($responseBody['listTemplates'][0]['items'][1]['descriptionToDisplay']); + + $queryParams = [ + 'type' => 'visaCircuit' + ]; + $fullRequest = $request->withQueryParams($queryParams); + $response = $listTemplateController->getByEntityId($fullRequest, new \Slim\Http\Response(), ['entityId' => 6]); + $this->assertSame(200, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + + $this->assertIsArray($responseBody['listTemplates']); + $this->assertEmpty($responseBody['listTemplates']); + } + + public function testUpdateByUserWithEntityDest() + { + $listTemplateController = new \Entity\controllers\ListTemplateController(); + + // Errors + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'PUT']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + + $GLOBALS['login'] = 'ddur'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + + $response = $listTemplateController->updateByUserWithEntityDest($request, new \Slim\Http\Response(), []); + $this->assertSame(403, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Service forbidden', $responseBody['errors']); + + $GLOBALS['login'] = 'superadmin'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + + $body = [ + 'redirectListModels' => [ + [ + 'entity_id' => 6, + 'redirectUserId' => 'mscott' + ] + ] + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + $response = $listTemplateController->updateByUserWithEntityDest($fullRequest, new \Slim\Http\Response(), ['item_id' => $GLOBALS['id']]); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('User not found or not active', $responseBody['errors']); + + // Success + $body = [ + 'redirectListModels' => [ + [ + 'entity_id' => 6, + 'redirectUserId' => 'bbain' + ] + ] + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + $response = $listTemplateController->updateByUserWithEntityDest($fullRequest, new \Slim\Http\Response(), ['item_id' => $GLOBALS['id']]); + $this->assertSame(204, $response->getStatusCode()); + } + + public function testUpdateTypeRoles() + { + $listTemplateController = new \Entity\controllers\ListTemplateController(); + + // Errors + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'PUT']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + + $GLOBALS['login'] = 'ddur'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + + $response = $listTemplateController->updateTypeRoles($request, new \Slim\Http\Response(), []); + $this->assertSame(403, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Service forbidden', $responseBody['errors']); + + $GLOBALS['login'] = 'superadmin'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + + $response = $listTemplateController->updateTypeRoles($request, new \Slim\Http\Response(), []); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Bad Request', $responseBody['errors']); + + // Success + $body = [ + 'roles' => [ + [ + 'available' => true, + 'id' => 'dest' + ],[ + 'available' => true, + 'id' => 'copy' + ],[ + 'available' => true, + 'id' => 'avis' + ],[ + 'available' => true, + 'id' => 'avis_copy' + ] + ] + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + $response = $listTemplateController->updateTypeRoles($fullRequest, new \Slim\Http\Response(), ['typeId' => 'entity_id']); + $this->assertSame(200, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('success', $responseBody['success']); + } + + public function testGetRoles() + { + $listTemplateController = new \Entity\controllers\ListTemplateController(); + + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + + $queryParams = [ + 'context' => 'indexation' + ]; + $fullRequest = $request->withQueryParams($queryParams); + $response = $listTemplateController->getRoles($fullRequest, new \Slim\Http\Response()); + $this->assertSame(200, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + + $this->assertIsArray($responseBody['roles']); + + $this->assertSame('dest', $responseBody['roles'][0]['id']); + $this->assertSame(_ASSIGNEE, $responseBody['roles'][0]['label']); + $this->assertSame(false, $responseBody['roles'][0]['keepInListInstance']); + + $this->assertSame('cc', $responseBody['roles'][1]['id']); + $this->assertSame(_TO_CC, $responseBody['roles'][1]['label']); + $this->assertSame(true, $responseBody['roles'][1]['keepInListInstance']); + + $this->assertSame('avis', $responseBody['roles'][2]['id']); + $this->assertSame(_AVIS_USER, $responseBody['roles'][2]['label']); + $this->assertSame(false, $responseBody['roles'][2]['keepInListInstance']); + + $this->assertSame('avis_copy', $responseBody['roles'][3]['id']); + $this->assertSame(_AVIS_USER_COPY, $responseBody['roles'][3]['label']); + $this->assertSame(false, $responseBody['roles'][3]['keepInListInstance']); + + $queryParams = [ + 'context' => 'process' + ]; + $fullRequest = $request->withQueryParams($queryParams); + $response = $listTemplateController->getRoles($fullRequest, new \Slim\Http\Response()); + $this->assertSame(200, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + + $this->assertIsArray($responseBody['roles']); + + $this->assertSame('dest', $responseBody['roles'][0]['id']); + $this->assertSame(_ASSIGNEE, $responseBody['roles'][0]['label']); + $this->assertSame(false, $responseBody['roles'][0]['keepInListInstance']); + $this->assertSame(true, $responseBody['roles'][0]['canUpdate']); + + $this->assertSame('cc', $responseBody['roles'][1]['id']); + $this->assertSame(_TO_CC, $responseBody['roles'][1]['label']); + $this->assertSame(true, $responseBody['roles'][1]['keepInListInstance']); + $this->assertSame(true, $responseBody['roles'][1]['canUpdate']); + + $this->assertSame('avis', $responseBody['roles'][2]['id']); + $this->assertSame(_AVIS_USER, $responseBody['roles'][2]['label']); + $this->assertSame(false, $responseBody['roles'][2]['keepInListInstance']); + $this->assertSame(true, $responseBody['roles'][2]['canUpdate']); + + $this->assertSame('avis_copy', $responseBody['roles'][3]['id']); + $this->assertSame(_AVIS_USER_COPY, $responseBody['roles'][3]['label']); + $this->assertSame(false, $responseBody['roles'][3]['keepInListInstance']); + $this->assertSame(true, $responseBody['roles'][3]['canUpdate']); + + $queryParams = [ + 'context' => 'details' + ]; + $fullRequest = $request->withQueryParams($queryParams); + $response = $listTemplateController->getRoles($fullRequest, new \Slim\Http\Response()); + $this->assertSame(200, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + + $this->assertIsArray($responseBody['roles']); + + $this->assertSame('dest', $responseBody['roles'][0]['id']); + $this->assertSame(_ASSIGNEE, $responseBody['roles'][0]['label']); + $this->assertSame(false, $responseBody['roles'][0]['keepInListInstance']); + $this->assertSame(true, $responseBody['roles'][0]['canUpdate']); + + $this->assertSame('cc', $responseBody['roles'][1]['id']); + $this->assertSame(_TO_CC, $responseBody['roles'][1]['label']); + $this->assertSame(true, $responseBody['roles'][1]['keepInListInstance']); + $this->assertSame(true, $responseBody['roles'][1]['canUpdate']); + + $this->assertSame('avis', $responseBody['roles'][2]['id']); + $this->assertSame(_AVIS_USER, $responseBody['roles'][2]['label']); + $this->assertSame(false, $responseBody['roles'][2]['keepInListInstance']); + $this->assertSame(true, $responseBody['roles'][2]['canUpdate']); + + $this->assertSame('avis_copy', $responseBody['roles'][3]['id']); + $this->assertSame(_AVIS_USER_COPY, $responseBody['roles'][3]['label']); + $this->assertSame(false, $responseBody['roles'][3]['keepInListInstance']); + $this->assertSame(true, $responseBody['roles'][3]['canUpdate']); + } + + public function testGetAvailableCircuits() + { + $listTemplateController = new \Entity\controllers\ListTemplateController(); + + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + + $queryParams = []; + $fullRequest = $request->withQueryParams($queryParams); + $response = $listTemplateController->getAvailableCircuits($fullRequest, new \Slim\Http\Response()); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Query params circuit is empty', $responseBody['errors']); + + $queryParams = [ + 'circuit' => 'visaCircuit' + ]; + $fullRequest = $request->withQueryParams($queryParams); + $response = $listTemplateController->getAvailableCircuits($fullRequest, new \Slim\Http\Response()); + $responseBody = json_decode((string)$response->getBody(), true); + + $this->assertIsArray($responseBody['circuits']); + + $this->assertSame('visaCircuit', $responseBody['circuits'][0]['type']); + $this->assertEmpty($responseBody['circuits'][0]['entityId']); + $this->assertSame('TEST-LISTTEMPLATE123-TITLE-UPDATED', $responseBody['circuits'][0]['title']); + $this->assertSame('TEST LISTTEMPLATE123 DESCRIPTION UPDATED', $responseBody['circuits'][0]['description']); + $this->assertSame(false, $responseBody['circuits'][0]['private']); + } + + public function testGetDefaultCircuitByResId() + { + $listTemplateController = new \Entity\controllers\ListTemplateController(); + + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + + $queryParams = []; + $fullRequest = $request->withQueryParams($queryParams); + $response = $listTemplateController->getDefaultCircuitByResId($fullRequest, new \Slim\Http\Response(), []); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Query params circuit is empty', $responseBody['errors']); + + $queryParams = [ + 'circuit' => 'visa' + ]; + $fullRequest = $request->withQueryParams($queryParams); + $response = $listTemplateController->getDefaultCircuitByResId($fullRequest, new \Slim\Http\Response(), ['resId' => $GLOBALS['resources'][0]]); + $this->assertSame(200, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame(null, $responseBody['circuit']); + + \Entity\models\ListTemplateModel::update([ + 'set' => ['entity_id' => 6], + 'where' => ['id = ?'], + 'data' => [self::$id] + ]); + + $response = $listTemplateController->getDefaultCircuitByResId($fullRequest, new \Slim\Http\Response(), ['resId' => $GLOBALS['resources'][0]]); + $this->assertSame(200, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + + $this->assertIsArray($responseBody['circuit']); + $this->assertSame(self::$id, $responseBody['circuit']['id']); + $this->assertSame('visaCircuit', $responseBody['circuit']['type']); + $this->assertSame(6, $responseBody['circuit']['entityId']); + $this->assertSame('TEST-LISTTEMPLATE123-TITLE-UPDATED', $responseBody['circuit']['title']); + $this->assertSame('TEST LISTTEMPLATE123 DESCRIPTION UPDATED', $responseBody['circuit']['description']); + + $this->assertIsArray($responseBody['circuit']['items']); + + $this->assertSame(self::$id, $responseBody['circuit']['items'][0]['list_template_id']); + $this->assertSame(10, $responseBody['circuit']['items'][0]['item_id']); + $this->assertSame('user', $responseBody['circuit']['items'][0]['item_type']); + $this->assertSame('visa', $responseBody['circuit']['items'][0]['item_mode']); + $this->assertSame(0, $responseBody['circuit']['items'][0]['sequence']); + $this->assertIsString($responseBody['circuit']['items'][0]['labelToDisplay']); + $this->assertIsString($responseBody['circuit']['items'][0]['descriptionToDisplay']); + $this->assertSame(true, $responseBody['circuit']['items'][0]['hasPrivilege']); + + $this->assertSame(self::$id, $responseBody['circuit']['items'][1]['list_template_id']); + $this->assertSame(17, $responseBody['circuit']['items'][1]['item_id']); + $this->assertSame('user', $responseBody['circuit']['items'][1]['item_type']); + $this->assertSame('sign', $responseBody['circuit']['items'][1]['item_mode']); + $this->assertSame(1, $responseBody['circuit']['items'][1]['sequence']); + $this->assertIsString($responseBody['circuit']['items'][1]['labelToDisplay']); + $this->assertIsString($responseBody['circuit']['items'][1]['descriptionToDisplay']); + $this->assertSame(true, $responseBody['circuit']['items'][1]['hasPrivilege']); } public function testDelete() { $listTemplateController = new \Entity\controllers\ListTemplateController(); - // DELETE + // Errors $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 * 1000]); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('List template not found', $responseBody['errors']); + + $GLOBALS['login'] = 'ddur'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + $response = $listTemplateController->delete($request, new \Slim\Http\Response(), ['id' => self::$id]); - $responseBody = json_decode((string)$response->getBody()); + $this->assertSame(403, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Service forbidden', $responseBody['errors']); + \Entity\models\ListTemplateModel::update([ + 'set' => ['entity_id' => 6], + 'where' => ['id = ?'], + 'data' => [self::$id] + ]); + + $response = $listTemplateController->delete($request, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(403, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Service forbidden', $responseBody['errors']); + + $userInfo = \User\models\UserModel::getByLogin(['login' => 'bblier', 'select' => ['id']]); + + \Entity\models\ListTemplateModel::update([ + 'set' => ['owner' => $userInfo['id']], + 'where' => ['id = ?'], + 'data' => [self::$id] + ]); + + $response = $listTemplateController->delete($request, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(403, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Service forbidden', $responseBody['errors']); + + $response = $listTemplateController->getById($request, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(403, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Cannot access private model', $responseBody['errors']); + + $GLOBALS['login'] = 'bblier'; + $GLOBALS['id'] = $userInfo['id']; + + $response = $listTemplateController->delete($request, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(403, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Entity out of perimeter', $responseBody['errors']); + + \Entity\models\ListTemplateModel::update([ + 'set' => ['entity_id' => null, 'owner' => null], + 'where' => ['id = ?'], + 'data' => [self::$id] + ]); + + $GLOBALS['login'] = 'superadmin'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + + // Success + // 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]); $this->assertSame(204, $response->getStatusCode()); // READ -- GitLab