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