Skip to content
Snippets Groups Projects
UserControllerTest.php 11.8 KiB
Newer Older
  • Learn to ignore specific revisions
  • Damien's avatar
    Damien committed
    <?php
    
    /**
    
    * Copyright Maarch since 2008 under license.
    * See LICENSE.txt file at the root folder for more details.
    
    Damien's avatar
    Damien committed
    * This file is part of Maarch software.
    *
    */
    
    use PHPUnit\Framework\TestCase;
    
    class UserControllerTest extends TestCase
    {
        private static $signatureId = null;
    
        private static $userId = null;
    
        public function testCreateUser()
        {
            $userController = new \User\controllers\UserController();
    
            $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'POST']);
            $request        = \Slim\Http\Request::createFromEnvironment($environment);
    
            $aArgs = [
    
                'login'             => 'emailLogin',
                'firstname'         => 'Prénom',
                'lastname'          => 'Nom',
    
            ];
    
            $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
            $response     = $userController->create($fullRequest, new \Slim\Http\Response());
            $responseBody = json_decode((string)$response->getBody());
    
            $this->assertIsInt($responseBody->id);
    
            self::$userId = $responseBody->id;
    
    
            //Mail missing
            $aArgs = [
    
                'login'     => 'failLogin',
    
                'firstname' => 'Prénom',
                'lastname'  => 'Nom'
            ];
    
            $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
            $response     = $userController->create($fullRequest, new \Slim\Http\Response());
            $responseBody = json_decode((string)$response->getBody());
    
    
            $this->assertSame('Body email is empty or not a valid email', $responseBody->errors);
    
    
            //Mail wrong format
            $aArgs = [
    
                'login'     => 'failLogin',
    
                'firstname' => 'Prénom',
                'lastname'  => 'Nom',
                'email'     => 'emailtest.fr'
            ];
    
            $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
            $response     = $userController->create($fullRequest, new \Slim\Http\Response());
            $responseBody = json_decode((string)$response->getBody());
    
    
            $this->assertSame('Body email is empty or not a valid email', $responseBody->errors);
    
    Damien's avatar
    Damien committed
    
    
        public function testUpdatePassword()
    
        {
            $userController = new \User\controllers\UserController();
    
    
            $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'POST']);
            $request     = \Slim\Http\Request::createFromEnvironment($environment);
    
                'currentPassword'          => 'maarch@',
    
                'newPassword'              => 'maarch2',
                'passwordConfirmation'     => 'maarch2'
            ];
    
            $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
    
            $response     = $userController->updatePassword($fullRequest, new \Slim\Http\Response(), ['id' => $GLOBALS['id']]);
    
            $responseBody = json_decode((string)$response->getBody());
    
            $this->assertEmpty($responseBody);
    
    
            //Error
            $aArgs = [
                'currentPassword'          => 'maarch3',
                'newPassword'              => 'maarch',
                'passwordConfirmation'     => 'maarch'
            ];
    
            $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
    
            $response     = $userController->updatePassword($fullRequest, new \Slim\Http\Response(), ['id' => $GLOBALS['id']]);
    
            $responseBody = json_decode((string)$response->getBody());
    
            $this->assertSame('Wrong Password', $responseBody->errors);
    
            //Error
            $aArgs = [
                'currentPassword'          => 'maarch2',
    
    Florian Azizian's avatar
    Florian Azizian committed
                'newPassword'              => 'maa',
                'passwordConfirmation'     => 'maa'
            ];
    
            $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
    
            $response     = $userController->updatePassword($fullRequest, new \Slim\Http\Response(), ['id' => $GLOBALS['id']]);
    
    Florian Azizian's avatar
    Florian Azizian committed
            $responseBody = json_decode((string)$response->getBody());
    
    Florian Azizian's avatar
    Florian Azizian committed
            $this->assertSame('Password does not match security criteria', $responseBody->errors);
    
            //Error
            $aArgs = [
                'currentPassword'          => 'maarch2',
    
                'newPassword'              => 'maarch1',
                'passwordConfirmation'     => 'maarch'
            ];
    
            $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
    
            $response     = $userController->updatePassword($fullRequest, new \Slim\Http\Response(), ['id' => $GLOBALS['id']]);
    
            $responseBody = json_decode((string)$response->getBody());
    
            $this->assertSame('Body newPassword and passwordConfirmation must be identical', $responseBody->errors);
    
    
            $aArgs = [
                'currentPassword'          => 'maarch2',
    
                'newPassword'              => 'maarch@',
                'passwordConfirmation'     => 'maarch@'
    
            ];
    
            $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
            $response     = $userController->updatePassword($fullRequest, new \Slim\Http\Response(), ['id' => $GLOBALS['id']]);
            $responseBody = json_decode((string)$response->getBody());
    
            $this->assertEmpty($responseBody);
    
    Damien's avatar
    Damien committed
        public function testGet()
        {
            $userController = new \User\controllers\UserController();
    
            $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']);
            $request        = \Slim\Http\Request::createFromEnvironment($environment);
    
            $response     = $userController->get($request, new \Slim\Http\Response());
            $responseBody = json_decode((string)$response->getBody());
    
    
            $this->assertIsArray($responseBody->users);
    
    Damien's avatar
    Damien committed
            $this->assertNotEmpty($responseBody->users);
        }
    
        public function testGetById()
        {
            $userController = new \User\controllers\UserController();
    
            $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']);
            $request        = \Slim\Http\Request::createFromEnvironment($environment);
    
    
            $response     = $userController->getById($request, new \Slim\Http\Response(), ['id' => self::$userId]);
    
    Damien's avatar
    Damien committed
            $responseBody = json_decode((string)$response->getBody());
    
    
            $this->assertSame(self::$userId, $responseBody->user->id);
            $this->assertSame('email@test.fr', $responseBody->user->email);
            $this->assertSame('Prénom', $responseBody->user->firstname);
            $this->assertSame('Nom', $responseBody->user->lastname);
    
    Damien's avatar
    Damien committed
    
            $response     = $userController->getById($request, new \Slim\Http\Response(), ['id' => -1]);
    
            $this->assertSame(400, $response->getStatusCode());
    
    Damien's avatar
    Damien committed
            $responseBody = json_decode((string)$response->getBody());
    
            $this->assertSame('User does not exist', $responseBody->errors);
    
    Damien's avatar
    Damien committed
        }
    
        public function testUpdate()
        {
            $userController = new \User\controllers\UserController();
    
    
            // UPDATE PREFERENCE
    
            $previousUserId = $GLOBALS['id'];
            $GLOBALS['id']  = self::$userId;
    
    Damien's avatar
    Damien committed
            $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'POST']);
            $request        = \Slim\Http\Request::createFromEnvironment($environment);
    
            $aArgs = [
    
                'writingMode'       => 'stylus',
                'writingSize'       => 2,
                'writingColor'      => '#F1F1F1',
                'lang'              => 'fr',
                'signatureScaling'  => false,
                'notifications'     => [
                    'instant'       => true,
                    'summaries'     => [],
    
    Damien's avatar
    Damien committed
            ];
    
            $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
    
            $response     = $userController->updatePreferences($fullRequest, new \Slim\Http\Response(), ['id' => self::$userId]);
            $responseBodyPreferences = json_decode((string)$response->getBody());
            $GLOBALS['id'] = $previousUserId;
            $this->assertEmpty($responseBodyPreferences);
    
            $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'POST']);
            $request        = \Slim\Http\Request::createFromEnvironment($environment);
    
    Damien's avatar
    Damien committed
    
            $aArgs = [
    
                'firstname'     => 'Jolly',
                'lastname'      => 'Jumper',
    
    Damien's avatar
    Damien committed
            ];
    
            $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
    
            $response     = $userController->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$userId]);
    
    Damien's avatar
    Damien committed
            $responseBody = json_decode((string)$response->getBody());
    
    
            $this->assertIsObject($responseBody->user);
    
    Damien's avatar
    Damien committed
            $this->assertNotEmpty($responseBody->user);
    
            $response     = $userController->getById($request, new \Slim\Http\Response(), ['id' => self::$userId]);
    
    Damien's avatar
    Damien committed
            $responseBody = json_decode((string)$response->getBody());
    
    
            $this->assertSame('Jolly', $responseBody->user->firstname);
            $this->assertSame('Jumper', $responseBody->user->lastname);
    
            $preferences = json_decode($responseBody->user->preferences, true);
            $this->assertSame('stylus', $preferences['writingMode']);
            $this->assertSame(2, $preferences['writingSize']);
            $this->assertSame('#F1F1F1', $preferences['writingColor']);
            $this->assertSame('fr', $preferences['lang']);
    
            $this->assertIsArray($preferences['notifications']);
            $this->assertSame(true, $preferences['notifications']['instant']);
            $this->assertSame([], $preferences['notifications']['summaries']);
    
    Damien's avatar
    Damien committed
        }
    
        public function testCreateSignature()
        {
    
            $previousUserId = $GLOBALS['id'];
            $GLOBALS['id']  = self::$userId;
    
            $signatureController = new \User\controllers\SignatureController();
    
    Damien's avatar
    Damien committed
    
            $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'POST']);
            $request        = \Slim\Http\Request::createFromEnvironment($environment);
    
            $aArgs = [
                'encodedSignature'  => base64_encode(file_get_contents('test/unitTests/samples/signature.jpg')),
                'format'            => 'jpg'
    
    Damien's avatar
    Damien committed
    
            $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
    
            $response     = $signatureController->create($fullRequest, new \Slim\Http\Response(), ['id' => self::$userId]);
    
    Damien's avatar
    Damien committed
            $responseBody = json_decode((string)$response->getBody());
    
    
            $this->assertIsInt($responseBody->signatureId);
    
    Damien's avatar
    Damien committed
            self::$signatureId = $responseBody->signatureId;
    
            $GLOBALS['id'] = $previousUserId;
    
    Damien's avatar
    Damien committed
        }
    
        public function testGetSignatures()
        {
    
            $previousUserId = $GLOBALS['id'];
            $GLOBALS['id']  = self::$userId;
    
            $signatureController = new \User\controllers\SignatureController();
    
    Damien's avatar
    Damien committed
    
            $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']);
            $request        = \Slim\Http\Request::createFromEnvironment($environment);
    
    
            $response     = $signatureController->get($request, new \Slim\Http\Response(), ['id' => self::$userId]);
    
    Damien's avatar
    Damien committed
            $responseBody = json_decode((string)$response->getBody());
    
    
            $this->assertIsArray($responseBody->signatures);
    
    Damien's avatar
    Damien committed
            $this->assertNotEmpty($responseBody->signatures);
    
            $GLOBALS['id'] = $previousUserId;
    
    Damien's avatar
    Damien committed
        }
    
        public function testDeleteSignature()
        {
    
            $previousUserId = $GLOBALS['id'];
            $GLOBALS['id']  = self::$userId;
    
            $signatureController = new \User\controllers\SignatureController();
    
    Damien's avatar
    Damien committed
    
            $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']);
            $request        = \Slim\Http\Request::createFromEnvironment($environment);
    
    
            $response     = $signatureController->delete($request, new \Slim\Http\Response(), ['id' => self::$userId, 'signatureId' => self::$signatureId]);
    
    Damien's avatar
    Damien committed
            $responseBody = json_decode((string)$response->getBody());
    
            $this->assertSame('success', $responseBody->success);
    
    
            \SrcCore\models\DatabaseModel::delete([
                'table' => 'users',
    
                'where' => ['id = ?'],
                'data'  => [self::$userId]
    
            $GLOBALS['id'] = $previousUserId;