Skip to content
Snippets Groups Projects
ContactCustomFieldControllerTest.php 11.27 KiB
<?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 ContactCustomFieldControllerTest extends TestCase
{
    private static $id = null;
    private static $id2 = null;

    public function testCreate()
    {
        $contactCustomFieldController = new \Contact\controllers\ContactCustomFieldController();

        //  CREATE
        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'POST']);
        $request        = \Slim\Http\Request::createFromEnvironment($environment);

        $args = [
            'label'     => 'mon custom',
            'type'      => 'select',
            'values'    => ['one', 'two']
        ];
        $fullRequest = \httpRequestCustom::addContentInBody($args, $request);

        $response     = $contactCustomFieldController->create($fullRequest, new \Slim\Http\Response());
        $this->assertSame(200, $response->getStatusCode());
        $responseBody = json_decode((string)$response->getBody(), true);

        $this->assertIsInt($responseBody['id']);

        self::$id = $responseBody['id'];

        $args = [
            'label'  => 'my second custom',
            'type'   => 'select',
            'values' => ['one', 'two']
        ];
        $fullRequest = \httpRequestCustom::addContentInBody($args, $request);

        $response     = $contactCustomFieldController->create($fullRequest, new \Slim\Http\Response());
        $this->assertSame(200, $response->getStatusCode());
        $responseBody = json_decode((string)$response->getBody(), true);

        $this->assertIsInt($responseBody['id']);

        self::$id2 = $responseBody['id'];

        //  Errors
        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'POST']);
        $request        = \Slim\Http\Request::createFromEnvironment($environment);

        $args = [
            'label'  => 'mon custom',
            'type'   => 'select',
            'values' => ['one', 'two']
        ];
        $fullRequest = \httpRequestCustom::addContentInBody($args, $request);

        $response     = $contactCustomFieldController->create($fullRequest, new \Slim\Http\Response());
        $this->assertSame(400, $response->getStatusCode());
        $responseBody = json_decode((string)$response->getBody(), true);

        $this->assertSame('Custom field with this label already exists', $responseBody['errors']);

        $args = [

        ];
        $fullRequest = \httpRequestCustom::addContentInBody($args, $request);

        $response     = $contactCustomFieldController->create($fullRequest, new \Slim\Http\Response());
        $this->assertSame(400, $response->getStatusCode());
        $responseBody = json_decode((string)$response->getBody(), true);
        $this->assertSame('Body label is empty or not a string', $responseBody['errors']);

        $args = [
            'label' => 'mon custom'
        ];
        $fullRequest = \httpRequestCustom::addContentInBody($args, $request);

        $response     = $contactCustomFieldController->create($fullRequest, new \Slim\Http\Response());
        $this->assertSame(400, $response->getStatusCode());
        $responseBody = json_decode((string)$response->getBody(), true);
        $this->assertSame('Body type is empty or not a string', $responseBody['errors']);

        $args = [
            'label'  => 'mon custom',
            'type'   => 'select',
            'values' => 'wrong format'
        ];
        $fullRequest = \httpRequestCustom::addContentInBody($args, $request);

        $response     = $contactCustomFieldController->create($fullRequest, new \Slim\Http\Response());
        $this->assertSame(400, $response->getStatusCode());
        $responseBody = json_decode((string)$response->getBody(), true);
        $this->assertSame('Body values is not an array', $responseBody['errors']);

        $GLOBALS['login'] = 'bbain';
        $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]);
        $GLOBALS['id'] = $userInfo['id'];

        $response     = $contactCustomFieldController->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 testReadList()
    {
        $contactCustomFieldController = new \Contact\controllers\ContactCustomFieldController();

        $environment  = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']);
        $request      = \Slim\Http\Request::createFromEnvironment($environment);

        $response         = $contactCustomFieldController->get($request, new \Slim\Http\Response());
        $responseBody     = json_decode((string)$response->getBody(), true);

        $this->assertNotNull($responseBody['customFields']);
    }

    public function testUpdate()
    {
        $contactCustomFieldController = new \Contact\controllers\ContactCustomFieldController();

        //  UPDATE
        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'PUT']);
        $request        = \Slim\Http\Request::createFromEnvironment($environment);

        $args = [
            'label'     => 'mon custom22',
            'values'    => ['un', 'deux', 'trois']
        ];
        $fullRequest = \httpRequestCustom::addContentInBody($args, $request);

        $response     = $contactCustomFieldController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]);
        $this->assertSame(204, $response->getStatusCode());

        //  Errors
        unset($args['label']);
        $fullRequest = \httpRequestCustom::addContentInBody($args, $request);

        $response     = $contactCustomFieldController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]);
        $this->assertSame(400, $response->getStatusCode());
        $responseBody = json_decode((string)$response->getBody(), true);

        $this->assertSame('Body label is empty or not a string', $responseBody['errors']);

        // Fail
        $response     = $contactCustomFieldController->update($request, new \Slim\Http\Response(), ['id' => 'wrong format']);
        $this->assertSame(400, $response->getStatusCode());
        $responseBody = json_decode((string)$response->getBody(), true);
        $this->assertSame('Param id is empty or not an integer', $responseBody['errors']);

        $args = [
            'label'  => 'mon custom',
            'type'   => 'select',
            'values' => 'wrong format'
        ];
        $fullRequest = \httpRequestCustom::addContentInBody($args, $request);

        $response     = $contactCustomFieldController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]);
        $this->assertSame(400, $response->getStatusCode());
        $responseBody = json_decode((string)$response->getBody(), true);
        $this->assertSame('Body values is not an array', $responseBody['errors']);

        $args = [
            'label'  => 'mon custom',
            'type'   => 'select',
            'values' => ['one', 'one', 'two']
        ];
        $fullRequest = \httpRequestCustom::addContentInBody($args, $request);

        $response     = $contactCustomFieldController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]);
        $this->assertSame(400, $response->getStatusCode());
        $responseBody = json_decode((string)$response->getBody(), true);
        $this->assertSame('Some values have the same name', $responseBody['errors']);

        $args = [
            'label'  => 'mon custom',
            'type'   => 'select',
            'values' => ['one', 'two']
        ];
        $fullRequest = \httpRequestCustom::addContentInBody($args, $request);

        $response     = $contactCustomFieldController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id * 1000]);
        $this->assertSame(400, $response->getStatusCode());
        $responseBody = json_decode((string)$response->getBody(), true);
        $this->assertSame('Custom field not found', $responseBody['errors']);

        $args = [
            'label'  => 'my second custom',
            'type'   => 'select',
            'values' => ['one', 'two']
        ];
        $fullRequest = \httpRequestCustom::addContentInBody($args, $request);

        $response     = $contactCustomFieldController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]);
        $this->assertSame(400, $response->getStatusCode());
        $responseBody = json_decode((string)$response->getBody(), true);
        $this->assertSame('Custom field with this label already exists', $responseBody['errors']);

        $GLOBALS['login'] = 'bbain';
        $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]);
        $GLOBALS['id'] = $userInfo['id'];

        $response     = $contactCustomFieldController->update($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']);

        $GLOBALS['login'] = 'superadmin';
        $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]);
        $GLOBALS['id'] = $userInfo['id'];;
    }

    public function testDelete()
    {
        $contactCustomFieldController = new \Contact\controllers\ContactCustomFieldController();

        //  UPDATE
        $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'DELETE']);
        $request        = \Slim\Http\Request::createFromEnvironment($environment);

        $response     = $contactCustomFieldController->delete($request, new \Slim\Http\Response(), ['id' => self::$id]);
        $this->assertSame(204, $response->getStatusCode());

        $response     = $contactCustomFieldController->delete($request, new \Slim\Http\Response(), ['id' => self::$id2]);
        $this->assertSame(204, $response->getStatusCode());

        // Fail
        $response     = $contactCustomFieldController->delete($request, new \Slim\Http\Response(), ['id' => 'wrong format']);
        $this->assertSame(400, $response->getStatusCode());
        $responseBody = json_decode((string)$response->getBody(), true);
        $this->assertSame('Param id is empty or not an integer', $responseBody['errors']);

        $GLOBALS['login'] = 'bbain';
        $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]);
        $GLOBALS['id'] = $userInfo['id'];

        $response     = $contactCustomFieldController->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']);

        $GLOBALS['login'] = 'superadmin';
        $userInfo = \User\models\UserModel::getByLogin(['login' => $GLOBALS['login'], 'select' => ['id']]);
        $GLOBALS['id'] = $userInfo['id'];;
    }
}