From c3162cdaf7a1b19d6b1321112bf6f11b3df436b2 Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Mon, 4 Jun 2018 12:20:14 +0200
Subject: [PATCH] FEAT #7731 Unit Tests + Refactoring

---
 apps/maarch_entreprise/actions/sendFileWS.php |   2 +-
 core/Test/DocserverControllerTest.php         | 132 ++++++++++++------
 modules/visa/sign_file.php                    |   2 +-
 phpunit.xml                                   |   1 +
 .../controllers/DocserverTypeController.php   |  17 ---
 .../models/DocserverModelAbstract.php         |  34 +----
 .../models/DocserverTypeModelAbstract.php     |  43 ------
 src/app/group/models/GroupModelAbstract.php   |   2 +-
 .../controllers/SignatureBookController.php   |   4 +-
 .../controllers/TemplateController.php        |   2 +-
 src/app/user/controllers/UserController.php   |   4 +-
 11 files changed, 106 insertions(+), 137 deletions(-)

diff --git a/apps/maarch_entreprise/actions/sendFileWS.php b/apps/maarch_entreprise/actions/sendFileWS.php
index e2e8ff84c59..a75fe2dd663 100644
--- a/apps/maarch_entreprise/actions/sendFileWS.php
+++ b/apps/maarch_entreprise/actions/sendFileWS.php
@@ -10,7 +10,7 @@ function manage_send($aId)
 
     foreach ($aId as $resId) {
         $document = \Resource\models\ResModel::getById(['resId' => $resId, 'select' => ['res_id', 'format', 'path', 'filename']]);
-        $docserver = \Docserver\models\DocserverModel::getByCollId(['collId' => 'letterbox_coll', 'priority' => true, 'select' => ['path_template']]);
+        $docserver = \Docserver\models\DocserverModel::getFirstByTypeId(['typeId' => 'DOC', 'select' => ['path_template']]);
 
         $file = file_get_contents($docserver['path_template'] . str_replace('#', '/', $document['path']) . $document['filename']);
         $encodedFile = base64_encode($file);
diff --git a/core/Test/DocserverControllerTest.php b/core/Test/DocserverControllerTest.php
index 9974b39b783..8a30d15acef 100644
--- a/core/Test/DocserverControllerTest.php
+++ b/core/Test/DocserverControllerTest.php
@@ -9,44 +9,62 @@
 
 use PHPUnit\Framework\TestCase;
 
-class DocserverControllerTest extends TestCase {
-
+class DocserverControllerTest extends TestCase
+{
     private static $id = null;
-    public function testGet(){
+
+    public function testGet()
+    {
         $docserverController = new \Docserver\controllers\DocserverController();
+
         $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']);
         $request        = \Slim\Http\Request::createFromEnvironment($environment);
-        $aArgs = [];
-        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
-        $response     = $docserverController->get($fullRequest, new \Slim\Http\Response());
+
+        $response     = $docserverController->get($request, new \Slim\Http\Response());
         $responseBody = json_decode((string)$response->getBody());
-        $this->assertNotNull($responseBody);
-    }    
 
-    public function testCreate(){
+        $this->assertNotEmpty($responseBody->docservers);
+        $this->assertNotEmpty($responseBody->types);
+    }
+
+    public function testCreate()
+    {
         $docserverController = new \Docserver\controllers\DocserverController();
+
+        //  CREATE
         $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'POST']);
         $request        = \Slim\Http\Request::createFromEnvironment($environment);
+
         $aArgs = [
             'docserver_id'           =>  'NEW_DOCSERVER',
             'docserver_type_id'      =>  'DOC',
             'device_label'           =>  'new docserver',
             'size_limit_number'      =>  50000000000,
-            'path_template'          =>  '/var/docserversDEV/dev1804/archive_transfer/',
+            'path_template'          =>  '/tmp/',
             'coll_id'                =>  'letterbox_coll',
             'priority_number'        =>  99,
             'adr_priority_number'    =>  99
         ];
         $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
-        $response     = $docserverController->create($fullRequest, new \Slim\Http\Response(),$aArgs);
+
+        $response     = $docserverController->create($fullRequest, new \Slim\Http\Response());
         $responseBody = json_decode((string)$response->getBody());
+
         self::$id = $responseBody->docserver;
         $this->assertInternalType('int', self::$id);
 
-        $response     = $docserverController->getById($fullRequest, new \Slim\Http\Response(),['id' =>  self::$id]);
-        $responseBody = json_decode((string)$response->getBody());
+        //  READ
+        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']);
+        $request        = \Slim\Http\Request::createFromEnvironment($environment);
+        $response       = $docserverController->getById($request, new \Slim\Http\Response(), ['id' =>  self::$id]);
+        $responseBody   = json_decode((string)$response->getBody());
+
         $this->assertSame('NEW_DOCSERVER', $responseBody->docserver_id);
 
+        //  CREATE
+        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'POST']);
+        $request        = \Slim\Http\Request::createFromEnvironment($environment);
+
         $aArgs = [
             'docserver_id'           =>  'WRONG_PATH',
             'docserver_type_id'      =>  'DOC',
@@ -58,11 +76,15 @@ class DocserverControllerTest extends TestCase {
             'adr_priority_number'    =>  99
         ];
         $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
-        $response     = $docserverController->create($fullRequest, new \Slim\Http\Response(),$aArgs);
+        $response     = $docserverController->create($fullRequest, new \Slim\Http\Response());
         $responseBody = json_decode((string)$response->getBody());
         
         $this->assertSame(_PATH_OF_DOCSERVER_UNAPPROACHABLE, $responseBody->errors);
 
+        //  CREATE
+        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'POST']);
+        $request        = \Slim\Http\Request::createFromEnvironment($environment);
+
         $aArgs = [
             'docserver_id'           =>  'BAD_REQUEST',
             'docserver_type_id'      =>  'DOC',
@@ -74,11 +96,15 @@ class DocserverControllerTest extends TestCase {
             'adr_priority_number'    =>  99
         ];
         $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
-        $response     = $docserverController->create($fullRequest, new \Slim\Http\Response(),$aArgs);
+        $response     = $docserverController->create($fullRequest, new \Slim\Http\Response());
         $responseBody = json_decode((string)$response->getBody());
         
         $this->assertSame('Bad Request', $responseBody->errors);
 
+        //  CREATE
+        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'POST']);
+        $request        = \Slim\Http\Request::createFromEnvironment($environment);
+
         $aArgs = [
             'docserver_id'           =>  'NEW_DOCSERVER',
             'docserver_type_id'      =>  'DOC',
@@ -90,29 +116,45 @@ class DocserverControllerTest extends TestCase {
             'adr_priority_number'    =>  99
         ];
         $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
-        $response     = $docserverController->create($fullRequest, new \Slim\Http\Response(),$aArgs);
+        $response     = $docserverController->create($fullRequest, new \Slim\Http\Response());
         $responseBody = json_decode((string)$response->getBody());
         
         $this->assertSame(_ID. ' ' . _ALREADY_EXISTS, $responseBody->errors);
     }
 
-    public function testUpdate(){
+    public function testUpdate()
+    {
         $docserverController = new \Docserver\controllers\DocserverController();
+
+        //  UPDATE
         $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'PUT']);
         $request        = \Slim\Http\Request::createFromEnvironment($environment);
         $aArgs = [
             'docserver_type_id'      =>  'DOC',
             'device_label'           =>  'updated docserver',
             'size_limit_number'      =>  50000000000,
-            'path_template'          =>  '/var/docserversDEV/dev1804/archive_transfer/',
+            'path_template'          =>  '/tmp/',
             'priority_number'        =>  99,
             'adr_priority_number'    =>  99
         ];
         $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
-        $response     = $docserverController->update($fullRequest, new \Slim\Http\Response(),['id' => self::$id]);
+        $response     = $docserverController->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       = $docserverController->getById($request, new \Slim\Http\Response(), ['id' =>  self::$id]);
+        $responseBody   = json_decode((string)$response->getBody());
+
+        $this->assertSame('updated docserver', $responseBody->device_label);
+
+        //  UPDATE
+        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'PUT']);
+        $request        = \Slim\Http\Request::createFromEnvironment($environment);
+
         $aArgs = [
             'docserver_type_id'      =>  'DOC',
             'device_label'           =>  'updated docserver',
@@ -122,48 +164,56 @@ class DocserverControllerTest extends TestCase {
             'adr_priority_number'    =>  99
         ];
         $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
-        $response     = $docserverController->update($fullRequest, new \Slim\Http\Response(),['id' => self::$id]);
+        $response     = $docserverController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]);
         $responseBody = json_decode((string)$response->getBody());
+
         $this->assertSame(_PATH_OF_DOCSERVER_UNAPPROACHABLE, $responseBody->errors);
 
+        //  UPDATE
+        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'PUT']);
+        $request        = \Slim\Http\Request::createFromEnvironment($environment);
+
         $aArgs = [
             'docserver_type_id'      =>  'DOC',
             'device_label'           =>  'updated docserver',
             'size_limit_number'      =>  50000000000,
-            'path_template'          =>  '/var/docserversDEV/dev1804/archive_transfer/',
+            'path_template'          =>  '/tmp/',
             'priority_number'        =>  99,
             'adr_priority_number'    =>  99
         ];
         $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
-        $response     = $docserverController->update($fullRequest, new \Slim\Http\Response(),['id' => 12345]);
+        $response     = $docserverController->update($fullRequest, new \Slim\Http\Response(), ['id' => 12345]);
         $responseBody = json_decode((string)$response->getBody());
+
         $this->assertSame('Docserver not found', $responseBody->errors);
     }
 
-    public function testDelete(){
+    public function testDelete()
+    {
         $docserverController = new \Docserver\controllers\DocserverController();
+
+        //  DELETE
         $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'DELETE']);
         $request        = \Slim\Http\Request::createFromEnvironment($environment);
-        $aArgs = [
-            'id'           =>  self::$id
-        ];
-        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
-        $response     = $docserverController->delete($fullRequest, new \Slim\Http\Response(),$aArgs);
-        $responseBody = json_decode((string)$response->getBody());
-        $this->assertsame('success',$responseBody->success);
+        $response       = $docserverController->delete($request, new \Slim\Http\Response(), ['id' => self::$id]);
+        $responseBody   = json_decode((string)$response->getBody());
 
-        $aArgs = [
-            'id'           =>  self::$id
-        ];
-        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
-        $response     = $docserverController->delete($fullRequest, new \Slim\Http\Response(),$aArgs);
-        $responseBody = json_decode((string)$response->getBody());
-        $this->assertSame('Docserver does not exist', $responseBody->errors);
-    }
+        $this->assertsame('success', $responseBody->success);
 
-    
+        //  READ
+        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']);
+        $request        = \Slim\Http\Request::createFromEnvironment($environment);
+        $response       = $docserverController->getById($request, new \Slim\Http\Response(), ['id' =>  self::$id]);
+        $responseBody   = json_decode((string)$response->getBody());
 
-    
+        $this->assertSame('Docserver not found', $responseBody->errors);
 
+        //  DELETE
+        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'DELETE']);
+        $request        = \Slim\Http\Request::createFromEnvironment($environment);
+        $response       = $docserverController->delete($request, new \Slim\Http\Response(), ['id' => self::$id]);
+        $responseBody   = json_decode((string)$response->getBody());
 
-}
\ No newline at end of file
+        $this->assertSame('Docserver does not exist', $responseBody->errors);
+    }
+}
diff --git a/modules/visa/sign_file.php b/modules/visa/sign_file.php
index 99f6d74f51e..87fa9be01f5 100755
--- a/modules/visa/sign_file.php
+++ b/modules/visa/sign_file.php
@@ -48,7 +48,7 @@ if (!empty($_REQUEST['id']) && !empty($_REQUEST['collId'])) {
             exit;
         }
 
-        $docserver = \Docserver\models\DocserverModel::getByTypeId(['docserver_type_id' => 'TEMPLATES', 'select' => ['path_template']]);
+        $docserver = \Docserver\models\DocserverModel::getFirstByTypeId(['typeId' => 'TEMPLATES', 'select' => ['path_template']]);
         $pathToWantedSignature = $docserver['path_template'] . str_replace('#', '/', $signature->signature_path) . $signature->signature_file_name;
     } else {
         $pathToWantedSignature = $_SESSION['user']['pathToSignature'][0];
diff --git a/phpunit.xml b/phpunit.xml
index 8204ef76f6a..3c6aabdd704 100755
--- a/phpunit.xml
+++ b/phpunit.xml
@@ -9,6 +9,7 @@
             <file>core/Test/ContactControllerTest.php</file>
             <file>core/Test/ContactGroupControllerTest.php</file>
             <file>core/Test/ContactTypeControllerTest.php</file>
+            <file>core/Test/DocserverControllerTest.php</file>
             <file>core/Test/DoctypeControllerTest.php</file>
             <file>core/Test/EntityControllerTest.php</file>
             <file>core/Test/GroupControllerTest.php</file>
diff --git a/src/app/docserver/controllers/DocserverTypeController.php b/src/app/docserver/controllers/DocserverTypeController.php
index 0766d2ab446..158c7685c41 100644
--- a/src/app/docserver/controllers/DocserverTypeController.php
+++ b/src/app/docserver/controllers/DocserverTypeController.php
@@ -44,21 +44,4 @@ class DocserverTypeController
 
         return $response->withJson($docserverType);
     }
-
-    public function delete(Request $request, Response $response, array $aArgs)
-    {
-        if (!ServiceModel::hasService(['id' => 'admin_docservers', 'userId' => $GLOBALS['userId'], 'location' => 'apps', 'type' => 'admin'])) {
-            return $response->withStatus(403)->withJson(['errors' => 'Service forbidden']);
-        }
-
-        $docserverType = DocserverTypeModel::getById(['id' => $aArgs['id']]);
-
-        if(empty($docserverType)){
-            return $response->withStatus(400)->withJson(['errors' => 'Docserver Type does not exist']);
-        }
-
-        DocserverTypeModel::delete(['id' => $aArgs['id']]);
-
-        return $response->withJson(['docserverTypes' => DocserverTypeModel::get()]);
-    }
 }
diff --git a/src/app/docserver/models/DocserverModelAbstract.php b/src/app/docserver/models/DocserverModelAbstract.php
index d6dd85f0d3f..2314732c1eb 100644
--- a/src/app/docserver/models/DocserverModelAbstract.php
+++ b/src/app/docserver/models/DocserverModelAbstract.php
@@ -72,17 +72,19 @@ class DocserverModelAbstract
         return $aDocserver[0];
     }
 
-    public static function getByTypeId(array $aArgs)
+    public static function getFirstByTypeId(array $aArgs)
     {
-        ValidatorModel::notEmpty($aArgs, ['docserver_type_id']);
-        ValidatorModel::stringType($aArgs, ['docserver_type_id']);
+        ValidatorModel::notEmpty($aArgs, ['typeId']);
+        ValidatorModel::stringType($aArgs, ['typeId']);
         ValidatorModel::arrayType($aArgs, ['select']);
 
         $aDocserver = DatabaseModel::select([
             'select'    => empty($aArgs['select']) ? ['*'] : $aArgs['select'],
             'table'     => ['docservers'],
             'where'     => ['docserver_type_id = ?'],
-            'data'      => [$aArgs['docserver_type_id']]
+            'data'      => [$aArgs['typeId']],
+            'order_by'  => ['priority_number'],
+            'limit'     => 1
         ]);
 
         if (empty($aDocserver[0])) {
@@ -92,30 +94,6 @@ class DocserverModelAbstract
         return $aDocserver[0];
     }
 
-    public static function getByCollId(array $aArgs)
-    {
-        ValidatorModel::notEmpty($aArgs, ['collId']);
-        ValidatorModel::stringType($aArgs, ['collId']);
-        ValidatorModel::boolType($aArgs, ['priority']);
-
-        $data = [
-            'select'    => empty($aArgs['select']) ? ['*'] : $aArgs['select'],
-            'table'     => ['docservers'],
-            'where'     => ['coll_id = ?'],
-            'data'      => [$aArgs['collId']]
-        ];
-        if (!empty($aArgs['priority'])) {
-            $data['order_by'] = ['priority_number'];
-        }
-        $aReturn = DatabaseModel::select($data);
-
-        if (!empty($aArgs['priority'])) {
-            return $aReturn[0];
-        }
-
-        return $aReturn;
-    }
-
     public static function create(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['docserver_id', 'docserver_type_id', 'device_label', 'path_template', 'coll_id', 'size_limit_number', 'priority_number', 'adr_priority_number', 'is_readonly']);
diff --git a/src/app/docserver/models/DocserverTypeModelAbstract.php b/src/app/docserver/models/DocserverTypeModelAbstract.php
index 61831cfb0bf..1f5cc38bcae 100644
--- a/src/app/docserver/models/DocserverTypeModelAbstract.php
+++ b/src/app/docserver/models/DocserverTypeModelAbstract.php
@@ -10,7 +10,6 @@
 /**
 * @brief DocserverType Model
 * @author dev@maarch.org
-* @ingroup core
 */
 
 namespace Docserver\models;
@@ -50,46 +49,4 @@ class DocserverTypeModelAbstract
 
         return $aDocserverType[0];
     }
-
-    public static function create(array $aArgs = [])
-    {
-        ValidatorModel::notEmpty($aArgs, ['docserver_type_id']);
-        ValidatorModel::stringType($aArgs, ['docserver_type_id']);
-
-        DatabaseModel::insert([
-            'table'         => 'docserver_types',
-            'columnsValues' => $aArgs
-        ]);
-
-        return true;
-    }
-
-    public static function update(array $aArgs = [])
-    {
-        ValidatorModel::notEmpty($aArgs, ['docserver_type_id']);
-        ValidatorModel::stringType($aArgs, ['docserver_type_id']);
-
-        DatabaseModel::update([
-            'table'     => 'docserver_types',
-            'set'       => $aArgs,
-            'where'     => ['docserver_type_id = ?'],
-            'data'      => [$aArgs['docserver_type_id']]
-        ]);
-
-        return true;
-    }
-
-    public static function delete(array $aArgs)
-    {
-        ValidatorModel::notEmpty($aArgs, ['id']);
-        ValidatorModel::stringType($aArgs, ['id']);
-
-        DatabaseModel::delete([
-            'table' => 'docserver_types',
-            'where' => ['docserver_type_id = ?'],
-            'data'  => [$aArgs['id']]
-        ]);
-
-        return true;
-    }
 }
diff --git a/src/app/group/models/GroupModelAbstract.php b/src/app/group/models/GroupModelAbstract.php
index 0cc8eb78ae9..f1850ef3125 100644
--- a/src/app/group/models/GroupModelAbstract.php
+++ b/src/app/group/models/GroupModelAbstract.php
@@ -359,7 +359,7 @@ abstract class GroupModelAbstract
                 'group_id'  => $aArgs['newGroupId']
             ],
             'where'     => $where,
-            'data'      => [$aArgs['groupId'], $aArgs['ignoredUsers']]
+            'data'      => $data
         ]);
 
         return true;
diff --git a/src/app/signatureBook/controllers/SignatureBookController.php b/src/app/signatureBook/controllers/SignatureBookController.php
index a92f25b7172..47f53aea24b 100644
--- a/src/app/signatureBook/controllers/SignatureBookController.php
+++ b/src/app/signatureBook/controllers/SignatureBookController.php
@@ -43,8 +43,8 @@ class SignatureBookController
         if (!ResController::hasRightByResId(['resId' => $resId, 'userId' => $GLOBALS['userId']])) {
             return $response->withStatus(403)->withJson(['errors' => 'Document out of perimeter']);
         }
-        $docserver = DocserverModel::getByTypeId(['docserver_type_id' => 'TEMPLATES', 'select' => ['path_template']]);
-        if (!file_exists($docserver['path_template'])) {
+        $docserver = DocserverModel::getFirstByTypeId(['typeId' => 'TEMPLATES', 'select' => ['path_template']]);
+        if (empty($docserver['path_template']) || !file_exists($docserver['path_template'])) {
             return $response->withStatus(500)->withJson(['errors' => _UNREACHABLE_DOCSERVER]);
         }
 
diff --git a/src/app/template/controllers/TemplateController.php b/src/app/template/controllers/TemplateController.php
index 97e8b19321c..354e78a52f9 100644
--- a/src/app/template/controllers/TemplateController.php
+++ b/src/app/template/controllers/TemplateController.php
@@ -32,7 +32,7 @@ class TemplateController
         }
 
         if ($template['template_type'] == 'OFFICE') {
-            $docserver = DocserverModel::getByTypeId(['docserver_type_id' => 'TEMPLATES', 'select' => ['path_template']]);
+            $docserver = DocserverModel::getFirstByTypeId(['typeId' => 'TEMPLATES', 'select' => ['path_template']]);
 
             $pathOnDocserver = DocserverController::createPathOnDocServer(['path' => $docserver['path_template']]);
             $docinfo = DocserverController::getNextFileNameInDocServer(['pathOnDocserver' => $pathOnDocserver['pathToDocServer']]);
diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php
index 0cca9a0e255..df8f174f624 100644
--- a/src/app/user/controllers/UserController.php
+++ b/src/app/user/controllers/UserController.php
@@ -472,8 +472,8 @@ class UserController
             return $response->withStatus(400)->withJson(['errors' => 'Signature does not exist']);
         }
 
-        $docserver = DocserverModel::getByTypeId(['docserver_type_id' => 'TEMPLATES', 'select' => ['path_template']]);
-        if (!file_exists($docserver['path_template'])) {
+        $docserver = DocserverModel::getFirstByTypeId(['typeId' => 'TEMPLATES', 'select' => ['path_template']]);
+        if (empty($docserver['path_template']) || !file_exists($docserver['path_template'])) {
             return [];
         }
 
-- 
GitLab