From 968580e0fed97eced4b8ba3b702baac115637d62 Mon Sep 17 00:00:00 2001 From: Clemente Raposo Date: Fri, 20 Mar 2020 11:40:59 +0000 Subject: [PATCH] Add ModStrings API - Add ModStrings entity - Add ModStringsItemDataProvider with sample data - Add ModStrings Legacy handler - Add unit tests for legacy handler --- core/legacy/ModStringsHandler.php | 80 +++++++++++++++++++ .../ModStringsItemDataProvider.php | 59 ++++++++++++++ core/src/Entity/ModStrings.php | 76 ++++++++++++++++++ tests/unit/legacy/ModStringsHandlerTest.php | 69 ++++++++++++++++ 4 files changed, 284 insertions(+) create mode 100644 core/legacy/ModStringsHandler.php create mode 100644 core/src/DataProvider/ModStringsItemDataProvider.php create mode 100644 core/src/Entity/ModStrings.php create mode 100644 tests/unit/legacy/ModStringsHandlerTest.php diff --git a/core/legacy/ModStringsHandler.php b/core/legacy/ModStringsHandler.php new file mode 100644 index 000000000..6b2dd695c --- /dev/null +++ b/core/legacy/ModStringsHandler.php @@ -0,0 +1,80 @@ +moduleNameMapper = $moduleNameMapper; + } + + /** + * Get mod strings for given $language + * @param $language + * @return ModStrings|null + */ + public function getModStrings(string $language): ?ModStrings + { + $this->init(); + + if (empty($language)) { + return null; + } + + $enabledLanguages = get_languages(); + + if (empty($enabledLanguages) || !array_key_exists($language, $enabledLanguages)) { + throw new ItemNotFoundException(self::MSG_LANGUAGE_NOT_FOUND . "'$language'"); + } + + global $moduleList; + + $allModStringsArray = []; + foreach ($moduleList as $module) { + $frontendName = $this->moduleNameMapper->toFrontEnd($module); + $allModStringsArray[$frontendName] = return_module_language($language, $module); + } + + + if (empty($allModStringsArray)) { + throw new ItemNotFoundException(self::MSG_LANGUAGE_NOT_FOUND . "'$language'"); + } + + + $modStrings = new ModStrings(); + $modStrings->setId($language); + $modStrings->setItems($allModStringsArray); + + $this->close(); + + return $modStrings; + } +} \ No newline at end of file diff --git a/core/src/DataProvider/ModStringsItemDataProvider.php b/core/src/DataProvider/ModStringsItemDataProvider.php new file mode 100644 index 000000000..a6ee0a2b9 --- /dev/null +++ b/core/src/DataProvider/ModStringsItemDataProvider.php @@ -0,0 +1,59 @@ +modStringsHandler = $modStringsHandler; + } + + /** + * Defined supported resources + * @param string $resourceClass + * @param string|null $operationName + * @param array $context + * @return bool + */ + public function supports(string $resourceClass, string $operationName = null, array $context = []): bool + { + return ModStrings::class === $resourceClass; + } + + /** + * Get mod strings for given language id + * @param string $resourceClass + * @param array|int|string $id + * @param string|null $operationName + * @param array $context + * @return ModStrings|null + */ + public function getItem( + string $resourceClass, + $id, + string $operationName = null, + array $context = [] + ): ?ModStrings { + + return $this->modStringsHandler->getModStrings($id); + } +} \ No newline at end of file diff --git a/core/src/Entity/ModStrings.php b/core/src/Entity/ModStrings.php new file mode 100644 index 000000000..f750b4096 --- /dev/null +++ b/core/src/Entity/ModStrings.php @@ -0,0 +1,76 @@ +id; + } + + /** + * Set Id + * @param string|null $id + * @return ModStrings + */ + public function setId(?string $id): ModStrings + { + $this->id = $id; + + return $this; + } + + /** + * Get items + * @return array|null + */ + public function getItems(): ?array + { + return $this->items; + } + + /** + * Set Items + * @param array|null $items + * @return ModStrings + */ + public function setItems(?array $items): ModStrings + { + $this->items = $items; + + return $this; + } +} \ No newline at end of file diff --git a/tests/unit/legacy/ModStringsHandlerTest.php b/tests/unit/legacy/ModStringsHandlerTest.php new file mode 100644 index 000000000..70e80aaea --- /dev/null +++ b/tests/unit/legacy/ModStringsHandlerTest.php @@ -0,0 +1,69 @@ +handler = new ModStringsHandler($projectDir, $legacyDir, $legacySessionName, $defaultSessionName); + } + + // tests + + /** + * Test Invalid language handling in ModStringsHandler + */ + public function testInvalidLanguageCheck() + { + $this->expectException(ItemNotFoundException::class); + $this->handler->getModStrings('invalid_lang'); + } + + /** + * Test default language retrieval in ModStringsHandler + */ + public function testDefaultLanguageKey() + { + $modStrings = $this->handler->getModStrings('en_us'); + static::assertNotNull($modStrings); + static::assertEquals('en_us', $modStrings->getId()); + static::assertIsArray($modStrings->getItems()); + $this->assertLanguageKey('Home', 'LBL_MODULE_NAME', $modStrings); + $this->assertLanguageKey('Accounts', 'LNK_ACCOUNT_LIST', $modStrings); + $this->assertLanguageKey('Accounts', 'LNK_NEW_ACCOUNT', $modStrings); + } + + /** + * Asserts that the given label $key exists in Mod + * @param $module + * @param string $key + * @param ModStrings $modStrings + */ + protected function assertLanguageKey($module, $key, ModStrings $modStrings) + { + static::assertArrayHasKey($module, $modStrings->getItems()); + static::assertNotEmpty($modStrings->getItems()[$module]); + static::assertIsArray($modStrings->getItems()[$module]); + static::assertArrayHasKey($key, $modStrings->getItems()[$module]); + static::assertNotEmpty($modStrings->getItems()[$module][$key]); + } + +} \ No newline at end of file