From db7e26531db5654261b238979fae5986b932f3f4 Mon Sep 17 00:00:00 2001 From: ProklUng Date: Tue, 15 Jun 2021 16:21:01 +0300 Subject: [PATCH] =?UTF-8?q?`goTo`=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B0?= =?UTF-8?q?=20`BitrixableTestCase`.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- readme.MD | 22 ++++++++++++++++++- src/Base/BitrixableTestCase.php | 39 ++++++++++++++++++++++++++++++++- 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/readme.MD b/readme.MD index c75dd0f..25e68c8 100644 --- a/readme.MD +++ b/readme.MD @@ -208,7 +208,7 @@ public function useComponentInvoker() { } ``` -#### Тестирование работы адаптера шабалона (result_modifier) +#### Тестирование работы адаптера шаблона (result_modifier) Тестировать result_modifier шаблона компонента можно объектом класса ```Prokl\BitrixTestingTools\Invokers\ResultModifierInvoker```. @@ -267,3 +267,23 @@ public function handlersOfEventExist() { $this->getAssert()->asTrue($eventInvoker->countOfHandlers() > 1); } ``` + +#### Прочее + +- Метод `goTo` класса `BitrixableTestCase`. Эмулирует нахождение на каком-либо URL. Выставляет все, что связано с URL +в старом ядре и D7. + +Также подменяет автоматом все, что возможно из супер-глобалов типа $_SERVER, $_POST и т.д. + +```php + $_GET['test'] = 'OK'; + + $this->goTo('/test/'); + + $url = $APPLICATION->GetCurPage(); // $url = '/test/index.php' + + $request = Application::getInstance()->getContext()->getRequest(); + $uriString = $request->getRequestUri(); // $uriString = '/test/' + + $testGetParam = $request->getQuery('test'); // $testGetParam = 'OK' +``` diff --git a/src/Base/BitrixableTestCase.php b/src/Base/BitrixableTestCase.php index ef8e4a2..4666e4e 100644 --- a/src/Base/BitrixableTestCase.php +++ b/src/Base/BitrixableTestCase.php @@ -2,7 +2,7 @@ namespace Prokl\BitrixTestingTools\Base; -use Bitrix\Catalog\Model\Price; +use Bitrix\Main\Application; use Exception; use Prokl\BitrixTestingTools\Migrations\ArrilotMigratorProcessor; use Prokl\BitrixTestingTools\Migrator; @@ -13,6 +13,8 @@ use Prokl\BitrixTestingTools\Traits\SprintMigrationsTrait; use Prokl\BitrixTestingTools\Traits\UseMigrationsTrait; use Prokl\TestingTools\Base\BaseTestCase; +use ReflectionClass; +use ReflectionException; use Sheerockoff\BitrixCi\Bootstrap; /** @@ -100,6 +102,41 @@ protected function setupDatabaseData() : void putenv('MYSQL_PASSWORD='); } + /** + * Эмуляция нахождения на какой-либо странице. Выставляется все, что связано с URL - как в D7, + * так и в старом ядре. + * + * @param string $url URL. + * + * @return void + * + * @throws ReflectionException + * + * @since 15.06.2021 + */ + protected function goTo(string $url) : void + { + $_SERVER['REQUEST_URI'] = $url; + $GLOBALS['APPLICATION']->sDirPath = GetPagePath(false, true); + + $application = Application::getInstance(); + + $reflection = new ReflectionClass($application); + $reflection_property = $reflection->getProperty('isExtendedKernelInitialized'); + $reflection_property->setAccessible(true); + $reflection_property->setValue($application, false); + + $application->initializeExtendedKernel( + [ + 'server' => $_SERVER, + 'get' => $_GET, + 'post' => $_POST, + 'files' => $_FILES, + 'cookie' => $_COOKIE, + ] + ); + } + /** * Битриксовые штучки-дрючки с буфером. *