From 8c758c43e5e9d6587df1cf61038507ce9d12adb7 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sat, 10 Oct 2020 21:28:38 +0200 Subject: [PATCH] add tests --- Controller/ApiController.php | 29 +++- Models/NullL11nTag.php | 27 ++++ Models/Tag.php | 4 +- tests/Controller/ApiControllerTest.php | 211 +++++++++++++++++++++++++ tests/Models/L11nTagTest.php | 74 ++++++--- tests/Models/NullTagTest.php | 42 +++++ tests/Models/TagTest.php | 89 +++++++---- 7 files changed, 421 insertions(+), 55 deletions(-) create mode 100644 Models/NullL11nTag.php create mode 100644 tests/Controller/ApiControllerTest.php create mode 100644 tests/Models/NullTagTest.php diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 40cd79e..1a92f3d 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -138,9 +138,32 @@ final class ApiController extends Controller $l11nTag = $this->createL11nTagFromRequest($l11nRequest); $this->createModel($request->getHeader()->getAccount(), $l11nTag, L11nTagMapper::class, 'tag_l11n', $request->getOrigin()); + $tag->setTitle($l11nTag); + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Tag', 'Tag successfully created', $tag); } + /** + * Validate tag l11n create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateTagL11nCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['title'] = empty($request->getData('title'))) + || ($val['tag'] = empty($request->getData('tag'))) + ) { + return $val; + } + + return []; + } + /** * Api method to create tag localization * @@ -156,8 +179,8 @@ final class ApiController extends Controller */ public function apiTagL11nCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void { - if (!empty($val = $this->validateTagCreate($request))) { - $response->set('tag_create', new FormValidation($val)); + if (!empty($val = $this->validateTagL11nCreate($request))) { + $response->set('tag_l11n_create', new FormValidation($val)); $response->getHeader()->setStatusCode(RequestStatusCode::R_400); return; @@ -267,7 +290,7 @@ final class ApiController extends Controller $response->set( $request->getUri()->__toString(), \array_values( - TagMapper::find((string) ($request->getData('search') ?? '')) + TagMapper::find((string) ($request->getData('search') ?? ''), 3) ) ); } diff --git a/Models/NullL11nTag.php b/Models/NullL11nTag.php new file mode 100644 index 0000000..a9413a4 --- /dev/null +++ b/Models/NullL11nTag.php @@ -0,0 +1,27 @@ +title = new L11nTag(); + $this->title = $title; } elseif ($this->title instanceof L11nTag && \is_string($title)) { $this->title->setTitle($title); } elseif (\is_string($title)) { @@ -200,6 +200,8 @@ class Tag implements \JsonSerializable, ArrayableInterface 'id' => $this->id, 'title' => $this->title, 'color' => $this->color, + 'type' => $this->type, + 'owner' => $this->owner, ]; } diff --git a/tests/Controller/ApiControllerTest.php b/tests/Controller/ApiControllerTest.php new file mode 100644 index 0000000..f21dff2 --- /dev/null +++ b/tests/Controller/ApiControllerTest.php @@ -0,0 +1,211 @@ +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->dbPool->get()); + $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'); + + $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('Tag'); + + TestUtils::setMember($this->module, 'app', $this->app); + } + + private static int $tagId = 0; + + /** + * @covers Modules\Tag\Controller\ApiController + * @group module + */ + public function testApiTagCreate() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->getHeader()->setAccount(1); + $request->setData('color', '#ff0000ff'); + $request->setData('title', 'ApiTagEN'); + $request->setData('language', ISO639x1Enum::_EN); + + $this->module->apiTagCreate($request, $response); + + self::assertEquals('ApiTagEN', $response->get('')['response']->getTitle()); + self::assertGreaterThan(0, $response->get('')['response']->getId()); + + self::$tagId = $response->get('')['response']->getId(); + } + + /** + * @covers Modules\Tag\Controller\ApiController + * @group module + */ + public function testApiTagCreateInvalid() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $this->module->apiTagCreate($request, $response); + + self::assertEquals(RequestStatusCode::R_400, $response->getHeader()->getStatusCode()); + } + + /** + * @covers Modules\Tag\Controller\ApiController + * @group module + */ + public function testApiTagL11nCreate() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->getHeader()->setAccount(1); + $request->setData('tag', self::$tagId); + $request->setData('title', 'ApiTagDE'); + $request->setData('language', ISO639x1Enum::_DE); + + $this->module->apiTagL11nCreate($request, $response); + + self::assertEquals('ApiTagDE', $response->get('')['response']->getTitle()); + self::assertGreaterThan(0, $response->get('')['response']->getId()); + } + + /** + * @covers Modules\Tag\Controller\ApiController + * @group module + */ + public function testApiTagL11nCreateInvalid() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $this->module->apiTagL11nCreate($request, $response); + + self::assertEquals(RequestStatusCode::R_400, $response->getHeader()->getStatusCode()); + } + + /** + * @covers Modules\Tag\Controller\ApiController + * @group module + */ + public function testApiTagGet() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->getHeader()->setAccount(1); + $request->setData('id', self::$tagId); + + $this->module->apiTagGet($request, $response); + + self::assertEquals(self::$tagId, $response->get('')['response']->getId()); + } + + /** + * @covers Modules\Tag\Controller\ApiController + * @group module + */ + public function testApiTagUpdate() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->getHeader()->setAccount(1); + $request->setData('id', self::$tagId); + $request->setData('color', '#00ff00ff'); + + $this->module->apiTagUpdate($request, $response); + + self::assertEquals('#00ff00ff', $response->get('')['response']->getColor()); + self::assertEquals(self::$tagId, $response->get('')['response']->getId()); + } + + /** + * @covers Modules\Tag\Controller\ApiController + * @group module + */ + public function testApiUnitFind() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->getHeader()->setAccount(1); + $request->setData('search', 'ApiTag'); + + $this->module->apiTagFind($request, $response); + + // @todo: I would actually expect ApiTagEN to be returned since the server language is english. + self::assertEquals('ApiTagDE', $response->get('')[0]->getTitle()); + self::assertEquals(self::$tagId, $response->get('')[0]->getId()); + } +} diff --git a/tests/Models/L11nTagTest.php b/tests/Models/L11nTagTest.php index 60d9e02..911e28c 100644 --- a/tests/Models/L11nTagTest.php +++ b/tests/Models/L11nTagTest.php @@ -22,35 +22,73 @@ use phpOMS\Localization\ISO639x1Enum; */ class L11nTagTest extends \PHPUnit\Framework\TestCase { + private L11nTag $l11n; + + public function setUp() : void + { + $this->l11n = new L11nTag(); + } + /** * @covers Modules\Tag\Models\L11nTag * @group module */ public function testDefault() : void { - $tag = new L11nTag(); + self::assertEquals(0, $this->l11n->getId()); + self::assertEquals(0, $this->l11n->getTag()); + self::assertEquals('', $this->l11n->getTitle()); + self::assertEquals(ISO639x1Enum::_EN, $this->l11n->getLanguage()); + } + + /** + * @covers Modules\Tag\Models\L11nTag + * @group module + */ + public function testTagInputOutput() : void + { + $this->l11n->setTag(2); + self::assertEquals(2, $this->l11n->getTag()); + } + + /** + * @covers Modules\Tag\Models\L11nTag + * @group module + */ + public function testLanguageInputOutput() : void + { + $this->l11n->setLanguage(ISO639x1Enum::_DE); + self::assertEquals(ISO639x1Enum::_DE, $this->l11n->getLanguage()); + } + + /** + * @covers Modules\Tag\Models\L11nTag + * @group module + */ + public function testTitleInputOutput() : void + { + $this->l11n->setTitle('Title'); + self::assertEquals('Title', $this->l11n->getTitle()); + } + + /** + * @covers Modules\Tag\Models\L11nTag + * @group module + */ + public function testSerialize() : void + { + $this->l11n->setTitle('Title'); + $this->l11n->setTag(2); + $this->l11n->setLanguage(ISO639x1Enum::_DE); - self::assertEquals(0, $tag->getId()); - self::assertEquals(0, $tag->getTag()); - self::assertEquals('', $tag->getTitle()); - self::assertEquals(ISO639x1Enum::_EN, $tag->getLanguage()); self::assertEquals( [ 'id' => 0, - 'title' => '', - 'tag' => 0, - 'language' => ISO639x1Enum::_EN, + 'title' => 'Title', + 'tag' => 2, + 'language' => ISO639x1Enum::_DE, ], - $tag->toArray() - ); - self::assertEquals( - [ - 'id' => 0, - 'title' => '', - 'tag' => 0, - 'language' => ISO639x1Enum::_EN, - ], - $tag->jsonSerialize() + $this->l11n->jsonSerialize() ); } } diff --git a/tests/Models/NullTagTest.php b/tests/Models/NullTagTest.php new file mode 100644 index 0000000..e6a3339 --- /dev/null +++ b/tests/Models/NullTagTest.php @@ -0,0 +1,42 @@ +getId()); + } +} diff --git a/tests/Models/TagTest.php b/tests/Models/TagTest.php index 478dddb..9ddb45c 100644 --- a/tests/Models/TagTest.php +++ b/tests/Models/TagTest.php @@ -15,6 +15,7 @@ declare(strict_types=1); namespace Modules\Tag\tests\Models; use Modules\Admin\Models\NullAccount; +use Modules\Tag\Models\L11nTag; use Modules\Tag\Models\Tag; use Modules\Tag\Models\TagType; @@ -23,35 +24,24 @@ use Modules\Tag\Models\TagType; */ class TagTest extends \PHPUnit\Framework\TestCase { + private Tag $tag; + + public function setUp() : void + { + $this->tag = new Tag(); + } + /** * @covers Modules\Tag\Models\Tag * @group module */ public function testDefault() : void { - $tag = new Tag(); - - self::assertEquals(0, $tag->getId()); - self::assertInstanceOf(NullAccount::class, $tag->getOwner()); - self::assertEquals(TagType::SINGLE, $tag->getType()); - self::assertEquals('00000000', $tag->getColor()); - self::assertEquals('', $tag->getTitle()); - self::assertEquals( - [ - 'id' => 0, - 'title' => '', - 'color' => '00000000', - ], - $tag->toArray() - ); - self::assertEquals( - [ - 'id' => 0, - 'title' => '', - 'color' => '00000000', - ], - $tag->jsonSerialize() - ); + self::assertEquals(0, $this->tag->getId()); + self::assertInstanceOf(NullAccount::class, $this->tag->getOwner()); + self::assertEquals(TagType::SINGLE, $this->tag->getType()); + self::assertEquals('00000000', $this->tag->getColor()); + self::assertEquals('', $this->tag->getTitle()); } /** @@ -60,10 +50,24 @@ class TagTest extends \PHPUnit\Framework\TestCase */ public function testTitleInputOutput() : void { - $tag = new Tag(); + $this->tag->setTitle('Test'); + self::assertEquals('Test', $this->tag->getTitle()); - $tag->setTitle('Test'); - self::assertEquals('Test', $tag->getTitle()); + $this->tag->setTitle(new L11nTag('Test2')); + self::assertEquals('Test2', $this->tag->getTitle()); + + $this->tag->setTitle('Test3'); + self::assertEquals('Test3', $this->tag->getTitle()); + } + + /** + * @covers Modules\Tag\Models\Tag + * @group module + */ + public function testOwnerInputOutput() : void + { + $this->tag->setOwner(new NullAccount(2)); + self::assertEquals(2, $this->tag->getOwner()->getId()); } /** @@ -72,10 +76,8 @@ class TagTest extends \PHPUnit\Framework\TestCase */ public function testColorInputOutput() : void { - $tag = new Tag(); - - $tag->setColor('ffffffff'); - self::assertEquals('ffffffff', $tag->getColor()); + $this->tag->setColor('ffffffff'); + self::assertEquals('ffffffff', $this->tag->getColor()); } /** @@ -84,9 +86,30 @@ class TagTest extends \PHPUnit\Framework\TestCase */ public function testTypeInputOutput() : void { - $tag = new Tag(); + $this->tag->setType(TagType::SHARED); + self::assertEquals(TagType::SHARED, $this->tag->getType()); + } - $tag->setType(TagType::SHARED); - self::assertEquals(TagType::SHARED, $tag->getType()); + /** + * @covers Modules\Tag\Models\Tag + * @group module + */ + public function testSerialize() : void + { + $this->tag->setTitle($t = new L11nTag('Test')); + $this->tag->setOwner($a = new NullAccount(2)); + $this->tag->setColor('ffffffff'); + $this->tag->setType(TagType::SHARED); + + self::assertEquals( + [ + 'id' => 0, + 'title' => $t, + 'color' => 'ffffffff', + 'type' => TagType::SHARED, + 'owner' => $a, + ], + $this->tag->jsonSerialize() + ); } }