From 60f74e04704e8155ad3ebd14f2b9b9e47049f213 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sun, 24 Oct 2021 13:18:08 +0200 Subject: [PATCH] get overall coverage to 76% --- Controller/ApiController.php | 29 +- Models/CommentVoteMapper.php | 2 +- tests/Controller/ApiControllerTest.php | 249 ++++++++++++++++++ tests/Controller/test.md | 3 + tests/Models/CommentTest.php | 2 +- tests/Models/CommentVoteMapperTest.php | 2 +- ...ommentList.php => NullCommentListTest.php} | 0 .../{NullComment.php => NullCommentTest.php} | 0 ...ommentVote.php => NullCommentVoteTest.php} | 0 9 files changed, 270 insertions(+), 17 deletions(-) create mode 100644 tests/Controller/ApiControllerTest.php create mode 100644 tests/Controller/test.md rename tests/Models/{NullCommentList.php => NullCommentListTest.php} (100%) rename tests/Models/{NullComment.php => NullCommentTest.php} (100%) rename tests/Models/{NullCommentVote.php => NullCommentVoteTest.php} (100%) diff --git a/Controller/ApiController.php b/Controller/ApiController.php index dde2ccb..271b80f 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -59,6 +59,7 @@ final class ApiController extends Controller { $commentList = $this->createCommentList(); $this->createModel($request->header->account, $commentList, CommentListMapper::class, 'comment_list', $request->getOrigin()); + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Comment List', 'Comment list successfully created', $commentList); } /** @@ -108,9 +109,9 @@ final class ApiController extends Controller private function updateCommentListFromRequest(RequestAbstract $request) : CommentList { $list = CommentListMapper::get((int) $request->getData('id')); - $list->allowEdit = (bool) ($request->getData('allow_edit') ?? false); - $list->allowVoting = (bool) ($request->getData('allow_voting') ?? false); - $list->allowFiles = (bool) ($request->getData('allow_upload') ?? false); + $list->allowEdit = (bool) ($request->getData('allow_edit') ?? $list->allowEdit); + $list->allowVoting = (bool) ($request->getData('allow_voting') ?? $list->allowVoting); + $list->allowFiles = (bool) ($request->getData('allow_upload') ?? $list->allowFiles); $list->status = (int) ($request->getData('commentlist_status') ?? $list->status); return $list; @@ -132,7 +133,7 @@ final class ApiController extends Controller public function apiCommentCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void { if (!empty($val = $this->validateCommentCreate($request))) { - $response->set('news_create', new FormValidation($val)); + $response->set('comment_create', new FormValidation($val)); $response->header->status = RequestStatusCode::R_400; return; @@ -180,8 +181,8 @@ final class ApiController extends Controller $comment->title = (string) ($request->getData('title') ?? ''); $comment->contentRaw = (string) ($request->getData('plain') ?? ''); $comment->content = Markdown::parse((string) ($request->getData('plain') ?? '')); - $comment->setRef($request->getData('ref') !== null ? (int) $request->getData('ref') : null); - $comment->setList((int) ($request->getData('list') ?? 0)); + $comment->ref = $request->getData('ref') !== null ? (int) $request->getData('ref') : null; + $comment->list = (int) ($request->getData('list') ?? 0); if (!empty($uploadedFiles = $request->getFiles() ?? [])) { $uploaded = $this->app->moduleManager->get('Media')->uploadFiles( @@ -239,10 +240,10 @@ final class ApiController extends Controller private function updateCommentFromRequest(RequestAbstract $request) : Comment { $comment = CommentMapper::get((int) $request->getData('id')); - $comment->setTitle($request->getData('title') ?? $comment->getTitle()); - $comment->setContentRaw($request->getData('plain') ?? $comment->getContentRaw()); - $comment->setContent(Markdown::parse((string) ($request->getData('plain') ?? $comment->getPlain()))); - $comment->setRef($request->getData('ref') ?? $comment->getRef()); + $comment->title = $request->getData('title') ?? $comment->getTitle(); + $comment->contentRaw = $request->getData('plain') ?? $comment->getContentRaw(); + $comment->content = Markdown::parse((string) ($request->getData('plain') ?? $comment->getPlain())); + $comment->ref = $request->getData('ref') ?? $comment->ref; return $comment; } @@ -299,7 +300,7 @@ final class ApiController extends Controller * * @since 1.0.0 */ - private function apiChangeCommentVote(RequestAbstract $request, ResponseAbstract $response, $data = null) : void + public function apiChangeCommentVote(RequestAbstract $request, ResponseAbstract $response, $data = null) : void { if (!empty($val = $this->validateCommentVote($request))) { $response->set('qa_answer_vote', new FormValidation($val)); @@ -314,7 +315,7 @@ final class ApiController extends Controller $new = new CommentVote(); $new->score = (int) $request->getData('type'); $new->comment = (int) $request->getData('id'); - $new->createdBy = new NullAccount($request->header->account); + $new->createdBy = $request->header->account; $this->createModel($request->header->account, $new, CommentVoteMapper::class, 'comment_vote', $request->getOrigin()); $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Vote', 'Sucessfully voted.', $new); @@ -339,8 +340,8 @@ final class ApiController extends Controller private function validateCommentVote(RequestAbstract $request) : array { $val = []; - if (($val['id'] = ($request->getData('id') === null)) - || ($val['type'] = ($request->getData('type', 'int') < -1 || $request->getData('type') > 1)) + if (($val['id'] = empty($request->getData('id'))) + || ($val['type'] = ($request->getData('type', 'int') < -1 || $request->getData('type', 'int') > 1)) ) { return $val; } diff --git a/Models/CommentVoteMapper.php b/Models/CommentVoteMapper.php index 5ebf4bc..e4d653e 100755 --- a/Models/CommentVoteMapper.php +++ b/Models/CommentVoteMapper.php @@ -83,6 +83,6 @@ final class CommentVoteMapper extends DataMapperAbstract $results = self::getAllByQuery($query); - return \reset($results); + return empty($results) ? new NullCommentVote() : \reset($results); } } diff --git a/tests/Controller/ApiControllerTest.php b/tests/Controller/ApiControllerTest.php new file mode 100644 index 0000000..27b8ad7 --- /dev/null +++ b/tests/Controller/ApiControllerTest.php @@ -0,0 +1,249 @@ +app = new class() extends ApplicationAbstract + { + protected string $appName = 'Api'; + }; + + $this->app->dbPool = $GLOBALS['dbpool']; + $this->app->orgId = 1; + $this->app->accountManager = new AccountManager($GLOBALS['session']); + $this->app->appSettings = new CoreSettings(); + $this->app->moduleManager = new ModuleManager($this->app, __DIR__ . '/../../../../Modules/'); + $this->app->dispatcher = new Dispatcher($this->app); + $this->app->eventManager = new EventManager($this->app->dispatcher); + $this->app->eventManager->importFromFile(__DIR__ . '/../../../../Web/Api/Hooks.php'); + $this->app->sessionManager = new HttpSession(36000); + + $account = new Account(); + TestUtils::setMember($account, 'id', 1); + + $permission = new AccountPermission(); + $permission->setUnit(1); + $permission->setApp('backend'); + $permission->setPermission( + PermissionType::READ + | PermissionType::CREATE + | PermissionType::MODIFY + | PermissionType::DELETE + | PermissionType::PERMISSION + ); + + $account->addPermission($permission); + + $this->app->accountManager->add($account); + $this->app->router = new WebRouter(); + + $this->module = $this->app->moduleManager->get('Comments'); + + TestUtils::setMember($this->module, 'app', $this->app); + } + + /** + * @covers Modules\Comments\Controller\ApiController + * @group module + */ + public function testApiCommentListCU() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + + $this->module->apiCommentListCreate($request, $response); + self::assertGreaterThan(0, $lId = $response->get('')['response']->getId()); + + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('id', $lId); + $request->setData('allow_edit', '1'); + $request->setData('allow_voting', '0'); + $request->setData('allow_upload', '1'); + $request->setData('commentlist_status', '2'); + + $this->module->apiCommentListUpdate($request, $response); + self::assertTrue($response->get('')['response']->allowEdit); + self::assertFalse($response->get('')['response']->allowVoting); + self::assertTrue($response->get('')['response']->allowFiles); + self::assertEquals(2, $response->get('')['response']->status); + } + + /** + * @covers Modules\Comments\Controller\ApiController + * @group module + */ + public function testApiCommentCRU() : void + { + // create + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + + $this->module->apiCommentListCreate($request, $response); + self::assertGreaterThan(0, $lId = $response->get('')['response']->getId()); + + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('list', $lId); + $request->setData('plain', 'Some **text**.'); + + 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->apiCommentCreate($request, $response); + self::assertGreaterThan(0, $cId = $response->get('')['response']->getId()); + + //read + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('id', $cId); + + $this->module->apiCommentGet($request, $response); + self::assertEquals('', $response->get('')['response']->title); + self::assertEquals('Some **text**.', $response->get('')['response']->contentRaw); + + // update + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('id', $cId); + $request->setData('title', 'New title'); + $request->setData('plain', 'New plain'); + + $this->module->apiCommentUpdate($request, $response); + self::assertEquals('New title', $response->get('')['response']->title); + self::assertEquals('New plain', $response->get('')['response']->contentRaw); + } + + /** + * @covers Modules\Comments\Controller\ApiController + * @group module + */ + public function testApiCommentCreateInvalidData() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('invalid', '1'); + + $this->module->apiCommentCreate($request, $response); + self::assertEquals(RequestStatusCode::R_400, $response->header->status); + } + + /** + * @covers Modules\Comments\Controller\ApiController + * @group module + */ + public function testApiCommentVoteCreateInvalidData() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('invalid', '1'); + + $this->module->apiChangeCommentVote($request, $response); + self::assertEquals(RequestStatusCode::R_400, $response->header->status); + } + + /** + * @covers Modules\Comments\Controller\ApiController + * @group module + */ + public function testApiCommentVoteCreate() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('id', '1'); + $request->setData('type', '1'); + + $this->module->apiChangeCommentVote($request, $response); + self::assertGreaterThan(0, $vId = $response->get('')['response']->getId()); + + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('id', '1'); + $request->setData('type', '-1'); + + $this->module->apiChangeCommentVote($request, $response); + self::assertEquals($vId, $response->get('')['response']->getId()); + } +} diff --git a/tests/Controller/test.md b/tests/Controller/test.md new file mode 100644 index 0000000..d35f959 --- /dev/null +++ b/tests/Controller/test.md @@ -0,0 +1,3 @@ +# Test Title + +Some **test** text. \ No newline at end of file diff --git a/tests/Models/CommentTest.php b/tests/Models/CommentTest.php index 9225e83..27edf89 100755 --- a/tests/Models/CommentTest.php +++ b/tests/Models/CommentTest.php @@ -127,7 +127,7 @@ final class CommentTest extends \PHPUnit\Framework\TestCase } /** - * @covers Modules\CMS\Models\PageL11n + * @covers Modules\Comments\Models\Comment * @group module */ public function testSerialize() : void diff --git a/tests/Models/CommentVoteMapperTest.php b/tests/Models/CommentVoteMapperTest.php index 15e73bb..ab1152c 100644 --- a/tests/Models/CommentVoteMapperTest.php +++ b/tests/Models/CommentVoteMapperTest.php @@ -28,7 +28,7 @@ use Modules\Comments\Models\CommentVoteMapper; final class CommentVoteMapperTest extends \PHPUnit\Framework\TestCase { /** - * @covers Modules\Comments\Models\CommentVote + * @covers Modules\Comments\Models\CommentVoteMapper * @group module */ public function testCR() : void diff --git a/tests/Models/NullCommentList.php b/tests/Models/NullCommentListTest.php similarity index 100% rename from tests/Models/NullCommentList.php rename to tests/Models/NullCommentListTest.php diff --git a/tests/Models/NullComment.php b/tests/Models/NullCommentTest.php similarity index 100% rename from tests/Models/NullComment.php rename to tests/Models/NullCommentTest.php diff --git a/tests/Models/NullCommentVote.php b/tests/Models/NullCommentVoteTest.php similarity index 100% rename from tests/Models/NullCommentVote.php rename to tests/Models/NullCommentVoteTest.php