From a238adc6e485a555fa1b9faaa994e9fe35e5eeee Mon Sep 17 00:00:00 2001
From: "florian.azizian" <florian.azizian@maarch.org>
Date: Thu, 15 Feb 2018 17:47:06 +0100
Subject: [PATCH] FEAT #76 administration doctype + TU

---
 core/Test/DoctypeControllerTest.php           | 158 ++++++++++++++++--
 phpunit.xml                                   |   6 +-
 .../models/SecondLevelModelAbstract.php       |   4 +-
 src/core/lang/lang-en.php                     |   3 +
 src/core/lang/lang-fr.php                     |   3 +
 5 files changed, 158 insertions(+), 16 deletions(-)

diff --git a/core/Test/DoctypeControllerTest.php b/core/Test/DoctypeControllerTest.php
index 40a735530b6..c35fc13b2ee 100755
--- a/core/Test/DoctypeControllerTest.php
+++ b/core/Test/DoctypeControllerTest.php
@@ -10,6 +10,7 @@
 */
 
 use PHPUnit\Framework\TestCase;
+use SrcCore\models\DatabaseModel;
 
 class FirstLevelControllerTest extends TestCase
 {
@@ -26,10 +27,6 @@ class FirstLevelControllerTest extends TestCase
         $response          = $firstLevelController->getTree($request, new \Slim\Http\Response());
         $responseBody      = json_decode((string)$response->getBody());
 
-        self::$firstLevelId  = $responseBody->structure[0]->doctypes_first_level_id;
-        self::$secondLevelId = $responseBody->structure[0]->secondeLevels[0]->doctypes_second_level_id;
-        self::$doctypeId     = $responseBody->structure[0]->secondeLevels[0]->doctypes[0]->type_id;
-
         $this->assertNotNull($responseBody->structure); 
         $this->assertNotNull($responseBody->structure[0]->doctypes_first_level_id);
         $this->assertInternalType('int', $responseBody->structure[0]->doctypes_first_level_id); 
@@ -63,7 +60,7 @@ class FirstLevelControllerTest extends TestCase
         $this->assertNotNull($responseBody->firstLevel[0]->doctypes_first_level_label);          
     }
 
-    public function testCreate()
+    public function testCreateFirstLevel()
     {
         $firstLevelController = new \Doctype\controllers\FirstLevelController();
 
@@ -105,7 +102,50 @@ class FirstLevelControllerTest extends TestCase
         $this->assertSame('Invalid foldertype_id', $responseBody->errors[1]);
     }
 
-    public function testUpdate()
+    public function testCreateSecondLevel()
+    {
+        $secondLevelController = new \Doctype\controllers\SecondLevelController();
+
+        //  CREATE
+        $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'POST']);
+        $request     = \Slim\Http\Request::createFromEnvironment($environment);
+
+        $aArgs = [
+            'doctypes_second_level_label' => 'testTUsecondlevel',
+            'doctypes_first_level_id'     => self::$firstLevelId,
+            'css_style'                   => '#99999',
+            'enabled'                     => 'Y',
+        ];
+        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
+
+        $response     = $secondLevelController->create($fullRequest, new \Slim\Http\Response());
+        $responseBody = json_decode((string)$response->getBody());
+
+        self::$secondLevelId = $responseBody->secondLevel->doctypes_second_level_id;
+
+        $this->assertInternalType('int', self::$secondLevelId);
+        $this->assertSame('testTUsecondlevel', $responseBody->secondLevel->doctypes_second_level_label);
+        $this->assertSame(self::$firstLevelId, $responseBody->secondLevel->doctypes_first_level_id);
+        $this->assertSame('#99999', $responseBody->secondLevel->css_style);
+        $this->assertSame('Y', $responseBody->secondLevel->enabled);  
+
+        // CREATE FAIL
+        $aArgs = [
+            'doctypes_second_level_label' => '',
+            'doctypes_first_level_id'     => '',
+            'css_style'                  => '#7777',
+            'enabled'                    => 'gaz',
+        ];
+        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
+
+        $response     = $secondLevelController->create($fullRequest, new \Slim\Http\Response());
+        $responseBody = json_decode((string)$response->getBody());
+
+        $this->assertSame('Invalid doctypes_second_level_label', $responseBody->errors[0]);
+        $this->assertSame('Invalid doctypes_first_level_id', $responseBody->errors[1]);
+    }
+
+    public function testUpdateFirstLevel()
     {
         $firstLevelController = new \Doctype\controllers\FirstLevelController();
 
@@ -148,6 +188,50 @@ class FirstLevelControllerTest extends TestCase
 
     }
 
+    public function testUpdateSecondLevel()
+    {
+        $secondLevelController = new \Doctype\controllers\SecondLevelController();
+
+        //  UPDATE
+        $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'PUT']);
+        $request     = \Slim\Http\Request::createFromEnvironment($environment);
+
+        $aArgs = [
+            'doctypes_second_level_label' => 'testTUsecondlevelUPDATE',
+            'doctypes_first_level_id'     => self::$firstLevelId,
+            'css_style'                   => '#7777',
+            'enabled'                     => 'Y',
+        ];
+        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
+
+        $response     = $secondLevelController->update($fullRequest, new \Slim\Http\Response(), ["id" => self::$secondLevelId]);
+        $responseBody = json_decode((string)$response->getBody());
+
+        $this->assertSame(self::$secondLevelId, $responseBody->secondLevel->doctypes_second_level_id);
+        $this->assertSame('testTUsecondlevelUPDATE', $responseBody->secondLevel->doctypes_second_level_label);
+        $this->assertSame(self::$firstLevelId, $responseBody->secondLevel->doctypes_first_level_id);
+        $this->assertSame('#7777', $responseBody->secondLevel->css_style);
+        $this->assertSame('Y', $responseBody->secondLevel->enabled);  
+
+        // UPDATE FAIL
+        $aArgs = [
+            'doctypes_second_level_label' => '',
+            'doctypes_first_level_id'     => '',
+            'css_style'                  => '#7777',
+            'enabled'                    => 'gaz',
+        ];
+        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
+
+        $response     = $secondLevelController->update($fullRequest, new \Slim\Http\Response(), ["id" => 'gaz']);
+        $responseBody = json_decode((string)$response->getBody());
+
+        $this->assertSame('Id is not a numeric', $responseBody->errors[0]);
+        $this->assertSame('Id gaz does not exists', $responseBody->errors[1]);
+        $this->assertSame('Invalid doctypes_second_level_label', $responseBody->errors[2]);
+        $this->assertSame('Invalid doctypes_first_level_id', $responseBody->errors[3]);
+
+    }
+
     public function testRead(){
         //  READ FIRST LEVEL
         $environment  = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']);
@@ -176,14 +260,52 @@ class FirstLevelControllerTest extends TestCase
         $responseBody = json_decode((string)$response->getBody());  
 
         $this->assertSame(self::$secondLevelId, $responseBody->secondLevel->doctypes_second_level_id);
-        $this->assertNotNull($responseBody->secondLevel->doctypes_second_level_label); 
-        $this->assertNotNull($responseBody->secondLevel->doctypes_first_level_id); 
-        $this->assertNotNull($responseBody->secondLevel->enabled); 
-        $this->assertNotNull($responseBody->firstLevel); 
+        $this->assertSame('testTUsecondlevelUPDATE', $responseBody->secondLevel->doctypes_second_level_label);
+        $this->assertSame(self::$firstLevelId, $responseBody->secondLevel->doctypes_first_level_id);
+        $this->assertSame(true, $responseBody->secondLevel->enabled); 
+
+        // READ SECOND LEVEL FAIL
+        $response          = $secondLevelController->getById($request, new \Slim\Http\Response(), ["id" => 'GAZ']);
+        $responseBody      = json_decode((string)$response->getBody());  
+ 
+        $this->assertSame('wrong format for id', $responseBody->errors);
+    }
+
+    public function testDeleteSecondLevel()
+    {
+        $secondLevelController = new \Doctype\controllers\SecondLevelController();
+
+        //  DELETE
+        $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'DELETE']);
+        $request     = \Slim\Http\Request::createFromEnvironment($environment);
+
+        $aArgs = [];
+        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
+
+        $response     = $secondLevelController->delete($fullRequest, new \Slim\Http\Response(), ["id" => self::$secondLevelId]);
+        $responseBody = json_decode((string)$response->getBody());
+
+        $this->assertSame(self::$secondLevelId, $responseBody->secondLevel->doctypes_second_level_id);
+        $this->assertSame(self::$firstLevelId, $responseBody->secondLevel->doctypes_first_level_id);
+        $this->assertSame('testTUsecondlevelUPDATE', $responseBody->secondLevel->doctypes_second_level_label);
+        $this->assertSame('#7777', $responseBody->secondLevel->css_style);
+        $this->assertSame('N', $responseBody->secondLevel->enabled);
+
+        //  DELETE FAIL
+        $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'DELETE']);
+        $request     = \Slim\Http\Request::createFromEnvironment($environment);
+
+        $aArgs = [];
+        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
+
+        $response     = $secondLevelController->delete($fullRequest, new \Slim\Http\Response(), ["id" => 'gaz']);
+        $responseBody = json_decode((string)$response->getBody());
+
+        $this->assertSame('Id is not a numeric', $responseBody->errors); 
 
     }
 
-    public function testDelete()
+    public function testDeleteFirstLevel()
     {
         $firstLevelController = new \Doctype\controllers\FirstLevelController();
 
@@ -216,4 +338,18 @@ class FirstLevelControllerTest extends TestCase
 
     }
 
+    public function testDeleteSQL()
+    {
+        DatabaseModel::delete([
+            'table' => 'doctypes_first_level',
+            'where' => ['doctypes_first_level_id = ?'],
+            'data'  => [self::$firstLevelId]
+        ]);
+        DatabaseModel::delete([
+            'table' => 'doctypes_second_level',
+            'where' => ['doctypes_second_level_id = ?'],
+            'data'  => [self::$secondLevelId]
+        ]);
+    }
+
 }
diff --git a/phpunit.xml b/phpunit.xml
index 2354743bb2a..f8c399f26ef 100755
--- a/phpunit.xml
+++ b/phpunit.xml
@@ -5,6 +5,7 @@
             <!--directory>core/Test</directory-->
             <file>core/Test/ActionControllerTest.php</file>
             <file>core/Test/BasketControllerTest.php</file>
+            <file>core/Test/DoctypeControllerTest.php</file>
             <file>core/Test/NotificationControllerTest.php</file>
             <file>core/Test/NotificationScheduleControllerTest.php</file>
             <file>core/Test/ParameterControllerTest.php</file>
@@ -21,11 +22,10 @@
     </testsuites>
     <filter>
       <whitelist>
-          <directory suffix="Test.php">core/Test</directory>
+          <!-- <directory suffix="Test.php">core/Test</directory> -->
           <directory suffix=".php">src</directory>
           <directory suffix=".php">core/Controllers</directory>
-          <directory suffix=".php">core/Models</directory>
-          <directory suffix=".php">apps/maarch_entreprise/Models</directory>         
+          <directory suffix=".php">core/Models</directory>        
           <directory suffix=".php">modules/visa/Controllers</directory>
           <directory suffix=".php">modules/visa/Models</directory>          
           <directory suffix=".php">modules/attachments/Controllers</directory>
diff --git a/src/app/doctype/models/SecondLevelModelAbstract.php b/src/app/doctype/models/SecondLevelModelAbstract.php
index 9e3ceb6d80a..81c39c55734 100644
--- a/src/app/doctype/models/SecondLevelModelAbstract.php
+++ b/src/app/doctype/models/SecondLevelModelAbstract.php
@@ -55,7 +55,7 @@ class SecondLevelModelAbstract
 
     public static function create(array $aArgs)
     {
-        ValidatorModel::notEmpty($aArgs, ['label', 'doctypes_first_level_id']);
+        ValidatorModel::notEmpty($aArgs, ['doctypes_second_level_label', 'doctypes_first_level_id']);
         ValidatorModel::intVal($aArgs, ['doctypes_first_level_id']);
 
         $aArgs['doctypes_second_level_id'] = DatabaseModel::getNextSequenceValue(['sequenceId' => 'doctypes_second_level_id_seq']);
@@ -79,7 +79,7 @@ class SecondLevelModelAbstract
             'data'      => [$aArgs['doctypes_second_level_id']]
         ]);
 
-        return true;
+        return $aArgs;
     }
 
     public static function disabledFirstLevel(array $aArgs)
diff --git a/src/core/lang/lang-en.php b/src/core/lang/lang-en.php
index 77e11f7e0a6..867d17a95bb 100644
--- a/src/core/lang/lang-en.php
+++ b/src/core/lang/lang-en.php
@@ -28,6 +28,9 @@ define('_DELETE_NOTIFICATIONS', 'Notification deleted');
 define('_DOCTYPE_FIRSTLEVEL_ADDED', 'Doctype first level added');
 define('_DOCTYPE_FIRSTLEVEL_DELETED', 'Doctype first level deleted');
 define('_DOCTYPE_FIRSTLEVEL_UPDATED', 'Doctype first level edited');
+define('_DOCTYPE_SECONDLEVEL_ADDED', 'Doctype second level added');
+define('_DOCTYPE_SECONDLEVEL_DELETED', 'Doctype second level deleted');
+define('_DOCTYPE_SECONDLEVEL_UPDATED', 'Doctype second level edited');
 define('_ENTITY_CREATION', 'Entity creation');
 define('_ENTITY_MODIFICATION', 'Entity modification');
 define('_ENTITY_SUPPRESSION', 'Entity suppression');
diff --git a/src/core/lang/lang-fr.php b/src/core/lang/lang-fr.php
index fcee1ff28ca..049749f60e6 100644
--- a/src/core/lang/lang-fr.php
+++ b/src/core/lang/lang-fr.php
@@ -28,6 +28,9 @@ define('_DELETE_NOTIFICATIONS', 'Notification supprimée');
 define('_DOCTYPE_FIRSTLEVEL_ADDED', 'Chemise ajoutée');
 define('_DOCTYPE_FIRSTLEVEL_DELETED', 'Chemise supprimée');
 define('_DOCTYPE_FIRSTLEVEL_UPDATED', 'Chemise modifiée');
+define('_DOCTYPE_SECONDLEVEL_ADDED', 'Sous-chemise ajoutée');
+define('_DOCTYPE_SECONDLEVEL_DELETED', 'Sous-chemise supprimée');
+define('_DOCTYPE_SECONDLEVEL_UPDATED', 'Sous-chemise modifiée');
 define('_ENTITY_CREATION', 'Création entité');
 define('_ENTITY_MODIFICATION', 'Modification entité');
 define('_ENTITY_SUPPRESSION', 'Suppression entité');
-- 
GitLab