add unit tests

This commit is contained in:
Dennis Eichhorn 2021-11-02 21:57:09 +01:00
parent 1711047712
commit a6cd3bff7b
10 changed files with 202 additions and 85 deletions

View File

@ -108,14 +108,14 @@ final class ApiController extends Controller
{
/** @var NewsArticle $newsArticle */
$newsArticle = NewsArticleMapper::get((int) $request->getData('id'));
$newsArticle->setPublish(new \DateTime((string) ($request->getData('publish') ?? $newsArticle->getPublish()->format('Y-m-d H:i:s'))));
$newsArticle->publich = new \DateTime((string) ($request->getData('publish') ?? $newsArticle->publish->format('Y-m-d H:i:s')));
$newsArticle->title = (string) ($request->getData('title') ?? $newsArticle->title);
$newsArticle->plain = $request->getData('plain') ?? $newsArticle->plain;
$newsArticle->content = Markdown::parse((string) ($request->getData('plain') ?? $newsArticle->plain));
$newsArticle->setLanguage(\strtolower((string) ($request->getData('lang') ?? $newsArticle->getLanguage())));
$newsArticle->setType((int) ($request->getData('type') ?? $newsArticle->getType()));
$newsArticle->setStatus((int) ($request->getData('status') ?? $newsArticle->getStatus()));
$newsArticle->setFeatured((bool) ($request->getData('featured') ?? $newsArticle->isFeatured()));
$newsArticle->isFeatured = (bool) ($request->getData('featured') ?? $newsArticle->isFeatured);
return $newsArticle;
}
@ -160,14 +160,14 @@ final class ApiController extends Controller
{
$newsArticle = new NewsArticle();
$newsArticle->createdBy = new NullAccount($request->header->account);
$newsArticle->setPublish(new \DateTime((string) ($request->getData('publish') ?? 'now')));
$newsArticle->publich = new \DateTime((string) ($request->getData('publish') ?? 'now'));
$newsArticle->title = (string) ($request->getData('title') ?? '');
$newsArticle->plain = $request->getData('plain') ?? '';
$newsArticle->content = Markdown::parse((string) ($request->getData('plain') ?? ''));
$newsArticle->setLanguage(\strtolower((string) ($request->getData('lang') ?? $request->getLanguage())));
$newsArticle->setType((int) ($request->getData('type') ?? NewsType::ARTICLE));
$newsArticle->setStatus((int) ($request->getData('status') ?? NewsStatus::VISIBLE));
$newsArticle->setFeatured((bool) ($request->getData('featured') ?? true));
$newsArticle->isFeatured = (bool) ($request->getData('featured') ?? true);
// allow comments
if (!empty($request->getData('allow_comments'))

View File

@ -107,6 +107,7 @@ final class BackendController extends Controller implements DashboardElementInte
/**
* {@inheritdoc}
* @codeCoverageIgnore
*/
public function viewDashboard(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface
{

View File

@ -119,7 +119,7 @@ class NewsArticle implements \JsonSerializable, ArrayableInterface
* @var bool
* @since 1.0.0
*/
private bool $featured = false;
public bool $isFeatured = false;
/**
* Tags.
@ -181,18 +181,6 @@ class NewsArticle implements \JsonSerializable, ArrayableInterface
return $this->language;
}
/**
* Get publish date
*
* @return \DateTime
*
* @since 1.0.0
*/
public function getPublish() : \DateTime
{
return $this->publish;
}
/**
* Set language
*
@ -211,20 +199,6 @@ class NewsArticle implements \JsonSerializable, ArrayableInterface
$this->language = $language;
}
/**
* Set publish date
*
* @param \DateTime $publish Publish date
*
* @return void
*
* @since 1.0.0
*/
public function setPublish(\DateTime $publish) : void
{
$this->publish = $publish;
}
/**
* Get news article type
*
@ -286,33 +260,63 @@ class NewsArticle implements \JsonSerializable, ArrayableInterface
}
/**
* Adding new tag.
*
* @param Tag $tag Tag
*
* @return int
*
* @since 1.0.0
*/
public function addTag(Tag $tag) : int
{
$this->tags[] = $tag;
\end($this->tags);
$key = (int) \key($this->tags);
\reset($this->tags);
return $key;
}
/**
* Remove Tag from list.
*
* @param int $id Tag
*
* @return bool
*
* @since 1.0.0
*/
public function isFeatured() : bool
public function removeTag($id) : bool
{
return $this->featured;
if (isset($this->tags[$id])) {
unset($this->tags[$id]);
return true;
}
return false;
}
/**
* Set featured
* Get task elements.
*
* @param bool $featured Is featured
* @param int $id Element id
*
* @return void
* @return Tag
*
* @since 1.0.0
*/
public function setFeatured(bool $featured) : void
public function getTag(int $id) : Tag
{
$this->featured = $featured;
return $this->tags[$id] ?? new NullTag();
}
/**
* Get tags
* Get task elements.
*
* @return array
* @return Tag[]
*
* @since 1.0.0
*/
@ -321,20 +325,6 @@ class NewsArticle implements \JsonSerializable, ArrayableInterface
return $this->tags;
}
/**
* Add tag
*
* @param Tag $tag Tag
*
* @return void
*
* @since 1.0.0
*/
public function addTag(Tag $tag) : void
{
$this->tags[] = $tag;
}
/**
* Get all media
*
@ -373,7 +363,7 @@ class NewsArticle implements \JsonSerializable, ArrayableInterface
'content' => $this->content,
'type' => $this->type,
'status' => $this->status,
'featured' => $this->featured,
'isFeatured' => $this->isFeatured,
'publish' => $this->publish,
'createdAt' => $this->createdAt,
'createdBy' => $this->createdBy,

View File

@ -45,7 +45,7 @@ final class NewsArticleMapper extends DataMapperAbstract
'news_lang' => ['name' => 'news_lang', 'type' => 'string', 'internal' => 'language'],
'news_status' => ['name' => 'news_status', 'type' => 'int', 'internal' => 'status'],
'news_type' => ['name' => 'news_type', 'type' => 'int', 'internal' => 'type'],
'news_featured' => ['name' => 'news_featured', 'type' => 'bool', 'internal' => 'featured'],
'news_featured' => ['name' => 'news_featured', 'type' => 'bool', 'internal' => 'isFeatured'],
'news_comment_list' => ['name' => 'news_comment_list', 'type' => 'int', 'internal' => 'comments'],
'news_created_at' => ['name' => 'news_created_at', 'type' => 'DateTimeImmutable', 'internal' => 'createdAt', 'readonly' => true],
'news_created_by' => ['name' => 'news_created_by', 'type' => 'int', 'internal' => 'createdBy', 'readonly' => true],

View File

@ -21,6 +21,9 @@ use Modules\News\Models\NullNewsArticle;
use phpOMS\Message\Http\HttpRequest;
use phpOMS\Message\Http\HttpResponse;
use phpOMS\Uri\HttpUri;
use phpOMS\Message\Http\RequestStatusCode;
use phpOMS\Utils\TestUtils;
use phpOMS\System\MimeType;
trait ApiControllerNewsArticleTrait
{
@ -41,6 +44,23 @@ trait ApiControllerNewsArticleTrait
$request->setData('type', NewsType::ARTICLE);
$request->setData('status', NewsStatus::DRAFT);
$request->setData('featred', true);
$request->setData('tags', '[{"title": "TestTitle", "color": "#f0f", "language": "en"}, {"id": 1}]');
if (!\is_file(__DIR__ . '/test_tmp.md')) {
\copy(__DIR__ . '/test.md', __DIR__ . '/test_tmp.md');
}
TestUtils::setMember($request, 'files', [
'file1' => [
'name' => 'test.md',
'type' => MimeType::M_TXT,
'tmp_name' => __DIR__ . '/test_tmp.md',
'error' => \UPLOAD_ERR_OK,
'size' => \filesize(__DIR__ . '/test_tmp.md'),
],
]);
$request->setData('media', \json_encode([1]));
$this->module->apiNewsCreate($request, $response);
@ -48,6 +68,22 @@ trait ApiControllerNewsArticleTrait
self::assertGreaterThan(0, $response->get('')['response']->getId());
}
/**
* @covers Modules\News\Controller\ApiController
* @group module
*/
public function testApiNewsCreateInvalidData() : void
{
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request->header->account = 1;
$request->setData('invalid', '1');
$this->module->apiNewsCreate($request, $response);
self::assertEquals(RequestStatusCode::R_400, $response->header->status);
}
/**
* @testdox A news article can be returned
* @covers Modules\News\Controller\ApiController

View File

@ -0,0 +1,3 @@
# Test Title
Some **test** text.

View File

@ -43,8 +43,8 @@ final class NewsArticleMapperTest extends \PHPUnit\Framework\TestCase
$news->title = $text->generateText(\mt_rand(3, 7));
$news->content = ($raw = $text->generateText(\mt_rand(100, 300)));
$news->plain = $raw;
$news->setPublish(new \DateTime('2001-05-07'));
$news->setFeatured(true);
$news->publish = new \DateTime('2001-05-07');
$news->isFeatured = true;
$news->setLanguage(ISO639x1Enum::_DE);
$news->setStatus(NewsStatus::VISIBLE);
$news->setType(NewsType::HEADLINE);
@ -62,8 +62,8 @@ final class NewsArticleMapperTest extends \PHPUnit\Framework\TestCase
self::assertEquals($news->getStatus(), $newsR->getStatus());
self::assertEquals($news->getType(), $newsR->getType());
self::assertEquals($news->getLanguage(), $newsR->getLanguage());
self::assertEquals($news->isFeatured(), $newsR->isFeatured());
self::assertEquals($news->getPublish()->format('Y-m-d'), $newsR->getPublish()->format('Y-m-d'));
self::assertEquals($news->isFeatured, $newsR->isFeatured);
self::assertEquals($news->publish->format('Y-m-d'), $newsR->publish->format('Y-m-d'));
}
/**
@ -81,8 +81,8 @@ final class NewsArticleMapperTest extends \PHPUnit\Framework\TestCase
$news->createdBy = new NullAccount(1);
$news->title = $text->generateText(\mt_rand(3, 7));
$news->content = $text->generateText(\mt_rand(10, 300));
$news->setPublish(new \DateTime('2001-05-07'));
$news->setFeatured(false);
$news->publish = new \DateTime('2001-05-07');
$news->isFeatured = false;
$news->setLanguage(ISO639x1Enum::_DE);
$news->setStatus(NewsStatus::VISIBLE);
$news->setType(NewsType::HEADLINE);
@ -93,8 +93,8 @@ final class NewsArticleMapperTest extends \PHPUnit\Framework\TestCase
$news->createdBy = new NullAccount(1);
$news->title = $text->generateText(\mt_rand(3, 7));
$news->content = $text->generateText(\mt_rand(10, 300));
$news->setPublish(new \DateTime('2001-05-07'));
$news->setFeatured(false);
$news->publish = new \DateTime('2001-05-07');
$news->isFeatured = false;
$news->setLanguage(ISO639x1Enum::_DE);
$news->setStatus(NewsStatus::DRAFT);
$news->setType(NewsType::HEADLINE);
@ -107,8 +107,8 @@ final class NewsArticleMapperTest extends \PHPUnit\Framework\TestCase
$news->createdBy = new NullAccount(1);
$news->title = $text->generateText(\mt_rand(3, 7));
$news->content = $text->generateText(\mt_rand(10, 300));
$news->setPublish(new \DateTime('2001-05-07'));
$news->setFeatured(false);
$news->publish = new \DateTime('2001-05-07');
$news->isFeatured = false;
$news->setLanguage(ISO639x1Enum::_DE);
$news->setStatus(NewsStatus::VISIBLE);
$news->setType(NewsType::ARTICLE);
@ -119,8 +119,8 @@ final class NewsArticleMapperTest extends \PHPUnit\Framework\TestCase
$news->createdBy = new NullAccount(1);
$news->title = $text->generateText(\mt_rand(3, 7));
$news->content = $text->generateText(\mt_rand(10, 300));
$news->setPublish(new \DateTime('2001-05-07'));
$news->setFeatured(false);
$news->publish = new \DateTime('2001-05-07');
$news->isFeatured = false;
$news->setLanguage(ISO639x1Enum::_DE);
$news->setStatus(NewsStatus::VISIBLE);
$news->setType(NewsType::LINK);
@ -131,8 +131,8 @@ final class NewsArticleMapperTest extends \PHPUnit\Framework\TestCase
$news->createdBy = new NullAccount(1);
$news->title = $text->generateText(\mt_rand(3, 7));
$news->content = $text->generateText(\mt_rand(10, 300));
$news->setPublish(new \DateTime('2001-05-07'));
$news->setFeatured(false);
$news->publish = new \DateTime('2001-05-07');
$news->isFeatured = false;
$news->setLanguage(ISO639x1Enum::_DE);
$news->setStatus(NewsStatus::DRAFT);
$news->setType(NewsType::ARTICLE);
@ -145,8 +145,8 @@ final class NewsArticleMapperTest extends \PHPUnit\Framework\TestCase
$news->createdBy = new NullAccount(1);
$news->title = $text->generateText(\mt_rand(3, 7));
$news->content = $text->generateText(\mt_rand(10, 300));
$news->setPublish(new \DateTime('2001-05-07'));
$news->setFeatured(true);
$news->publish = new \DateTime('2001-05-07');
$news->isFeatured = true;
$news->setLanguage(ISO639x1Enum::_EN);
$news->setStatus(NewsStatus::VISIBLE);
$news->setType(NewsType::ARTICLE);
@ -162,8 +162,8 @@ final class NewsArticleMapperTest extends \PHPUnit\Framework\TestCase
$news->createdBy = new NullAccount(1);
$news->title = $text->generateText(\mt_rand(3, 7));
$news->content = $text->generateText(\mt_rand(10, 300));
$news->setPublish($publishDate);
$news->setFeatured(false);
$news->publish = $publishDate;
$news->isFeatured = false;
$news->setLanguage(ISO639x1Enum::_DE);
$news->setStatus(NewsStatus::VISIBLE);
$news->setType(NewsType::ARTICLE);

View File

@ -19,6 +19,8 @@ use Modules\News\Models\NewsArticle;
use Modules\News\Models\NewsStatus;
use Modules\News\Models\NewsType;
use phpOMS\Localization\ISO639x1Enum;
use Modules\Media\Models\Media;
use Modules\Tag\Models\Tag;
/**
* @testdox Modules\News\tests\Models\NewsArticleTest: News article
@ -49,8 +51,8 @@ final class NewsArticleTest extends \PHPUnit\Framework\TestCase
self::assertEquals('', $this->news->title);
self::assertEquals('', $this->news->content);
self::assertEquals((new \DateTime('now'))->format('Y-m-d'), $this->news->createdAt->format('Y-m-d'));
self::assertEquals((new \DateTime('now'))->format('Y-m-d'), $this->news->getPublish()->format('Y-m-d'));
self::assertFalse($this->news->isFeatured());
self::assertEquals((new \DateTime('now'))->format('Y-m-d'), $this->news->publish->format('Y-m-d'));
self::assertFalse($this->news->isFeatured);
self::assertEquals(ISO639x1Enum::_EN, $this->news->getLanguage());
self::assertEquals(NewsStatus::DRAFT, $this->news->getStatus());
self::assertEquals(NewsType::ARTICLE, $this->news->getType());
@ -109,8 +111,8 @@ final class NewsArticleTest extends \PHPUnit\Framework\TestCase
*/
public function testPublishInputOutput() : void
{
$this->news->setPublish($data = new \DateTime('2001-05-07'));
self::assertEquals($data, $this->news->getPublish());
$this->news->publish = $data = new \DateTime('2001-05-07');
self::assertEquals($data, $this->news->publish);
}
/**
@ -120,8 +122,8 @@ final class NewsArticleTest extends \PHPUnit\Framework\TestCase
*/
public function testFeaturedInputOutput() : void
{
$this->news->setFeatured(true);
self::assertTrue($this->news->isFeatured());
$this->news->isFeatured = true;
self::assertTrue($this->news->isFeatured);
}
/**
@ -168,8 +170,8 @@ final class NewsArticleTest extends \PHPUnit\Framework\TestCase
$this->news->createdBy = new NullAccount(1);
$this->news->content = 'Content';
$this->news->plain = 'Plain';
$this->news->setPublish(new \DateTime('2001-05-07'));
$this->news->setFeatured(true);
$this->news->publish = new \DateTime('2001-05-07');
$this->news->isFeatured = true;
$this->news->setLanguage(ISO639x1Enum::_DE);
$this->news->setStatus(NewsStatus::VISIBLE);
$this->news->setType(NewsType::HEADLINE);
@ -181,8 +183,8 @@ final class NewsArticleTest extends \PHPUnit\Framework\TestCase
'content' => $this->news->content,
'type' => $this->news->getType(),
'status' => $this->news->getStatus(),
'featured' => $this->news->isFeatured(),
'publish' => $this->news->getPublish(),
'isFeatured' => $this->news->isFeatured,
'publish' => $this->news->publish,
'createdAt' => $this->news->createdAt,
'createdBy' => $this->news->createdBy,
];
@ -229,4 +231,43 @@ final class NewsArticleTest extends \PHPUnit\Framework\TestCase
$news = new NewsArticle();
$news->setLanguage('9999');
}
/**
* @covers Modules\News\Models\NewsArticle
* @group module
*/
public function testTagInputOutput() : void
{
$tag = new Tag();
$tag->setL11n('Tag');
$this->news->addTag($tag);
self::assertEquals($tag, $this->news->getTag(0));
self::assertCount(1, $this->news->getTags());
}
/**
* @covers Modules\News\Models\NewsArticle
* @group module
*/
public function testTagRemove() : void
{
$tag = new Tag();
$tag->setL11n('Tag');
$this->news->addTag($tag);
self::assertTrue($this->news->removeTag(0));
self::assertCount(0, $this->news->getTags());
self::assertFalse($this->news->removeTag(0));
}
/**
* @covers Modules\News\Models\NewsArticle
* @group module
*/
public function testMediaInputOutput() : void
{
$this->news->addMedia(new Media());
self::assertCount(1, $this->news->getMedia());
}
}

View File

@ -0,0 +1,46 @@
<?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\News\tests\Models;
use Modules\News\Models\NewsSeen;
/**
* @testdox Modules\News\tests\Models\NewsSeenTest: News article
*
* @internal
*/
final class NewsSeenTest extends \PHPUnit\Framework\TestCase
{
protected NewsSeen $seen;
/**
* {@inheritdoc}
*/
protected function setUp() : void
{
$this->seen = new NewsSeen();
}
/**
* @covers Modules\News\Models\NewsSeen
* @group module
*/
public function testDefault() : void
{
self::assertEquals(0, $this->seen->getId());
self::assertEquals(0, $this->seen->seenBy);
self::assertInstanceOf('\DateTime', $this->seen->seenAt);
}
}

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>