From a6cd3bff7bdc6365fc5c7eb72670313a627c5ac2 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Tue, 2 Nov 2021 21:57:09 +0100 Subject: [PATCH] add unit tests --- Controller/ApiController.php | 8 +- Controller/BackendController.php | 1 + Models/NewsArticle.php | 92 +++++++++---------- Models/NewsArticleMapper.php | 2 +- .../Api/ApiControllerNewsArticleTrait.php | 36 ++++++++ tests/Controller/Api/test.md | 3 + tests/Models/NewsArticleMapperTest.php | 36 ++++---- tests/Models/NewsArticleTest.php | 61 ++++++++++-- tests/Models/NewsSeenTest.php | 46 ++++++++++ tests/phpunit_default.xml | 2 +- 10 files changed, 202 insertions(+), 85 deletions(-) create mode 100644 tests/Controller/Api/test.md create mode 100644 tests/Models/NewsSeenTest.php diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 47defc1..d9333b6 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -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')) diff --git a/Controller/BackendController.php b/Controller/BackendController.php index 699fcd3..ee7df19 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -107,6 +107,7 @@ final class BackendController extends Controller implements DashboardElementInte /** * {@inheritdoc} + * @codeCoverageIgnore */ public function viewDashboard(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface { diff --git a/Models/NewsArticle.php b/Models/NewsArticle.php index 059c0a7..555f86c 100755 --- a/Models/NewsArticle.php +++ b/Models/NewsArticle.php @@ -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, diff --git a/Models/NewsArticleMapper.php b/Models/NewsArticleMapper.php index f295b7b..ccc106b 100755 --- a/Models/NewsArticleMapper.php +++ b/Models/NewsArticleMapper.php @@ -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], diff --git a/tests/Controller/Api/ApiControllerNewsArticleTrait.php b/tests/Controller/Api/ApiControllerNewsArticleTrait.php index 766fe83..7b59c76 100755 --- a/tests/Controller/Api/ApiControllerNewsArticleTrait.php +++ b/tests/Controller/Api/ApiControllerNewsArticleTrait.php @@ -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 diff --git a/tests/Controller/Api/test.md b/tests/Controller/Api/test.md new file mode 100644 index 0000000..d35f959 --- /dev/null +++ b/tests/Controller/Api/test.md @@ -0,0 +1,3 @@ +# Test Title + +Some **test** text. \ No newline at end of file diff --git a/tests/Models/NewsArticleMapperTest.php b/tests/Models/NewsArticleMapperTest.php index 5d0e1f6..af2abd4 100755 --- a/tests/Models/NewsArticleMapperTest.php +++ b/tests/Models/NewsArticleMapperTest.php @@ -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); diff --git a/tests/Models/NewsArticleTest.php b/tests/Models/NewsArticleTest.php index d2516b7..3906a15 100755 --- a/tests/Models/NewsArticleTest.php +++ b/tests/Models/NewsArticleTest.php @@ -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()); + } } diff --git a/tests/Models/NewsSeenTest.php b/tests/Models/NewsSeenTest.php new file mode 100644 index 0000000..5d67e97 --- /dev/null +++ b/tests/Models/NewsSeenTest.php @@ -0,0 +1,46 @@ +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); + } +} diff --git a/tests/phpunit_default.xml b/tests/phpunit_default.xml index 722365c..9208c99 100755 --- a/tests/phpunit_default.xml +++ b/tests/phpunit_default.xml @@ -1,5 +1,5 @@ - + *vendor*