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

    public function testCreate()
    {
        $attachmentController = new \Attachment\controllers\AttachmentController();

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

        $fileContent = file_get_contents('test/unitTests/samples/test.txt');
        $encodedFile = base64_encode($fileContent);

        $aArgs = [
            'title'         => 'Nulle pierre ne peut être polie sans friction, nul homme ne peut parfaire son expérience sans épreuve.',
            'type'          => 'response_project',
            'chrono'        => 'MAARCH/2019D/24',
            'resIdMaster'   => 100,
            'encodedFile'   => $encodedFile,
            'format'        => 'txt',
        ];

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

        $response     = $attachmentController->create($fullRequest, new \Slim\Http\Response());
        $responseBody = json_decode((string)$response->getBody());
        self::$id = $responseBody->id;
        $this->assertInternalType('int', self::$id);

        // CHECK ERROR EMPTY TYPE
        $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'POST']);
        $request     = \Slim\Http\Request::createFromEnvironment($environment);
        $aArgsFail   = $aArgs;
        unset($aArgsFail['type']);
        $fullRequest = \httpRequestCustom::addContentInBody($aArgsFail, $request);
        $response = $attachmentController->create($fullRequest, new \Slim\Http\Response());
        $this->assertSame(400, $response->getStatusCode());
        $response = json_decode((string)$response->getBody(), true);

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

        //  READ
        $res = \Attachment\models\AttachmentModel::getById(['id' => self::$id, 'select' => ['*']]);

        $this->assertInternalType('array', $res);

        $this->assertSame($aArgs['title'], $res['title']);
        $this->assertSame($aArgs['type'], $res['attachment_type']);
        $this->assertSame('txt', $res['format']);
        $this->assertSame('A_TRA', $res['status']);
        $this->assertSame('superadmin', $res['typist']);
        $this->assertSame(1, $res['relation']);
        $this->assertSame($aArgs['chrono'], $res['identifier']);
        $this->assertNotNull($res['path']);
        $this->assertNotNull($res['filename']);
        $this->assertNotNull($res['docserver_id']);
        $this->assertNotNull($res['fingerprint']);
        $this->assertNotNull($res['filesize']);
        $this->assertNull($res['origin_id']);
    }

    public function testUpdate()
    {
        $attachmentController = new \Attachment\controllers\AttachmentController();

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

        $aArgs = [
            'title' => 'La plus chétive cabane renferme plus de vertus que les palais des rois.',
            'type'  => 'response_project',
        ];

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

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

        // CHECK ERROR EMPTY TYPE
        $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'PUT']);
        $request     = \Slim\Http\Request::createFromEnvironment($environment);
        $aArgsFail   = $aArgs;
        unset($aArgsFail['type']);
        $fullRequest = \httpRequestCustom::addContentInBody($aArgsFail, $request);

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

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

        //  READ
        $response = $attachmentController->getById($request, new \Slim\Http\Response(), ['id' => self::$id]);
        $res = json_decode((string)$response->getBody(), true);
        $this->assertInternalType('array', $res);

        $this->assertSame($aArgs['title'], $res['title']);
        $this->assertSame($aArgs['type'], $res['type']);
        $this->assertSame('A_TRA', $res['status']);
        $this->assertSame(1, $res['relation']);
    }

    public function testDelete()
    {
        $attachmentController = new \Attachment\controllers\AttachmentController();

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

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

        //  DELETE
        $environment  = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'DELETE']);
        $request      = \Slim\Http\Request::createFromEnvironment($environment);
        $response = $attachmentController->delete($request, new \Slim\Http\Response(), ['id' => self::$id]);
        $res      = json_decode((string)$response->getBody(), true);
        $this->assertSame(400, $response->getStatusCode());

        $this->assertSame('Attachment does not exist', $res['errors']);

        //  READ
        $response = $attachmentController->getById($request, new \Slim\Http\Response(), ['id' => self::$id]);
        $res = json_decode((string)$response->getBody(), true);
        $this->assertSame(400, $response->getStatusCode());

        $this->assertSame('Attachment does not exist', $res['errors']);
    }