add unit tests

This commit is contained in:
Dennis Eichhorn 2021-11-02 21:57:09 +01:00
parent 005a269bc9
commit 9d61848c51
15 changed files with 595 additions and 28 deletions

View File

@ -644,7 +644,9 @@ final class ApiController extends Controller
$view = new View($this->app->l11nManager, $request, $response);
$view->setData('media', $media);
$response->endAllOutputBuffering(); // for large files
if (!\headers_sent()) {
$response->endAllOutputBuffering(); // for large files
}
if (($type = $request->getData('type')) === null) {
$view->setTemplate('/Modules/Media/Theme/Api/render');
@ -652,7 +654,7 @@ final class ApiController extends Controller
$head = new Head();
$css = \file_get_contents(__DIR__ . '/../../../Web/Backend/css/backend-small.css');
if ($css === false) {
$css = '';
$css = ''; // @codeCoverageIgnore
}
$css = \preg_replace('!\s+!', ' ', $css);
@ -712,12 +714,11 @@ final class ApiController extends Controller
case 'txt':
case 'cfg':
case 'log':
$response->header->set('Content-Type', MimeType::M_TXT, true);
break;
case 'md':
$response->header->set('Content-Type', MimeType::M_TXT, true);
break;
case 'csv':
case 'json':
$response->header->set('Content-Type', MimeType::M_CSV, true);
break;
case 'xls':
@ -738,9 +739,6 @@ final class ApiController extends Controller
case 'pptx':
$response->header->set('Content-Type', MimeType::M_PPTX, true);
break;
case 'json':
$response->header->set('Content-Type', MimeType::M_CSV, true);
break;
case 'jpg':
case 'jpeg':
$response->header->set('Content-Type', MimeType::M_JPG, true);

View File

@ -43,10 +43,10 @@ class Collection extends Media implements \Iterator
/**
* Is collection.
*
* @var int
* @var bool
* @since 1.0.0
*/
protected int $collection = 1;
protected bool $collection = true;
/**
* Set sources.
@ -108,20 +108,6 @@ class Collection extends Media implements \Iterator
return new NullMedia();
}
/**
* {@inheritdoc}
*/
public function setExtension(string $extension) : void
{
}
/**
* {@inheritdoc}
*/
public function setVersioned(bool $versioned) : void
{
}
/**
* {@inheritdoc}
*/

View File

@ -160,10 +160,10 @@ class Media implements \JsonSerializable
/**
* Is collection.
*
* @var int
* @var bool
* @since 1.0.0
*/
protected int $collection = 0;
protected bool $collection = false;
/**
* Tags.

View File

@ -50,7 +50,7 @@ class MediaMapper extends DataMapperAbstract
'media_password' => ['name' => 'media_password', 'type' => 'string', 'internal' => 'password'],
'media_extension' => ['name' => 'media_extension', 'type' => 'string', 'internal' => 'extension'],
'media_size' => ['name' => 'media_size', 'type' => 'int', 'internal' => 'size'],
'media_collection' => ['name' => 'media_collection', 'type' => 'int', 'internal' => 'collection'],
'media_collection' => ['name' => 'media_collection', 'type' => 'bool', 'internal' => 'collection'],
'media_created_by' => ['name' => 'media_created_by', 'type' => 'int', 'internal' => 'createdBy', 'readonly' => true],
'media_created_at' => ['name' => 'media_created_at', 'type' => 'DateTimeImmutable', 'internal' => 'createdAt', 'readonly' => true],
];

View File

@ -38,6 +38,8 @@ class MediaType implements \JsonSerializable, ArrayableInterface
/**
* Name.
*
* Name used for additional identification, doesn't have to be unique.
*
* @var string
* @since 1.0.0
*/
@ -49,7 +51,19 @@ class MediaType implements \JsonSerializable, ArrayableInterface
* @var string|MediaTypeL11n
* @since 1.0.0
*/
protected $title = '';
protected $title;
/**
* Constructor.
*
* @param string $name Name
*
* @since 1.0.0
*/
public function __construct(string $name = '')
{
$this->setL11n($name);
}
/**
* Get id

View File

@ -15,6 +15,7 @@ declare(strict_types=1);
namespace Modules\Media\tests\Controller\Api;
use Modules\Media\Models\MediaMapper;
use Modules\Media\Models\Media;
use Modules\Media\Models\PathSettings;
use Modules\Media\Models\UploadStatus;
use phpOMS\Message\Http\HttpRequest;
@ -22,6 +23,7 @@ use phpOMS\Message\Http\HttpResponse;
use phpOMS\System\File\Local\Directory;
use phpOMS\Uri\HttpUri;
use phpOMS\Utils\TestUtils;
use phpOMS\System\MimeType;
trait ApiControllerMediaTrait
{
@ -73,6 +75,7 @@ trait ApiControllerMediaTrait
$request->header->account = 1;
$request->setData('name', 'Test Upload');
$request->setData('tags', '[{"title": "TestTitle", "color": "#f0f", "language": "en"}, {"id": 1}]');
if (!\is_dir(__DIR__ . '/temp')) {
\mkdir(__DIR__ . '/temp');
@ -257,4 +260,334 @@ trait ApiControllerMediaTrait
Directory::delete(__DIR__ . '/../test');
}
/**
* @covers Modules\Media\Controller\ApiController
* @group module
*/
public function testCreateView() : void
{
$media = new Media();
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request->header->account = 1;
$request->setData('type', 'html');
$media->extension = 'xls';
self::assertInstanceOf('\phpOMS\Views\View', $this->module->createView($media, $request, $response));
$media->extension = 'docx';
self::assertInstanceOf('\phpOMS\Views\View', $this->module->createView($media, $request, $response));
$request->setData('type', null, true);
self::assertInstanceOf('\phpOMS\Views\View', $this->module->createView($media, $request, $response));
}
/**
* @covers Modules\Media\Controller\ApiController
* @group module
*/
public function testApiMediaExportHTM() : void
{
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request->header->account = 1;
$request->setData('id', '1');
$request->setData('type', 'htm');
$this->module->apiMediaExport($request, $response);
self::assertEquals(MimeType::M_HTML, $response->header->get('Content-Type')[0]);
}
/**
* @covers Modules\Media\Controller\ApiController
* @group module
*/
public function testApiMediaExportPDF() : void
{
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request->header->account = 1;
$request->setData('id', '1');
$request->setData('type', 'pdf');
$this->module->apiMediaExport($request, $response);
self::assertEquals(MimeType::M_PDF, $response->header->get('Content-Type')[0]);
}
/**
* @covers Modules\Media\Controller\ApiController
* @group module
*/
public function testApiMediaExportC() : void
{
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request->header->account = 1;
$request->setData('id', '1');
$request->setData('type', 'c');
$this->module->apiMediaExport($request, $response);
self::assertEquals(MimeType::M_TXT, $response->header->get('Content-Type')[0]);
}
/**
* @covers Modules\Media\Controller\ApiController
* @group module
*/
public function testApiMediaExportTXT() : void
{
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request->header->account = 1;
$request->setData('id', '1');
$request->setData('type', 'txt');
$this->module->apiMediaExport($request, $response);
self::assertEquals(MimeType::M_TXT, $response->header->get('Content-Type')[0]);
}
/**
* @covers Modules\Media\Controller\ApiController
* @group module
*/
public function testApiMediaExportCSV() : void
{
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request->header->account = 1;
$request->setData('id', '1');
$request->setData('type', 'csv');
$this->module->apiMediaExport($request, $response);
self::assertEquals(MimeType::M_CSV, $response->header->get('Content-Type')[0]);
}
/**
* @covers Modules\Media\Controller\ApiController
* @group module
*/
public function testApiMediaExportXLS() : void
{
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request->header->account = 1;
$request->setData('id', '1');
$request->setData('type', 'xls');
$this->module->apiMediaExport($request, $response);
self::assertEquals(MimeType::M_XLS, $response->header->get('Content-Type')[0]);
}
/**
* @covers Modules\Media\Controller\ApiController
* @group module
*/
public function testApiMediaExportXLSX() : void
{
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request->header->account = 1;
$request->setData('id', '1');
$request->setData('type', 'xlsx');
$this->module->apiMediaExport($request, $response);
self::assertEquals(MimeType::M_XLSX, $response->header->get('Content-Type')[0]);
}
/**
* @covers Modules\Media\Controller\ApiController
* @group module
*/
public function testApiMediaExportDOC() : void
{
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request->header->account = 1;
$request->setData('id', '1');
$request->setData('type', 'doc');
$this->module->apiMediaExport($request, $response);
self::assertEquals(MimeType::M_DOC, $response->header->get('Content-Type')[0]);
}
/**
* @covers Modules\Media\Controller\ApiController
* @group module
*/
public function testApiMediaExportDOCX() : void
{
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request->header->account = 1;
$request->setData('id', '1');
$request->setData('type', 'docx');
$this->module->apiMediaExport($request, $response);
self::assertEquals(MimeType::M_DOCX, $response->header->get('Content-Type')[0]);
}
/**
* @covers Modules\Media\Controller\ApiController
* @group module
*/
public function testApiMediaExportPPT() : void
{
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request->header->account = 1;
$request->setData('id', '1');
$request->setData('type', 'ppt');
$this->module->apiMediaExport($request, $response);
self::assertEquals(MimeType::M_PPT, $response->header->get('Content-Type')[0]);
}
/**
* @covers Modules\Media\Controller\ApiController
* @group module
*/
public function testApiMediaExportPPTX() : void
{
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request->header->account = 1;
$request->setData('id', '1');
$request->setData('type', 'pptx');
$this->module->apiMediaExport($request, $response);
self::assertEquals(MimeType::M_PPTX, $response->header->get('Content-Type')[0]);
}
/**
* @covers Modules\Media\Controller\ApiController
* @group module
*/
public function testApiMediaExportJPG() : void
{
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request->header->account = 1;
$request->setData('id', '1');
$request->setData('type', 'jpg');
$this->module->apiMediaExport($request, $response);
self::assertEquals(MimeType::M_JPG, $response->header->get('Content-Type')[0]);
}
/**
* @covers Modules\Media\Controller\ApiController
* @group module
*/
public function testApiMediaExportGIF() : void
{
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request->header->account = 1;
$request->setData('id', '1');
$request->setData('type', 'gif');
$this->module->apiMediaExport($request, $response);
self::assertEquals(MimeType::M_GIF, $response->header->get('Content-Type')[0]);
}
/**
* @covers Modules\Media\Controller\ApiController
* @group module
*/
public function testApiMediaExportPNG() : void
{
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request->header->account = 1;
$request->setData('id', '1');
$request->setData('type', 'png');
$this->module->apiMediaExport($request, $response);
self::assertEquals(MimeType::M_PNG, $response->header->get('Content-Type')[0]);
}
/**
* @covers Modules\Media\Controller\ApiController
* @group module
*/
public function testApiMediaExportMP3() : void
{
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request->header->account = 1;
$request->setData('id', '1');
$request->setData('type', 'mp3');
$this->module->apiMediaExport($request, $response);
self::assertEquals(MimeType::M_MP3, $response->header->get('Content-Type')[0]);
}
/**
* @covers Modules\Media\Controller\ApiController
* @group module
*/
public function testApiMediaExportMP4() : void
{
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request->header->account = 1;
$request->setData('id', '1');
$request->setData('type', 'mp4');
$this->module->apiMediaExport($request, $response);
self::assertEquals(MimeType::M_MP4, $response->header->get('Content-Type')[0]);
}
/**
* @covers Modules\Media\Controller\ApiController
* @group module
*/
public function testApiMediaExportMPEG() : void
{
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request->header->account = 1;
$request->setData('id', '1');
$request->setData('type', 'mpeg');
$this->module->apiMediaExport($request, $response);
self::assertEquals(MimeType::M_MPEG, $response->header->get('Content-Type')[0]);
}
/**
* @covers Modules\Media\Controller\ApiController
* @group module
*/
public function testApiMediaExportBIN() : void
{
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request->header->account = 1;
$request->setData('id', '1');
$request->setData('type', 'exe');
$this->module->apiMediaExport($request, $response);
self::assertEquals(MimeType::M_BIN, $response->header->get('Content-Type')[0]);
}
}

View File

@ -34,6 +34,7 @@ final class CollectionMapperTest extends \PHPUnit\Framework\TestCase
$media->description = 'desc';
$media->descriptionRaw = 'descRaw';
$media->setPath('some/path');
$media->setVirtualPath('/some/path');
$media->size = 11;
$media->name = 'Collection';
$id = CollectionMapper::create($media);
@ -51,5 +52,8 @@ final class CollectionMapperTest extends \PHPUnit\Framework\TestCase
self::assertEquals($media->size, $mediaR->size);
self::assertEquals($media->extension, $mediaR->extension);
self::assertEquals($media->name, $mediaR->name);
self::assertGreaterThan(0, \count(CollectionMapper::getByVirtualPath('/some/path')));
self::assertGreaterThan(0, \count(CollectionMapper::getCollectionsByPath('/', true)));
}
}

View File

@ -49,6 +49,7 @@ final class CollectionTest extends \PHPUnit\Framework\TestCase
self::assertEquals(0, $this->media->size);
self::assertFalse($this->media->isVersioned);
self::assertEquals([], $this->media->getSources());
self::assertInstanceOf('\Modules\Media\Models\NullMedia', $this->media->getSourceByName('invalid'));
}
/**
@ -121,7 +122,10 @@ final class CollectionTest extends \PHPUnit\Framework\TestCase
public function testSourceInputOutput() : void
{
$this->media->setSources([$a = new NullMedia(1), $b = new NullMedia(2), $c = new NullMedia(3)]);
$b->name = 'test';
self::assertEquals([$a, $b, $c], $this->media->getSources());
self::assertEquals($b, $this->media->getSourceByName('test'));
}
/**

View File

@ -16,6 +16,7 @@ namespace Modules\Media\tests\Models;
use Modules\Admin\Models\NullAccount;
use Modules\Media\Models\Media;
use Modules\Tag\Models\Tag;
/**
* @internal
@ -190,6 +191,35 @@ final class MediaTest extends \PHPUnit\Framework\TestCase
self::assertFalse($this->media->comparePassword('test2'));
}
/**
* @covers Modules\Media\Models\Media
* @group module
*/
public function testTagInputOutput() : void
{
$tag = new Tag();
$tag->setL11n('Tag');
$this->media->addTag($tag);
self::assertEquals($tag, $this->media->getTag(0));
self::assertCount(1, $this->media->getTags());
}
/**
* @covers Modules\Media\Models\Media
* @group module
*/
public function testTagRemove() : void
{
$tag = new Tag();
$tag->setL11n('Tag');
$this->media->addTag($tag);
self::assertTrue($this->media->removeTag(0));
self::assertCount(0, $this->media->getTags());
self::assertFalse($this->media->removeTag(0));
}
/**
* @covers Modules\Media\Models\Media
* @group module

View File

@ -0,0 +1,87 @@
<?php
/**
* Orange Management
*
* PHP Version 8.0
*
* @package tests
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Media\tests\Models;
use Modules\Media\Models\MediaTypeL11n;
use phpOMS\Localization\ISO639x1Enum;
/**
* @internal
*/
final class MediaTypeL11nTest extends \PHPUnit\Framework\TestCase
{
private MediaTypeL11n $l11n;
/**
* {@inheritdoc}
*/
protected function setUp() : void
{
$this->l11n = new MediaTypeL11n();
}
/**
* @covers Modules\Media\Models\MediaTypeL11n
* @group module
*/
public function testDefault() : void
{
self::assertEquals(0, $this->l11n->getId());
self::assertEquals('', $this->l11n->title);
self::assertEquals(0, $this->l11n->type);
self::assertEquals(ISO639x1Enum::_EN, $this->l11n->getLanguage());
}
/**
* @covers Modules\Media\Models\MediaTypeL11n
* @group module
*/
public function testNameInputOutput() : void
{
$this->l11n->title = 'TestName';
self::assertEquals('TestName', $this->l11n->title);
}
/**
* @covers Modules\Media\Models\MediaTypeL11n
* @group module
*/
public function testLanguageInputOutput() : void
{
$this->l11n->setLanguage(ISO639x1Enum::_DE);
self::assertEquals(ISO639x1Enum::_DE, $this->l11n->getLanguage());
}
/**
* @covers Modules\Media\Models\MediaTypeL11n
* @group module
*/
public function testSerialize() : void
{
$this->l11n->title = 'Title';
$this->l11n->type = 2;
$this->l11n->setLanguage(ISO639x1Enum::_DE);
self::assertEquals(
[
'id' => 0,
'title' => 'Title',
'type' => 2,
'language' => ISO639x1Enum::_DE,
],
$this->l11n->jsonSerialize()
);
}
}

View File

@ -0,0 +1,77 @@
<?php
/**
* Orange Management
*
* PHP Version 8.0
*
* @package tests
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Media\tests\Models;
use Modules\Media\Models\MediaType;
use Modules\Media\Models\MediaTypeL11n;
/**
* @internal
*/
final class MediaTypeTest extends \PHPUnit\Framework\TestCase
{
private MediaType $type;
/**
* {@inheritdoc}
*/
protected function setUp() : void
{
$this->type = new MediaType();
}
/**
* @covers Modules\Media\Models\MediaType
* @group module
*/
public function testDefault() : void
{
self::assertEquals(0, $this->type->getId());
self::assertEquals('', $this->type->name);
}
/**
* @covers Modules\Media\Models\MediaType
* @group module
*/
public function testL11nInputOutput() : void
{
$this->type->setL11n('Test1');
self::assertEquals('Test1', $this->type->getL11n());
$this->type->setL11n(new MediaTypeL11n('Test2'));
self::assertEquals('Test2', $this->type->getL11n());
}
/**
* @covers Modules\Media\Models\MediaType
* @group module
*/
public function testSerialize() : void
{
$this->type->name = 'Name';
$serialized = $this->type->jsonSerialize();
unset($serialized['title']);
self::assertEquals(
[
'id' => 0,
'name' => 'Name',
],
$serialized
);
}
}

BIN
tests/Views/Audio.mp3 Normal file

Binary file not shown.

View File

@ -234,4 +234,38 @@ final class MediaViewTest extends \PHPUnit\Framework\TestCase
$method->invoke($this->view, $media, __DIR__ . '/test.md')
);
}
/**
* @covers Modules\Media\Views\MediaView
* @group module
*/
public function testIsVideo() : void
{
$method = new \ReflectionMethod($this->view, 'isVideoFile');
$method->setAccessible(true);
$media = new Media();
$media->setPath(__DIR__ . '/Video.mp4');
$media->isAbsolute = true;
self::assertFalse(
$method->invoke($this->view, $media)
);
}
/**
* @covers Modules\Media\Views\MediaView
* @group module
*/
public function testIsAudio() : void
{
$method = new \ReflectionMethod($this->view, 'isAudioFile');
$method->setAccessible(true);
$media = new Media();
$media->setPath(__DIR__ . '/Audio.mp4');
$media->isAbsolute = true;
self::assertFalse(
$method->invoke($this->view, $media)
);
}
}

BIN
tests/Views/Video.mp4 Normal file

Binary file not shown.

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" bootstrap="Bootstrap.php" colors="true" stopOnError="true" stopOnFailure="false" stopOnIncomplete="false" stopOnSkipped="false" beStrictAboutTestsThatDoNotTestAnything="false" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd">
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" bootstrap="Bootstrap.php" colors="true" columns="120" stopOnError="true" stopOnFailure="false" stopOnIncomplete="false" stopOnSkipped="false" beStrictAboutTestsThatDoNotTestAnything="false" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd">
<coverage includeUncoveredFiles="true" processUncoveredFiles="false">
<exclude>
<directory>*vendor*</directory>