From 71770cb6b5be9e74d53486aa630534f2571d1ef0 Mon Sep 17 00:00:00 2001 From: Soumya Unnikrishnan Date: Fri, 31 Jul 2020 17:19:46 -0500 Subject: [PATCH 1/3] MQE-2212: Fix invalid behaviour of MAGENTO_BACKEND_BASE_URL --- .../Resources/PageReplacementTest.txt | 4 +- .../DataTransport/AdminFormExecutor.php | 21 +++- .../DataTransport/Auth/Tfa.php | 4 +- .../DataTransport/Auth/WebApiAuth.php | 6 +- .../DataTransport/FrontendFormExecutor.php | 8 +- .../DataTransport/WebApiExecutor.php | 4 +- .../Module/MagentoWebDriver.php | 2 +- .../Module/MagentoWebDriverDoctor.php | 8 +- .../UrlProvider.php} | 104 +++++++----------- .../Test/Objects/ActionObject.php | 9 +- .../Util/TestGenerator.php | 35 ++++-- 11 files changed, 106 insertions(+), 99 deletions(-) rename src/Magento/FunctionalTestingFramework/{Util/MftfGlobals.php => Provider/UrlProvider.php} (57%) diff --git a/dev/tests/verification/Resources/PageReplacementTest.txt b/dev/tests/verification/Resources/PageReplacementTest.txt index cda119999..6f75ee096 100644 --- a/dev/tests/verification/Resources/PageReplacementTest.txt +++ b/dev/tests/verification/Resources/PageReplacementTest.txt @@ -35,8 +35,8 @@ class PageReplacementTestCest $I->amOnPage("/John/StringLiteral2.html"); // stepKey: twoParamPageStringData $I->amOnPage("/John/" . $I->retrieveEntityField('datakey', 'firstname', 'test') . ".html"); // stepKey: twoParamPageDataPersist $I->amOnPage("/" . $I->retrieveEntityField('datakey', 'firstname', 'test') . "/StringLiteral2.html"); // stepKey: twoParamPagePersistString - $I->amOnPage("/" . getenv("MAGENTO_BACKEND_NAME") . "/backend"); // stepKey: onAdminPage - $I->amOnPage("/" . getenv("MAGENTO_BACKEND_NAME") . "/StringLiteral/page.html"); // stepKey: oneParamAdminPageString + $I->amOnPage((getenv("MAGENTO_BACKEND_BASE_URL") ? rtrim(getenv("MAGENTO_BACKEND_BASE_URL"), "/") : "") . "/" . getenv("MAGENTO_BACKEND_NAME") . "/backend"); // stepKey: onAdminPage + $I->amOnPage((getenv("MAGENTO_BACKEND_BASE_URL") ? rtrim(getenv("MAGENTO_BACKEND_BASE_URL"), "/") : "") . "/" . getenv("MAGENTO_BACKEND_NAME") . "/StringLiteral/page.html"); // stepKey: oneParamAdminPageString $I->amOnUrl("http://myFullUrl.com/"); // stepKey: onExternalPage } } diff --git a/src/Magento/FunctionalTestingFramework/DataTransport/AdminFormExecutor.php b/src/Magento/FunctionalTestingFramework/DataTransport/AdminFormExecutor.php index 5639ee8d7..0d0ce231d 100644 --- a/src/Magento/FunctionalTestingFramework/DataTransport/AdminFormExecutor.php +++ b/src/Magento/FunctionalTestingFramework/DataTransport/AdminFormExecutor.php @@ -6,12 +6,13 @@ namespace Magento\FunctionalTestingFramework\DataTransport; -use Magento\FunctionalTestingFramework\Util\MftfGlobals; +use Magento\FunctionalTestingFramework\Page\Objects\PageObject; use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlInterface; use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlTransport; use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; use Magento\FunctionalTestingFramework\DataTransport\Auth\Tfa\OTP; use Magento\FunctionalTestingFramework\DataTransport\Auth\Tfa; +use Magento\FunctionalTestingFramework\Provider\UrlProvider; /** * Curl executor for requests to Admin. @@ -59,6 +60,16 @@ public function __construct($removeBackend) $this->authorize(); } + /** + * Returns base URL for Magento backend instance + * @return string + * @throws TestFrameworkException + */ + public function getBaseUrl(): string + { + return UrlProvider::getBaseUrl(PageObject::ADMIN_AREA); + } + /** * Authorize admin on backend. * @@ -68,11 +79,11 @@ public function __construct($removeBackend) private function authorize() { // Perform GET to backend url so form_key is set - $this->transport->write(MftfGlobals::getBackendBaseUrl(), [], CurlInterface::GET); + $this->transport->write($this->getBaseUrl(), [], CurlInterface::GET); $this->read(); // Authenticate admin user - $authUrl = MftfGlobals::getBackendBaseUrl() . 'admin/auth/login/'; + $authUrl = $this->getBaseUrl() . 'admin/auth/login/'; $data = [ 'login[username]' => getenv('MAGENTO_ADMIN_USERNAME'), 'login[password]' => getenv('MAGENTO_ADMIN_PASSWORD'), @@ -87,7 +98,7 @@ private function authorize() // Get OTP if (Tfa::isEnabled()) { - $authUrl = MftfGlobals::getBackendBaseUrl() . Tfa::getProviderAdminFormEndpoint('google'); + $authUrl = $this->getBaseUrl() . Tfa::getProviderAdminFormEndpoint('google'); $data = [ 'tfa_code' => OTP::getOTP(), 'form_key' => $this->formKey, @@ -127,7 +138,7 @@ private function setFormKey() public function write($url, $data = [], $method = CurlInterface::POST, $headers = []) { $url = ltrim($url, "/"); - $apiUrl = MftfGlobals::getBackendBaseUrl() . $url; + $apiUrl = $this->getBaseUrl() . $url; if ($this->removeBackend) { //TODO diff --git a/src/Magento/FunctionalTestingFramework/DataTransport/Auth/Tfa.php b/src/Magento/FunctionalTestingFramework/DataTransport/Auth/Tfa.php index 04f1971b7..91643ba21 100644 --- a/src/Magento/FunctionalTestingFramework/DataTransport/Auth/Tfa.php +++ b/src/Magento/FunctionalTestingFramework/DataTransport/Auth/Tfa.php @@ -6,10 +6,10 @@ namespace Magento\FunctionalTestingFramework\DataTransport\Auth; -use Magento\FunctionalTestingFramework\Util\MftfGlobals; use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlInterface; use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlTransport; use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; +use Magento\FunctionalTestingFramework\Provider\UrlProvider; /** * Class Tfa (i.e. 2FA) @@ -66,7 +66,7 @@ public static function isEnabled() return self::$tfaEnabled; } - $schemaUrl = MftfGlobals::getWebApiBaseUrl() . self::TFA_SCHEMA; + $schemaUrl = UrlProvider::getWebApiBaseUrl() . self::TFA_SCHEMA; $transport = new CurlTransport(); try { $transport->write($schemaUrl, [], CurlInterface::GET, self::$headers); diff --git a/src/Magento/FunctionalTestingFramework/DataTransport/Auth/WebApiAuth.php b/src/Magento/FunctionalTestingFramework/DataTransport/Auth/WebApiAuth.php index 566d2b348..07b2dc7da 100644 --- a/src/Magento/FunctionalTestingFramework/DataTransport/Auth/WebApiAuth.php +++ b/src/Magento/FunctionalTestingFramework/DataTransport/Auth/WebApiAuth.php @@ -6,11 +6,11 @@ namespace Magento\FunctionalTestingFramework\DataTransport\Auth; -use Magento\FunctionalTestingFramework\Util\MftfGlobals; use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlInterface; use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlTransport; use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; use Magento\FunctionalTestingFramework\DataTransport\Auth\Tfa\OTP; +use Magento\FunctionalTestingFramework\Provider\UrlProvider; /** * Class WebApiAuth @@ -63,7 +63,7 @@ public static function getAdminToken($username = null, $password = null) return self::$adminAuthTokens[$login]; } - $authUrl = MftfGlobals::getWebApiBaseUrl() . self::PATH_ADMIN_AUTH; + $authUrl = UrlProvider::getWebApiBaseUrl() . self::PATH_ADMIN_AUTH; $data = [ 'username' => $login, @@ -71,7 +71,7 @@ public static function getAdminToken($username = null, $password = null) ]; if (Tfa::isEnabled()) { - $authUrl = MftfGlobals::getWebApiBaseUrl() . Tfa::getProviderWebApiAuthEndpoint('google'); + $authUrl = UrlProvider::getWebApiBaseUrl() . Tfa::getProviderWebApiAuthEndpoint('google'); $data['otp'] = OTP::getOTP(); } diff --git a/src/Magento/FunctionalTestingFramework/DataTransport/FrontendFormExecutor.php b/src/Magento/FunctionalTestingFramework/DataTransport/FrontendFormExecutor.php index 0cf69ec94..c89531793 100644 --- a/src/Magento/FunctionalTestingFramework/DataTransport/FrontendFormExecutor.php +++ b/src/Magento/FunctionalTestingFramework/DataTransport/FrontendFormExecutor.php @@ -6,7 +6,7 @@ namespace Magento\FunctionalTestingFramework\DataTransport; -use Magento\FunctionalTestingFramework\Util\MftfGlobals; +use Magento\FunctionalTestingFramework\Provider\UrlProvider; use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlInterface; use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlTransport; use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; @@ -82,11 +82,11 @@ public function __construct($customerEmail, $customerPassWord) */ private function authorize() { - $url = MftfGlobals::getBaseUrl() . 'customer/account/login/'; + $url = UrlProvider::getBaseUrl() . 'customer/account/login/'; $this->transport->write($url, [], CurlInterface::GET); $this->read(); - $url = MftfGlobals::getBaseUrl() . 'customer/account/loginPost/'; + $url = UrlProvider::getBaseUrl() . 'customer/account/loginPost/'; $data = [ 'login[username]' => $this->customerEmail, 'login[password]' => $this->customerPassword, @@ -144,7 +144,7 @@ public function write($url, $data = [], $method = CurlInterface::POST, $headers if (isset($data['customer_password'])) { unset($data['customer_password']); } - $apiUrl = MftfGlobals::getBaseUrl() . $url; + $apiUrl = UrlProvider::getBaseUrl() . $url; if ($this->formKey) { $data['form_key'] = $this->formKey; } else { diff --git a/src/Magento/FunctionalTestingFramework/DataTransport/WebApiExecutor.php b/src/Magento/FunctionalTestingFramework/DataTransport/WebApiExecutor.php index 4c6682438..e8e82829c 100644 --- a/src/Magento/FunctionalTestingFramework/DataTransport/WebApiExecutor.php +++ b/src/Magento/FunctionalTestingFramework/DataTransport/WebApiExecutor.php @@ -7,10 +7,10 @@ namespace Magento\FunctionalTestingFramework\DataTransport; use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; -use Magento\FunctionalTestingFramework\Util\MftfGlobals; use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlInterface; use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlTransport; use Magento\FunctionalTestingFramework\DataTransport\Auth\WebApiAuth; +use Magento\FunctionalTestingFramework\Provider\UrlProvider; /** * Curl executor for Magento Web Api requests. @@ -133,7 +133,7 @@ public function close() */ protected function getFormattedUrl($resource) { - $urlResult = MftfGlobals::getWebApiBaseUrl(); + $urlResult = UrlProvider::getWebApiBaseUrl(); if ($this->storeCode != null) { $urlResult .= $this->storeCode . '/'; } diff --git a/src/Magento/FunctionalTestingFramework/Module/MagentoWebDriver.php b/src/Magento/FunctionalTestingFramework/Module/MagentoWebDriver.php index 944735677..4a118b017 100644 --- a/src/Magento/FunctionalTestingFramework/Module/MagentoWebDriver.php +++ b/src/Magento/FunctionalTestingFramework/Module/MagentoWebDriver.php @@ -866,7 +866,7 @@ public function saveScreenshot() */ public function amOnPage($page) { - parent::amOnPage($page); + (0 === strpos($page, 'http')) ? parent::amOnUrl($page) : parent::amOnPage($page); $this->waitForPageLoad(); } diff --git a/src/Magento/FunctionalTestingFramework/Module/MagentoWebDriverDoctor.php b/src/Magento/FunctionalTestingFramework/Module/MagentoWebDriverDoctor.php index 1407c957b..27ad1b32a 100644 --- a/src/Magento/FunctionalTestingFramework/Module/MagentoWebDriverDoctor.php +++ b/src/Magento/FunctionalTestingFramework/Module/MagentoWebDriverDoctor.php @@ -8,6 +8,8 @@ use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; use Facebook\WebDriver\Remote\RemoteWebDriver; +use Magento\FunctionalTestingFramework\Page\Objects\PageObject; +use Magento\FunctionalTestingFramework\Provider\UrlProvider; /** * MagentoWebDriverDoctor module extends MagentoWebDriver module and is a light weighted module to diagnose webdriver @@ -47,16 +49,14 @@ public function _initialize() } try { - $adminUrl = rtrim(getenv('MAGENTO_BACKEND_BASE_URL'), '/') - ?: rtrim(getenv('MAGENTO_BASE_URL'), '/') - . '/' . getenv('MAGENTO_BACKEND_NAME') . '/admin'; + $adminUrl = UrlProvider::getBaseUrl(PageObject::ADMIN_AREA); $this->loadPageAtUrl($adminUrl); } catch (\Exception $e) { $context[self::EXCEPTION_CONTEXT_ADMIN] = $e->getMessage(); } try { - $storeUrl = getenv('MAGENTO_BASE_URL'); + $storeUrl = UrlProvider::getBaseUrl(); $this->loadPageAtUrl($storeUrl); } catch (\Exception $e) { $context[self::EXCEPTION_CONTEXT_STOREFRONT] = $e->getMessage(); diff --git a/src/Magento/FunctionalTestingFramework/Util/MftfGlobals.php b/src/Magento/FunctionalTestingFramework/Provider/UrlProvider.php similarity index 57% rename from src/Magento/FunctionalTestingFramework/Util/MftfGlobals.php rename to src/Magento/FunctionalTestingFramework/Provider/UrlProvider.php index d59df5c11..d3cefa9ab 100644 --- a/src/Magento/FunctionalTestingFramework/Util/MftfGlobals.php +++ b/src/Magento/FunctionalTestingFramework/Provider/UrlProvider.php @@ -4,30 +4,17 @@ * See COPYING.txt for license details. */ -namespace Magento\FunctionalTestingFramework\Util; +namespace Magento\FunctionalTestingFramework\Provider; use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; +use Magento\FunctionalTestingFramework\Page\Objects\PageObject; use Magento\FunctionalTestingFramework\Util\Path\UrlFormatter; /** - * MFTF Globals + * Provider responsible for returning right URLs for provided scope. */ -class MftfGlobals +class UrlProvider { - /** - * Magento Base URL - * - * @var string null - */ - private static $baseUrl = null; - - /** - * Magento Backend Base URL - * - * @var string null - */ - private static $backendBaseUrl = null; - /** * Magento Web API Base URL * @@ -36,76 +23,61 @@ class MftfGlobals private static $webApiBaseUrl = null; /** - * Returns Magento Base URL + * Returns proper Base URL for specified Area. * - * @param boolean $withTrailingSeparator + * @param string|null $customArea + * @param boolean $withTrailingSeparator * @return string * @throws TestFrameworkException */ - public static function getBaseUrl($withTrailingSeparator = true) + public static function getBaseUrl($customArea = null, $withTrailingSeparator = true) { - if (!self::$baseUrl) { - try { - $url = getenv('MAGENTO_BASE_URL'); - if ($url) { - self::$baseUrl = UrlFormatter::format($url, false); - } - } catch (TestFrameworkException $e) { - } - } - if (self::$baseUrl) { - return UrlFormatter::format(self::$baseUrl, $withTrailingSeparator); + try { + $baseUrl = getenv('MAGENTO_BASE_URL'); + + switch ($customArea) { + case PageObject::ADMIN_AREA: + $backendName = getenv('MAGENTO_BACKEND_NAME'); + $baseUrl = self::getBackendBaseUrl() ?: $baseUrl; + + return UrlFormatter::format( + UrlFormatter::format($baseUrl) . $backendName, + $withTrailingSeparator + ); + } + return UrlFormatter::format($baseUrl, $withTrailingSeparator); + } catch (TestFrameworkException $e) { } throw new TestFrameworkException( - 'Unable to retrieve Magento Base URL. Please check .env and set:' + 'Unable to retrieve Magento Base URL. Please check .env and set either:' . PHP_EOL - . '"MAGENTO_BASE_URL"' + . '"MAGENTO_BASE_URL" and "MAGENTO_BACKEND_NAME"' + . PHP_EOL + . 'or' + . PHP_EOL + . '"MAGENTO_BACKEND_BASE_URL"' ); } /** - * Return Magento Backend Base URL + * Returns MAGENTO_BACKEND_BASE_URL if set or null * * @param boolean $withTrailingSeparator - * @return string + * @return string|null * @throws TestFrameworkException */ public static function getBackendBaseUrl($withTrailingSeparator = true) { - if (!self::$backendBaseUrl) { - try { - $bUrl = getenv('MAGENTO_BACKEND_BASE_URL'); - if ($bUrl) { - self::$backendBaseUrl = UrlFormatter::format($bUrl, false); - } else { - $baseUrl = getenv('MAGENTO_BASE_URL'); - $backendName = getenv('MAGENTO_BACKEND_NAME'); - if ($baseUrl && $backendName) { - self::$backendBaseUrl = UrlFormatter::format( - UrlFormatter::format($baseUrl) . $backendName, - false - ); - } - } - } catch (TestFrameworkException $e) { - } - } + $bUrl = getenv('MAGENTO_BACKEND_BASE_URL'); - if (self::$backendBaseUrl) { - return UrlFormatter::format(self::$backendBaseUrl, $withTrailingSeparator); - } + $backendBaseUrl = $bUrl ?: null; - throw new TestFrameworkException( - 'Unable to retrieve Magento Backend Base URL. Please check .env and set either:' - . PHP_EOL - . '"MAGENTO_BASE_URL" and "MAGENTO_BACKEND_NAME"' - . PHP_EOL - . 'or' - . PHP_EOL - . '"MAGENTO_BACKEND_BASE_URL"' - ); + if ($backendBaseUrl) { + $backendBaseUrl = UrlFormatter::format($backendBaseUrl, $withTrailingSeparator); + } + return $backendBaseUrl; } /** @@ -133,7 +105,7 @@ public static function getWebApiBaseUrl($withTrailingSeparator = true) } if (!isset($baseUrl)) { - $baseUrl = MftfGlobals::getBaseUrl(false); + $baseUrl = self::getBaseUrl(); } if ($webapiPort) { diff --git a/src/Magento/FunctionalTestingFramework/Test/Objects/ActionObject.php b/src/Magento/FunctionalTestingFramework/Test/Objects/ActionObject.php index 648471c7a..f3ea9e511 100644 --- a/src/Magento/FunctionalTestingFramework/Test/Objects/ActionObject.php +++ b/src/Magento/FunctionalTestingFramework/Test/Objects/ActionObject.php @@ -725,8 +725,13 @@ private function resolveParameterization($isParameterized, $replacement, $match, } else { $resolvedReplacement = $replacement; } - if (get_class($object) == PageObject::class && $object->getArea() == PageObject::ADMIN_AREA) { - $resolvedReplacement = "/{{_ENV.MAGENTO_BACKEND_NAME}}/" . $resolvedReplacement; + if (get_class($object) === PageObject::class && $object->getArea() === PageObject::ADMIN_AREA) { + $urlSegments = [ + '{{_ENV.MAGENTO_BACKEND_BASE_URL}}', + '{{_ENV.MAGENTO_BACKEND_NAME}}', + $resolvedReplacement + ]; + $resolvedReplacement = implode('/', $urlSegments); } return $resolvedReplacement; } diff --git a/src/Magento/FunctionalTestingFramework/Util/TestGenerator.php b/src/Magento/FunctionalTestingFramework/Util/TestGenerator.php index 80056b3b9..b0f7edb8c 100644 --- a/src/Magento/FunctionalTestingFramework/Util/TestGenerator.php +++ b/src/Magento/FunctionalTestingFramework/Util/TestGenerator.php @@ -2030,20 +2030,23 @@ private function resolveRuntimeReference($args, $regex, $func) $newArgs = []; foreach ($args as $key => $arg) { + $newArgs[$key] = $arg; + preg_match_all($regex, $arg, $matches); if (!empty($matches[0])) { - $fullMatch = $matches[0][0]; - $refVariable = $matches[1][0]; - unset($matches); - $replacement = "{$func}(\"{$refVariable}\")"; + foreach ($matches[0] as $matchKey => $fullMatch) { + $refVariable = $matches[1][$matchKey]; + + $replacement = $this->getReplacement($func, $refVariable); + + $outputArg = $this->processQuoteBreaks($fullMatch, $newArgs[$key], $replacement); + $newArgs[$key] = $outputArg; + } - $outputArg = $this->processQuoteBreaks($fullMatch, $arg, $replacement); - $newArgs[$key] = $outputArg; + unset($matches); continue; } - $newArgs[$key] = $arg; } - // override passed in args for use later. return $newArgs; } @@ -2313,4 +2316,20 @@ private function parseUserInput($userInput) return $this->addUniquenessFunctionCall($userInput); } + + /** + * Supports fallback for BACKEND URL + * + * @param string $func + * @param string $refVariable + * @return string + */ + private function getReplacement($func, $refVariable): string + { + if ($refVariable === 'MAGENTO_BACKEND_BASE_URL') { + return "({$func}(\"{$refVariable}\") ? rtrim({$func}(\"{$refVariable}\"), \"/\") : \"\")"; + } + + return "{$func}(\"{$refVariable}\")"; + } } From 1fa50cf63fed3548943ddff0a96c3ddf736ed092 Mon Sep 17 00:00:00 2001 From: Soumya Unnikrishnan Date: Fri, 7 Aug 2020 15:18:32 -0500 Subject: [PATCH 2/3] MQE-2212: Fix invalid behaviour MAGENTO_BACKEND_BASE_URL --- .../DataTransport/AdminFormExecutor.php | 17 ++++++++++++----- .../DataTransport/Auth/Tfa.php | 2 +- .../DataTransport/Auth/WebApiAuth.php | 2 +- .../DataTransport/FrontendFormExecutor.php | 16 ++++++++++++---- .../DataTransport/WebApiExecutor.php | 2 +- .../Module/MagentoWebDriverDoctor.php | 2 +- .../{ => Util}/Provider/UrlProvider.php | 5 ++--- 7 files changed, 30 insertions(+), 16 deletions(-) rename src/Magento/FunctionalTestingFramework/{ => Util}/Provider/UrlProvider.php (96%) diff --git a/src/Magento/FunctionalTestingFramework/DataTransport/AdminFormExecutor.php b/src/Magento/FunctionalTestingFramework/DataTransport/AdminFormExecutor.php index 0d0ce231d..ef68e2cba 100644 --- a/src/Magento/FunctionalTestingFramework/DataTransport/AdminFormExecutor.php +++ b/src/Magento/FunctionalTestingFramework/DataTransport/AdminFormExecutor.php @@ -12,7 +12,7 @@ use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; use Magento\FunctionalTestingFramework\DataTransport\Auth\Tfa\OTP; use Magento\FunctionalTestingFramework\DataTransport\Auth\Tfa; -use Magento\FunctionalTestingFramework\Provider\UrlProvider; +use Magento\FunctionalTestingFramework\Util\Provider\UrlProvider; /** * Curl executor for requests to Admin. @@ -46,6 +46,12 @@ class AdminFormExecutor implements CurlInterface */ private $removeBackend; + /** + * Base url. + * @var string + */ + private $baseUrl; + /** * Constructor. * @param boolean $removeBackend @@ -55,6 +61,7 @@ class AdminFormExecutor implements CurlInterface */ public function __construct($removeBackend) { + $this->baseUrl = $this->getBaseUrl(); $this->removeBackend = $removeBackend; $this->transport = new CurlTransport(); $this->authorize(); @@ -79,11 +86,11 @@ public function getBaseUrl(): string private function authorize() { // Perform GET to backend url so form_key is set - $this->transport->write($this->getBaseUrl(), [], CurlInterface::GET); + $this->transport->write($this->baseUrl, [], CurlInterface::GET); $this->read(); // Authenticate admin user - $authUrl = $this->getBaseUrl() . 'admin/auth/login/'; + $authUrl = $this->baseUrl . 'admin/auth/login/'; $data = [ 'login[username]' => getenv('MAGENTO_ADMIN_USERNAME'), 'login[password]' => getenv('MAGENTO_ADMIN_PASSWORD'), @@ -98,7 +105,7 @@ private function authorize() // Get OTP if (Tfa::isEnabled()) { - $authUrl = $this->getBaseUrl() . Tfa::getProviderAdminFormEndpoint('google'); + $authUrl = $this->baseUrl . Tfa::getProviderAdminFormEndpoint('google'); $data = [ 'tfa_code' => OTP::getOTP(), 'form_key' => $this->formKey, @@ -138,7 +145,7 @@ private function setFormKey() public function write($url, $data = [], $method = CurlInterface::POST, $headers = []) { $url = ltrim($url, "/"); - $apiUrl = $this->getBaseUrl() . $url; + $apiUrl = $this->baseUrl . $url; if ($this->removeBackend) { //TODO diff --git a/src/Magento/FunctionalTestingFramework/DataTransport/Auth/Tfa.php b/src/Magento/FunctionalTestingFramework/DataTransport/Auth/Tfa.php index 91643ba21..3525b663e 100644 --- a/src/Magento/FunctionalTestingFramework/DataTransport/Auth/Tfa.php +++ b/src/Magento/FunctionalTestingFramework/DataTransport/Auth/Tfa.php @@ -9,7 +9,7 @@ use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlInterface; use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlTransport; use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; -use Magento\FunctionalTestingFramework\Provider\UrlProvider; +use Magento\FunctionalTestingFramework\Util\Provider\UrlProvider; /** * Class Tfa (i.e. 2FA) diff --git a/src/Magento/FunctionalTestingFramework/DataTransport/Auth/WebApiAuth.php b/src/Magento/FunctionalTestingFramework/DataTransport/Auth/WebApiAuth.php index 07b2dc7da..e8bd23161 100644 --- a/src/Magento/FunctionalTestingFramework/DataTransport/Auth/WebApiAuth.php +++ b/src/Magento/FunctionalTestingFramework/DataTransport/Auth/WebApiAuth.php @@ -10,7 +10,7 @@ use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlTransport; use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; use Magento\FunctionalTestingFramework\DataTransport\Auth\Tfa\OTP; -use Magento\FunctionalTestingFramework\Provider\UrlProvider; +use Magento\FunctionalTestingFramework\Util\Provider\UrlProvider; /** * Class WebApiAuth diff --git a/src/Magento/FunctionalTestingFramework/DataTransport/FrontendFormExecutor.php b/src/Magento/FunctionalTestingFramework/DataTransport/FrontendFormExecutor.php index c89531793..a96d6dafa 100644 --- a/src/Magento/FunctionalTestingFramework/DataTransport/FrontendFormExecutor.php +++ b/src/Magento/FunctionalTestingFramework/DataTransport/FrontendFormExecutor.php @@ -6,7 +6,7 @@ namespace Magento\FunctionalTestingFramework\DataTransport; -use Magento\FunctionalTestingFramework\Provider\UrlProvider; +use Magento\FunctionalTestingFramework\Util\Provider\UrlProvider; use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlInterface; use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlTransport; use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; @@ -58,6 +58,13 @@ class FrontendFormExecutor implements CurlInterface */ private $customerPassword; + /** + * Base url + * + * @var string + */ + private $baseUrl; + /** * FrontendFormExecutor constructor. * @@ -68,6 +75,7 @@ class FrontendFormExecutor implements CurlInterface */ public function __construct($customerEmail, $customerPassWord) { + $this->baseUrl = UrlProvider::getBaseUrl(); $this->transport = new CurlTransport(); $this->customerEmail = $customerEmail; $this->customerPassword = $customerPassWord; @@ -82,11 +90,11 @@ public function __construct($customerEmail, $customerPassWord) */ private function authorize() { - $url = UrlProvider::getBaseUrl() . 'customer/account/login/'; + $url = $this->baseUrl . 'customer/account/login/'; $this->transport->write($url, [], CurlInterface::GET); $this->read(); - $url = UrlProvider::getBaseUrl() . 'customer/account/loginPost/'; + $url = $this->baseUrl . 'customer/account/loginPost/'; $data = [ 'login[username]' => $this->customerEmail, 'login[password]' => $this->customerPassword, @@ -144,7 +152,7 @@ public function write($url, $data = [], $method = CurlInterface::POST, $headers if (isset($data['customer_password'])) { unset($data['customer_password']); } - $apiUrl = UrlProvider::getBaseUrl() . $url; + $apiUrl = $this->baseUrl . $url; if ($this->formKey) { $data['form_key'] = $this->formKey; } else { diff --git a/src/Magento/FunctionalTestingFramework/DataTransport/WebApiExecutor.php b/src/Magento/FunctionalTestingFramework/DataTransport/WebApiExecutor.php index e8e82829c..92d236520 100644 --- a/src/Magento/FunctionalTestingFramework/DataTransport/WebApiExecutor.php +++ b/src/Magento/FunctionalTestingFramework/DataTransport/WebApiExecutor.php @@ -10,7 +10,7 @@ use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlInterface; use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlTransport; use Magento\FunctionalTestingFramework\DataTransport\Auth\WebApiAuth; -use Magento\FunctionalTestingFramework\Provider\UrlProvider; +use Magento\FunctionalTestingFramework\Util\Provider\UrlProvider; /** * Curl executor for Magento Web Api requests. diff --git a/src/Magento/FunctionalTestingFramework/Module/MagentoWebDriverDoctor.php b/src/Magento/FunctionalTestingFramework/Module/MagentoWebDriverDoctor.php index 27ad1b32a..573f1e411 100644 --- a/src/Magento/FunctionalTestingFramework/Module/MagentoWebDriverDoctor.php +++ b/src/Magento/FunctionalTestingFramework/Module/MagentoWebDriverDoctor.php @@ -9,7 +9,7 @@ use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; use Facebook\WebDriver\Remote\RemoteWebDriver; use Magento\FunctionalTestingFramework\Page\Objects\PageObject; -use Magento\FunctionalTestingFramework\Provider\UrlProvider; +use Magento\FunctionalTestingFramework\Util\Provider\UrlProvider; /** * MagentoWebDriverDoctor module extends MagentoWebDriver module and is a light weighted module to diagnose webdriver diff --git a/src/Magento/FunctionalTestingFramework/Provider/UrlProvider.php b/src/Magento/FunctionalTestingFramework/Util/Provider/UrlProvider.php similarity index 96% rename from src/Magento/FunctionalTestingFramework/Provider/UrlProvider.php rename to src/Magento/FunctionalTestingFramework/Util/Provider/UrlProvider.php index d3cefa9ab..acfef7397 100644 --- a/src/Magento/FunctionalTestingFramework/Provider/UrlProvider.php +++ b/src/Magento/FunctionalTestingFramework/Util/Provider/UrlProvider.php @@ -4,7 +4,7 @@ * See COPYING.txt for license details. */ -namespace Magento\FunctionalTestingFramework\Provider; +namespace Magento\FunctionalTestingFramework\Util\Provider; use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; use Magento\FunctionalTestingFramework\Page\Objects\PageObject; @@ -32,7 +32,6 @@ class UrlProvider */ public static function getBaseUrl($customArea = null, $withTrailingSeparator = true) { - try { $baseUrl = getenv('MAGENTO_BASE_URL'); @@ -68,7 +67,7 @@ public static function getBaseUrl($customArea = null, $withTrailingSeparator = t * @return string|null * @throws TestFrameworkException */ - public static function getBackendBaseUrl($withTrailingSeparator = true) + private static function getBackendBaseUrl($withTrailingSeparator = true) { $bUrl = getenv('MAGENTO_BACKEND_BASE_URL'); From 044341a6aec8b049cdc60685f4f954b570709124 Mon Sep 17 00:00:00 2001 From: Soumya Unnikrishnan Date: Mon, 10 Aug 2020 22:41:00 -0500 Subject: [PATCH 3/3] MQE-2212: Fix invalid behaviour MAGENTO_BACKEND_BASE_URL --- .../DataTransport/AdminFormExecutor.php | 28 +---- .../DataTransport/Auth/Tfa.php | 4 +- .../DataTransport/Auth/WebApiAuth.php | 6 +- .../DataTransport/FrontendFormExecutor.php | 16 +-- .../DataTransport/WebApiExecutor.php | 4 +- .../Module/MagentoWebDriverDoctor.php | 8 +- .../Test/Objects/ActionObject.php | 2 +- .../UrlProvider.php => MftfGlobals.php} | 108 ++++++++++++------ .../Util/TestGenerator.php | 3 +- 9 files changed, 92 insertions(+), 87 deletions(-) rename src/Magento/FunctionalTestingFramework/Util/{Provider/UrlProvider.php => MftfGlobals.php} (53%) diff --git a/src/Magento/FunctionalTestingFramework/DataTransport/AdminFormExecutor.php b/src/Magento/FunctionalTestingFramework/DataTransport/AdminFormExecutor.php index ef68e2cba..5639ee8d7 100644 --- a/src/Magento/FunctionalTestingFramework/DataTransport/AdminFormExecutor.php +++ b/src/Magento/FunctionalTestingFramework/DataTransport/AdminFormExecutor.php @@ -6,13 +6,12 @@ namespace Magento\FunctionalTestingFramework\DataTransport; -use Magento\FunctionalTestingFramework\Page\Objects\PageObject; +use Magento\FunctionalTestingFramework\Util\MftfGlobals; use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlInterface; use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlTransport; use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; use Magento\FunctionalTestingFramework\DataTransport\Auth\Tfa\OTP; use Magento\FunctionalTestingFramework\DataTransport\Auth\Tfa; -use Magento\FunctionalTestingFramework\Util\Provider\UrlProvider; /** * Curl executor for requests to Admin. @@ -46,12 +45,6 @@ class AdminFormExecutor implements CurlInterface */ private $removeBackend; - /** - * Base url. - * @var string - */ - private $baseUrl; - /** * Constructor. * @param boolean $removeBackend @@ -61,22 +54,11 @@ class AdminFormExecutor implements CurlInterface */ public function __construct($removeBackend) { - $this->baseUrl = $this->getBaseUrl(); $this->removeBackend = $removeBackend; $this->transport = new CurlTransport(); $this->authorize(); } - /** - * Returns base URL for Magento backend instance - * @return string - * @throws TestFrameworkException - */ - public function getBaseUrl(): string - { - return UrlProvider::getBaseUrl(PageObject::ADMIN_AREA); - } - /** * Authorize admin on backend. * @@ -86,11 +68,11 @@ public function getBaseUrl(): string private function authorize() { // Perform GET to backend url so form_key is set - $this->transport->write($this->baseUrl, [], CurlInterface::GET); + $this->transport->write(MftfGlobals::getBackendBaseUrl(), [], CurlInterface::GET); $this->read(); // Authenticate admin user - $authUrl = $this->baseUrl . 'admin/auth/login/'; + $authUrl = MftfGlobals::getBackendBaseUrl() . 'admin/auth/login/'; $data = [ 'login[username]' => getenv('MAGENTO_ADMIN_USERNAME'), 'login[password]' => getenv('MAGENTO_ADMIN_PASSWORD'), @@ -105,7 +87,7 @@ private function authorize() // Get OTP if (Tfa::isEnabled()) { - $authUrl = $this->baseUrl . Tfa::getProviderAdminFormEndpoint('google'); + $authUrl = MftfGlobals::getBackendBaseUrl() . Tfa::getProviderAdminFormEndpoint('google'); $data = [ 'tfa_code' => OTP::getOTP(), 'form_key' => $this->formKey, @@ -145,7 +127,7 @@ private function setFormKey() public function write($url, $data = [], $method = CurlInterface::POST, $headers = []) { $url = ltrim($url, "/"); - $apiUrl = $this->baseUrl . $url; + $apiUrl = MftfGlobals::getBackendBaseUrl() . $url; if ($this->removeBackend) { //TODO diff --git a/src/Magento/FunctionalTestingFramework/DataTransport/Auth/Tfa.php b/src/Magento/FunctionalTestingFramework/DataTransport/Auth/Tfa.php index 3525b663e..04f1971b7 100644 --- a/src/Magento/FunctionalTestingFramework/DataTransport/Auth/Tfa.php +++ b/src/Magento/FunctionalTestingFramework/DataTransport/Auth/Tfa.php @@ -6,10 +6,10 @@ namespace Magento\FunctionalTestingFramework\DataTransport\Auth; +use Magento\FunctionalTestingFramework\Util\MftfGlobals; use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlInterface; use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlTransport; use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; -use Magento\FunctionalTestingFramework\Util\Provider\UrlProvider; /** * Class Tfa (i.e. 2FA) @@ -66,7 +66,7 @@ public static function isEnabled() return self::$tfaEnabled; } - $schemaUrl = UrlProvider::getWebApiBaseUrl() . self::TFA_SCHEMA; + $schemaUrl = MftfGlobals::getWebApiBaseUrl() . self::TFA_SCHEMA; $transport = new CurlTransport(); try { $transport->write($schemaUrl, [], CurlInterface::GET, self::$headers); diff --git a/src/Magento/FunctionalTestingFramework/DataTransport/Auth/WebApiAuth.php b/src/Magento/FunctionalTestingFramework/DataTransport/Auth/WebApiAuth.php index e8bd23161..566d2b348 100644 --- a/src/Magento/FunctionalTestingFramework/DataTransport/Auth/WebApiAuth.php +++ b/src/Magento/FunctionalTestingFramework/DataTransport/Auth/WebApiAuth.php @@ -6,11 +6,11 @@ namespace Magento\FunctionalTestingFramework\DataTransport\Auth; +use Magento\FunctionalTestingFramework\Util\MftfGlobals; use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlInterface; use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlTransport; use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; use Magento\FunctionalTestingFramework\DataTransport\Auth\Tfa\OTP; -use Magento\FunctionalTestingFramework\Util\Provider\UrlProvider; /** * Class WebApiAuth @@ -63,7 +63,7 @@ public static function getAdminToken($username = null, $password = null) return self::$adminAuthTokens[$login]; } - $authUrl = UrlProvider::getWebApiBaseUrl() . self::PATH_ADMIN_AUTH; + $authUrl = MftfGlobals::getWebApiBaseUrl() . self::PATH_ADMIN_AUTH; $data = [ 'username' => $login, @@ -71,7 +71,7 @@ public static function getAdminToken($username = null, $password = null) ]; if (Tfa::isEnabled()) { - $authUrl = UrlProvider::getWebApiBaseUrl() . Tfa::getProviderWebApiAuthEndpoint('google'); + $authUrl = MftfGlobals::getWebApiBaseUrl() . Tfa::getProviderWebApiAuthEndpoint('google'); $data['otp'] = OTP::getOTP(); } diff --git a/src/Magento/FunctionalTestingFramework/DataTransport/FrontendFormExecutor.php b/src/Magento/FunctionalTestingFramework/DataTransport/FrontendFormExecutor.php index a96d6dafa..0cf69ec94 100644 --- a/src/Magento/FunctionalTestingFramework/DataTransport/FrontendFormExecutor.php +++ b/src/Magento/FunctionalTestingFramework/DataTransport/FrontendFormExecutor.php @@ -6,7 +6,7 @@ namespace Magento\FunctionalTestingFramework\DataTransport; -use Magento\FunctionalTestingFramework\Util\Provider\UrlProvider; +use Magento\FunctionalTestingFramework\Util\MftfGlobals; use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlInterface; use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlTransport; use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; @@ -58,13 +58,6 @@ class FrontendFormExecutor implements CurlInterface */ private $customerPassword; - /** - * Base url - * - * @var string - */ - private $baseUrl; - /** * FrontendFormExecutor constructor. * @@ -75,7 +68,6 @@ class FrontendFormExecutor implements CurlInterface */ public function __construct($customerEmail, $customerPassWord) { - $this->baseUrl = UrlProvider::getBaseUrl(); $this->transport = new CurlTransport(); $this->customerEmail = $customerEmail; $this->customerPassword = $customerPassWord; @@ -90,11 +82,11 @@ public function __construct($customerEmail, $customerPassWord) */ private function authorize() { - $url = $this->baseUrl . 'customer/account/login/'; + $url = MftfGlobals::getBaseUrl() . 'customer/account/login/'; $this->transport->write($url, [], CurlInterface::GET); $this->read(); - $url = $this->baseUrl . 'customer/account/loginPost/'; + $url = MftfGlobals::getBaseUrl() . 'customer/account/loginPost/'; $data = [ 'login[username]' => $this->customerEmail, 'login[password]' => $this->customerPassword, @@ -152,7 +144,7 @@ public function write($url, $data = [], $method = CurlInterface::POST, $headers if (isset($data['customer_password'])) { unset($data['customer_password']); } - $apiUrl = $this->baseUrl . $url; + $apiUrl = MftfGlobals::getBaseUrl() . $url; if ($this->formKey) { $data['form_key'] = $this->formKey; } else { diff --git a/src/Magento/FunctionalTestingFramework/DataTransport/WebApiExecutor.php b/src/Magento/FunctionalTestingFramework/DataTransport/WebApiExecutor.php index 92d236520..4c6682438 100644 --- a/src/Magento/FunctionalTestingFramework/DataTransport/WebApiExecutor.php +++ b/src/Magento/FunctionalTestingFramework/DataTransport/WebApiExecutor.php @@ -7,10 +7,10 @@ namespace Magento\FunctionalTestingFramework\DataTransport; use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; +use Magento\FunctionalTestingFramework\Util\MftfGlobals; use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlInterface; use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlTransport; use Magento\FunctionalTestingFramework\DataTransport\Auth\WebApiAuth; -use Magento\FunctionalTestingFramework\Util\Provider\UrlProvider; /** * Curl executor for Magento Web Api requests. @@ -133,7 +133,7 @@ public function close() */ protected function getFormattedUrl($resource) { - $urlResult = UrlProvider::getWebApiBaseUrl(); + $urlResult = MftfGlobals::getWebApiBaseUrl(); if ($this->storeCode != null) { $urlResult .= $this->storeCode . '/'; } diff --git a/src/Magento/FunctionalTestingFramework/Module/MagentoWebDriverDoctor.php b/src/Magento/FunctionalTestingFramework/Module/MagentoWebDriverDoctor.php index 573f1e411..1407c957b 100644 --- a/src/Magento/FunctionalTestingFramework/Module/MagentoWebDriverDoctor.php +++ b/src/Magento/FunctionalTestingFramework/Module/MagentoWebDriverDoctor.php @@ -8,8 +8,6 @@ use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; use Facebook\WebDriver\Remote\RemoteWebDriver; -use Magento\FunctionalTestingFramework\Page\Objects\PageObject; -use Magento\FunctionalTestingFramework\Util\Provider\UrlProvider; /** * MagentoWebDriverDoctor module extends MagentoWebDriver module and is a light weighted module to diagnose webdriver @@ -49,14 +47,16 @@ public function _initialize() } try { - $adminUrl = UrlProvider::getBaseUrl(PageObject::ADMIN_AREA); + $adminUrl = rtrim(getenv('MAGENTO_BACKEND_BASE_URL'), '/') + ?: rtrim(getenv('MAGENTO_BASE_URL'), '/') + . '/' . getenv('MAGENTO_BACKEND_NAME') . '/admin'; $this->loadPageAtUrl($adminUrl); } catch (\Exception $e) { $context[self::EXCEPTION_CONTEXT_ADMIN] = $e->getMessage(); } try { - $storeUrl = UrlProvider::getBaseUrl(); + $storeUrl = getenv('MAGENTO_BASE_URL'); $this->loadPageAtUrl($storeUrl); } catch (\Exception $e) { $context[self::EXCEPTION_CONTEXT_STOREFRONT] = $e->getMessage(); diff --git a/src/Magento/FunctionalTestingFramework/Test/Objects/ActionObject.php b/src/Magento/FunctionalTestingFramework/Test/Objects/ActionObject.php index f3ea9e511..8d4e7a945 100644 --- a/src/Magento/FunctionalTestingFramework/Test/Objects/ActionObject.php +++ b/src/Magento/FunctionalTestingFramework/Test/Objects/ActionObject.php @@ -725,7 +725,7 @@ private function resolveParameterization($isParameterized, $replacement, $match, } else { $resolvedReplacement = $replacement; } - if (get_class($object) === PageObject::class && $object->getArea() === PageObject::ADMIN_AREA) { + if (get_class($object) == PageObject::class && $object->getArea() == PageObject::ADMIN_AREA) { $urlSegments = [ '{{_ENV.MAGENTO_BACKEND_BASE_URL}}', '{{_ENV.MAGENTO_BACKEND_NAME}}', diff --git a/src/Magento/FunctionalTestingFramework/Util/Provider/UrlProvider.php b/src/Magento/FunctionalTestingFramework/Util/MftfGlobals.php similarity index 53% rename from src/Magento/FunctionalTestingFramework/Util/Provider/UrlProvider.php rename to src/Magento/FunctionalTestingFramework/Util/MftfGlobals.php index acfef7397..cb0f4f5ae 100644 --- a/src/Magento/FunctionalTestingFramework/Util/Provider/UrlProvider.php +++ b/src/Magento/FunctionalTestingFramework/Util/MftfGlobals.php @@ -4,17 +4,30 @@ * See COPYING.txt for license details. */ -namespace Magento\FunctionalTestingFramework\Util\Provider; +namespace Magento\FunctionalTestingFramework\Util; use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; -use Magento\FunctionalTestingFramework\Page\Objects\PageObject; use Magento\FunctionalTestingFramework\Util\Path\UrlFormatter; /** - * Provider responsible for returning right URLs for provided scope. + * MFTF Globals */ -class UrlProvider +class MftfGlobals { + /** + * Magento Base URL + * + * @var string null + */ + private static $baseUrl = null; + + /** + * Magento Backend Base URL + * + * @var string null + */ + private static $backendBaseUrl = null; + /** * Magento Web API Base URL * @@ -23,60 +36,79 @@ class UrlProvider private static $webApiBaseUrl = null; /** - * Returns proper Base URL for specified Area. + * Returns Magento Base URL * - * @param string|null $customArea - * @param boolean $withTrailingSeparator + * @param boolean $withTrailingSeparator * @return string * @throws TestFrameworkException */ - public static function getBaseUrl($customArea = null, $withTrailingSeparator = true) + public static function getBaseUrl($withTrailingSeparator = true) { - try { - $baseUrl = getenv('MAGENTO_BASE_URL'); - - switch ($customArea) { - case PageObject::ADMIN_AREA: - $backendName = getenv('MAGENTO_BACKEND_NAME'); - $baseUrl = self::getBackendBaseUrl() ?: $baseUrl; - - return UrlFormatter::format( - UrlFormatter::format($baseUrl) . $backendName, - $withTrailingSeparator - ); + if (!self::$baseUrl) { + try { + $url = getenv('MAGENTO_BASE_URL'); + if ($url) { + self::$baseUrl = UrlFormatter::format($url, false); + } + } catch (TestFrameworkException $e) { } - return UrlFormatter::format($baseUrl, $withTrailingSeparator); - } catch (TestFrameworkException $e) { + } + + if (self::$baseUrl) { + return UrlFormatter::format(self::$baseUrl, $withTrailingSeparator); } throw new TestFrameworkException( - 'Unable to retrieve Magento Base URL. Please check .env and set either:' + 'Unable to retrieve Magento Base URL. Please check .env and set:' . PHP_EOL - . '"MAGENTO_BASE_URL" and "MAGENTO_BACKEND_NAME"' - . PHP_EOL - . 'or' - . PHP_EOL - . '"MAGENTO_BACKEND_BASE_URL"' + . '"MAGENTO_BASE_URL"' ); } /** - * Returns MAGENTO_BACKEND_BASE_URL if set or null + * Return Magento Backend Base URL * * @param boolean $withTrailingSeparator - * @return string|null + * @return string * @throws TestFrameworkException */ - private static function getBackendBaseUrl($withTrailingSeparator = true) + public static function getBackendBaseUrl($withTrailingSeparator = true) { - $bUrl = getenv('MAGENTO_BACKEND_BASE_URL'); - - $backendBaseUrl = $bUrl ?: null; + if (!self::$backendBaseUrl) { + try { + $backendName = getenv('MAGENTO_BACKEND_NAME'); + $bUrl = getenv('MAGENTO_BACKEND_BASE_URL'); + if ($bUrl && $backendName) { + self::$backendBaseUrl = UrlFormatter::format( + UrlFormatter::format($bUrl) . $backendName, + false + ); + } else { + $baseUrl = getenv('MAGENTO_BASE_URL'); + if ($baseUrl && $backendName) { + self::$backendBaseUrl = UrlFormatter::format( + UrlFormatter::format($baseUrl) . $backendName, + false + ); + } + } + } catch (TestFrameworkException $e) { + } + } - if ($backendBaseUrl) { - $backendBaseUrl = UrlFormatter::format($backendBaseUrl, $withTrailingSeparator); + if (self::$backendBaseUrl) { + return UrlFormatter::format(self::$backendBaseUrl, $withTrailingSeparator); } - return $backendBaseUrl; + + throw new TestFrameworkException( + 'Unable to retrieve Magento Backend Base URL. Please check .env and set either:' + . PHP_EOL + . '"MAGENTO_BASE_URL" and "MAGENTO_BACKEND_NAME"' + . PHP_EOL + . 'or' + . PHP_EOL + . '"MAGENTO_BACKEND_BASE_URL"' + ); } /** @@ -104,7 +136,7 @@ public static function getWebApiBaseUrl($withTrailingSeparator = true) } if (!isset($baseUrl)) { - $baseUrl = self::getBaseUrl(); + $baseUrl = MftfGlobals::getBaseUrl(false); } if ($webapiPort) { diff --git a/src/Magento/FunctionalTestingFramework/Util/TestGenerator.php b/src/Magento/FunctionalTestingFramework/Util/TestGenerator.php index b0f7edb8c..82fb2c06a 100644 --- a/src/Magento/FunctionalTestingFramework/Util/TestGenerator.php +++ b/src/Magento/FunctionalTestingFramework/Util/TestGenerator.php @@ -2031,7 +2031,6 @@ private function resolveRuntimeReference($args, $regex, $func) foreach ($args as $key => $arg) { $newArgs[$key] = $arg; - preg_match_all($regex, $arg, $matches); if (!empty($matches[0])) { foreach ($matches[0] as $matchKey => $fullMatch) { @@ -2042,11 +2041,11 @@ private function resolveRuntimeReference($args, $regex, $func) $outputArg = $this->processQuoteBreaks($fullMatch, $newArgs[$key], $replacement); $newArgs[$key] = $outputArg; } - unset($matches); continue; } } + // override passed in args for use later. return $newArgs; }