From 635904cd15fe58ed6318fcf26af54523044a4215 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Mon, 25 Oct 2021 20:06:48 +0200 Subject: [PATCH] test fixes --- Controller/ApiController.php | 26 ++++++++ Models/EditorDocMapper.php | 5 +- tests/Controller/ApiControllerTest.php | 84 ++++++++++++++++++++++---- tests/Controller/test.md | 3 + tests/Models/EditorDocMapperTest.php | 3 + tests/Models/EditorDocTest.php | 12 ++++ 6 files changed, 119 insertions(+), 14 deletions(-) create mode 100644 tests/Controller/test.md diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 6c854ed..fd3a1c4 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -242,6 +242,13 @@ final class ApiController extends Controller */ public function apiFileCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void { + if (!empty($val = $this->validateEditorFileCreate($request))) { + $response->set('file_create', new FormValidation($val)); + $response->header->status = RequestStatusCode::R_400; + + return; + } + $uploadedFiles = $request->getFiles() ?? []; if (empty($uploadedFiles)) { @@ -272,4 +279,23 @@ final class ApiController extends Controller $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'File', 'File successfully updated', $uploaded); } + + /** + * Validate document create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateEditorFileCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['doc'] = empty($request->getData('doc')))) { + return $val; + } + + return []; + } } diff --git a/Models/EditorDocMapper.php b/Models/EditorDocMapper.php index c2a1616..f849d80 100755 --- a/Models/EditorDocMapper.php +++ b/Models/EditorDocMapper.php @@ -120,7 +120,10 @@ final class EditorDocMapper extends DataMapperAbstract $depth = 3; $query = self::getQuery(depth: $depth); $query->where(self::$table . '_d' . $depth . '.editor_doc_virtual', '=', $virtualPath); - $query->where(self::$table . '_d' . $depth . '.editor_doc_created_by', '=', $account); + + if (!empty($account)) { + $query->where(self::$table . '_d' . $depth . '.editor_doc_created_by', '=', $account); + } return self::getAllByQuery($query, RelationType::ALL, $depth); } diff --git a/tests/Controller/ApiControllerTest.php b/tests/Controller/ApiControllerTest.php index 9dbc516..9f2aabe 100755 --- a/tests/Controller/ApiControllerTest.php +++ b/tests/Controller/ApiControllerTest.php @@ -36,6 +36,7 @@ use phpOMS\Module\ModuleManager; use phpOMS\Router\WebRouter; use phpOMS\Uri\HttpUri; use phpOMS\Utils\TestUtils; +use phpOMS\System\MimeType; /** * @internal @@ -104,6 +105,23 @@ final class ApiControllerTest extends \PHPUnit\Framework\TestCase $request->header->account = 1; $request->setData('title', 'Controller Test Title'); $request->setData('plain', 'Controller Test Description'); + $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->apiEditorCreate($request, $response); @@ -115,24 +133,66 @@ final class ApiControllerTest extends \PHPUnit\Framework\TestCase * @covers Modules\Editor\Controller\ApiController * @group module */ - public function testCreateEditorDocWithExistingTag() : void + public function testCreateFileForDoc() : void { - $tag = new Tag(); - $tag->setL11n('EditorDocTest'); - $tagId = TagMapper::create($tag); - $response = new HttpResponse(); $request = new HttpRequest(new HttpUri('')); $request->header->account = 1; - $request->setData('title', 'Controller Test With Tag'); - $request->setData('plain', 'Controller Test Description'); - $request->setData('tag', '[' . $tagId . ']'); + $request->setData('doc', '1'); + $request->setData('name', 'NewUpload'); - $this->module->apiEditorCreate($request, $response); + if (!\is_file(__DIR__ . '/test_tmp.md')) { + \copy(__DIR__ . '/test.md', __DIR__ . '/test_tmp.md'); + } - self::assertEquals('Controller Test With Tag', $response->get('')['response']->title); - self::assertGreaterThan(0, $response->get('')['response']->getId()); + 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->apiFileCreate($request, $response); + self::assertCount(1, $response->get('')['response']); + } + + /** + * @covers Modules\Editor\Controller\ApiController + * @group module + */ + public function testCreateFileForDocEmptyUpload() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('doc', '1'); + $request->setData('name', 'MissingFile'); + + $this->module->apiFileCreate($request, $response); + self::assertEquals(RequestStatusCode::R_400, $response->header->status); + } + + /** + * @covers Modules\Editor\Controller\ApiController + * @group module + */ + public function testCreateFileForDocInvalidData() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('invalid', '1'); + + $this->module->apiFileCreate($request, $response); + self::assertEquals(RequestStatusCode::R_400, $response->header->status); } /** @@ -148,7 +208,6 @@ final class ApiControllerTest extends \PHPUnit\Framework\TestCase $request->setData('title', 'Controller Test Title'); $this->module->apiEditorCreate($request, $response); - self::assertEquals(RequestStatusCode::R_400, $response->header->status); } @@ -185,7 +244,6 @@ final class ApiControllerTest extends \PHPUnit\Framework\TestCase $request->setData('id', '1'); $this->module->apiEditorGet($request, $response); - self::assertEquals('Changed Title', $response->get('')['response']->title); } 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/EditorDocMapperTest.php b/tests/Models/EditorDocMapperTest.php index 0012298..f48330f 100755 --- a/tests/Models/EditorDocMapperTest.php +++ b/tests/Models/EditorDocMapperTest.php @@ -47,6 +47,9 @@ final class EditorDocMapperTest extends \PHPUnit\Framework\TestCase self::assertEquals($doc->content, $docR->content); self::assertEquals($doc->title, $docR->title); self::assertEquals($doc->getVirtualPath(), $docR->getVirtualPath()); + + $docR2 = EditorDocMapper::getByVirtualPath('/some/test/path', 1); + self::assertEquals($docR, \reset($docR2)); } /** diff --git a/tests/Models/EditorDocTest.php b/tests/Models/EditorDocTest.php index 22c0731..7c7312d 100755 --- a/tests/Models/EditorDocTest.php +++ b/tests/Models/EditorDocTest.php @@ -16,6 +16,7 @@ namespace Modules\Tasks\tests\Models; use Modules\Admin\Models\NullAccount; use Modules\Editor\Models\EditorDoc; +use Modules\Media\Models\Media; use Modules\Tag\Models\Tag; /** @@ -45,6 +46,7 @@ final class EditorDocTest extends \PHPUnit\Framework\TestCase self::assertEquals('', $this->doc->content); self::assertEquals('', $this->doc->plain); self::assertEquals([], $this->doc->getTags()); + self::assertEquals([], $this->doc->getMedia()); self::assertEquals((new \DateTime('now'))->format('Y-m-d'), $this->doc->createdAt->format('Y-m-d')); } @@ -111,6 +113,16 @@ final class EditorDocTest extends \PHPUnit\Framework\TestCase self::assertCount(1, $this->doc->getTags()); } + /** + * @covers Modules\Editor\Models\EditorDoc + * @group module + */ + public function testMediaInputOutput() : void + { + $this->doc->addMedia(new Media()); + self::assertCount(1, $this->doc->getMedia()); + } + /** * @covers Modules\Editor\Models\EditorDoc * @group module