From cfe6e86c981eea12475ab8ff7956da8ba9086212 Mon Sep 17 00:00:00 2001 From: Guillaume Heurtier <guillaume.heurtier@maarch.org> Date: Wed, 15 Apr 2020 17:48:16 +0200 Subject: [PATCH] FEAT #13676 TIME 4:25 finish improve template tests --- .../controllers/TemplateController.php | 2 +- .../app/template/TemplateControllerTest.php | 236 +++++++++++++++++- 2 files changed, 235 insertions(+), 3 deletions(-) diff --git a/src/app/template/controllers/TemplateController.php b/src/app/template/controllers/TemplateController.php index 0caa7628213..cdd3de7ad44 100755 --- a/src/app/template/controllers/TemplateController.php +++ b/src/app/template/controllers/TemplateController.php @@ -476,7 +476,7 @@ class TemplateController return $response->withJson(['templates' => $templates]); } - public static function mergeEmailTemplate(Request $request, Response $response, array $args) + public function mergeEmailTemplate(Request $request, Response $response, array $args) { if (!Validator::intVal()->validate($args['id'])) { return $response->withStatus(400)->withJson(['errors' => 'Route param id is not an integer']); diff --git a/test/unitTests/app/template/TemplateControllerTest.php b/test/unitTests/app/template/TemplateControllerTest.php index 9fa8ccf6e82..0bb01ac8059 100755 --- a/test/unitTests/app/template/TemplateControllerTest.php +++ b/test/unitTests/app/template/TemplateControllerTest.php @@ -16,6 +16,7 @@ class TemplateControllerTest extends TestCase private static $idDuplicated = null; private static $idDuplicated2 = null; private static $idAcknowledgementReceipt = null; + private static $resId = null; public function testCreate() @@ -36,7 +37,7 @@ class TemplateControllerTest extends TestCase 'content' => 'Content of this template', ], 'datasource' => 'letterbox_attachment', - 'entities' => ['DGS', 'COU'] + 'entities' => ['DGS', 'COU', 'PSF'] ]; $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request); @@ -317,7 +318,7 @@ class TemplateControllerTest extends TestCase 'file' => [ 'content' => 'Content of this template', ], - 'entities' => ['TST_AR'] + 'entities' => ['TST_AR', 'PSF'] ]; $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request); @@ -558,6 +559,227 @@ class TemplateControllerTest extends TestCase $GLOBALS['id'] = $userInfo['id']; } + public function testGetContentById() + { + $templates = new \Template\controllers\TemplateController(); + + // READ + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + $response = $templates->getContentById($request, new \Slim\Http\Response(), ['id' => self::$id2]); + $this->assertSame(200, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + + $this->assertIsString($responseBody['encodedDocument']); + + + // Fail + $response = $templates->getContentById($request, new \Slim\Http\Response(), ['id' => self::$id2 * 1000]); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + + $this->assertSame('Template does not exist', $responseBody['errors']); + + $response = $templates->getContentById($request, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + + $this->assertSame('Template has no office content', $responseBody['errors']); + + $GLOBALS['login'] = 'bbain'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + + $response = $templates->getContentById($request, new \Slim\Http\Response(), ['id' => self::$id2 * 1000]); + $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 testGetByResId() + { + $templates = new \Template\controllers\TemplateController(); + $resController = new \Resource\controllers\ResController(); + + // CREATE + $GLOBALS['login'] = 'cchaplin'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'POST']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + + $fileContent = file_get_contents('test/unitTests/samples/test.txt'); + $encodedFile = base64_encode($fileContent); + + $argsMailNew = [ + 'modelId' => 1, + 'status' => 'NEW', + 'encodedFile' => $encodedFile, + 'format' => 'txt', + 'confidentiality' => false, + 'documentDate' => '2019-01-01 17:18:47', + 'arrivalDate' => '2019-01-01 17:18:47', + 'processLimitDate' => '2029-01-01', + 'doctype' => 102, + 'destination' => 15, + 'initiator' => 15, + 'subject' => 'Breaking News : Superman is alive - PHP unit', + 'typist' => 19, + 'priority' => 'poiuytre1357nbvc', + 'followed' => true, + 'diffusionList' => [ + [ + 'id' => 11, + 'type' => 'user', + 'mode' => 'dest' + ] + ] + ]; + + $fullRequest = \httpRequestCustom::addContentInBody($argsMailNew, $request); + + $response = $resController->create($fullRequest, new \Slim\Http\Response()); + $responseBody = json_decode((string)$response->getBody(), true); + self::$resId = $responseBody['resId']; + $this->assertIsInt(self::$resId); + + $GLOBALS['login'] = 'superadmin'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + + // READ + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + + $queryParams = [ + 'attachmentType' => 'response_project' + ]; + + $fullRequest = $request->withQueryParams($queryParams); + $response = $templates->getByResId($fullRequest, new \Slim\Http\Response(), ['resId' => self::$resId]); + $this->assertSame(200, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + + $this->assertIsArray($responseBody['templates']); + $this->assertNotEmpty($responseBody['templates']); + + $this->assertSame(1042, $responseBody['templates'][0]['id']); + $this->assertSame('PR - Demande de Place en crèche', $responseBody['templates'][0]['label']); + $this->assertSame('docx', $responseBody['templates'][0]['extension']); + $this->assertSame(false, $responseBody['templates'][0]['exists']); + $this->assertSame('response_project', $responseBody['templates'][0]['attachmentType']); + + + // Fail + $response = $templates->getByResId($request, new \Slim\Http\Response(), ['resId' => 'wrong format']); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + + $this->assertSame('Route resId is not an integer', $responseBody['errors']); + + $GLOBALS['login'] = 'bbain'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + + $response = $templates->getByResId($request, new \Slim\Http\Response(), ['resId' => self::$resId * 1000]); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame(403, $response->getStatusCode()); + + $this->assertSame('Document out of perimeter', $responseBody['errors']); + + $GLOBALS['login'] = 'superadmin'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + } + + public function testGetEmailTemplatesByResId() + { + $templates = new \Template\controllers\TemplateController(); + + // READ + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + + $response = $templates->getEmailTemplatesByResId($request, new \Slim\Http\Response(), ['resId' => self::$resId]); + $this->assertSame(200, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + + $this->assertIsArray($responseBody['templates']); + $this->assertNotEmpty($responseBody['templates']); + + $this->assertSame(1043, $responseBody['templates'][0]['id']); + $this->assertSame('AR TYPE SIMPLE- Courriel Manuel', $responseBody['templates'][0]['label']); + + + // Fail + $GLOBALS['login'] = 'bbain'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + + $response = $templates->getEmailTemplatesByResId($request, new \Slim\Http\Response(), ['resId' => self::$resId * 1000]); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame(403, $response->getStatusCode()); + + $this->assertSame('Document out of perimeter', $responseBody['errors']); + + $GLOBALS['login'] = 'superadmin'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + } + + public function testMergeEmailTemplate() + { + $GLOBALS['login'] = 'aackermann'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + + $templates = new \Template\controllers\TemplateController(); + + // READ + $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']); + $request = \Slim\Http\Request::createFromEnvironment($environment); + + $body = [ + 'data' => [ + 'resId' => self::$resId + ] + ]; + $fullRequest = \httpRequestCustom::addContentInBody($body, $request); + $response = $templates->mergeEmailTemplate($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]); + $responseBody = json_decode((string)$response->getBody(), true); + + $this->assertSame(200, $response->getStatusCode()); + $this->assertSame('Content of this template', $responseBody['mergedDocument']); + + // Fail + $response = $templates->mergeEmailTemplate($request, new \Slim\Http\Response(), ['id' => 'wrong format']); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame(400, $response->getStatusCode()); + + $this->assertSame('Route param id is not an integer', $responseBody['errors']); + + $response = $templates->mergeEmailTemplate($request, new \Slim\Http\Response(), ['id' => self::$id * 1000]); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame(400, $response->getStatusCode()); + + $this->assertSame('Template does not exist', $responseBody['errors']); + + $response = $templates->mergeEmailTemplate($request, new \Slim\Http\Response(), ['id' => self::$id]); + $this->assertSame(400, $response->getStatusCode()); + $responseBody = json_decode((string)$response->getBody(), true); + $this->assertSame('Body param resId is missing', $responseBody['errors']); + + $GLOBALS['login'] = 'superadmin'; + $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); + $GLOBALS['id'] = $userInfo['id']; + } + public function testDelete() { $templates = new \Template\controllers\TemplateController(); @@ -641,6 +863,16 @@ class TemplateControllerTest extends TestCase $GLOBALS['login'] = 'superadmin'; $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]); $GLOBALS['id'] = $userInfo['id']; + + // Delete resource + \Resource\models\ResModel::delete([ + 'where' => ['res_id = ?'], + 'data' => [self::$resId] + ]); + + $res = \Resource\models\ResModel::getById(['resId' => self::$resId, 'select' => ['*']]); + $this->assertIsArray($res); + $this->assertEmpty($res); } public function testInitTemplate() -- GitLab