Skip to content

Commit 71770cb

Browse files
committed
MQE-2212: Fix invalid behaviour of MAGENTO_BACKEND_BASE_URL
1 parent 081aa48 commit 71770cb

File tree

11 files changed

+106
-99
lines changed

11 files changed

+106
-99
lines changed

dev/tests/verification/Resources/PageReplacementTest.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ class PageReplacementTestCest
3535
$I->amOnPage("/John/StringLiteral2.html"); // stepKey: twoParamPageStringData
3636
$I->amOnPage("/John/" . $I->retrieveEntityField('datakey', 'firstname', 'test') . ".html"); // stepKey: twoParamPageDataPersist
3737
$I->amOnPage("/" . $I->retrieveEntityField('datakey', 'firstname', 'test') . "/StringLiteral2.html"); // stepKey: twoParamPagePersistString
38-
$I->amOnPage("/" . getenv("MAGENTO_BACKEND_NAME") . "/backend"); // stepKey: onAdminPage
39-
$I->amOnPage("/" . getenv("MAGENTO_BACKEND_NAME") . "/StringLiteral/page.html"); // stepKey: oneParamAdminPageString
38+
$I->amOnPage((getenv("MAGENTO_BACKEND_BASE_URL") ? rtrim(getenv("MAGENTO_BACKEND_BASE_URL"), "/") : "") . "/" . getenv("MAGENTO_BACKEND_NAME") . "/backend"); // stepKey: onAdminPage
39+
$I->amOnPage((getenv("MAGENTO_BACKEND_BASE_URL") ? rtrim(getenv("MAGENTO_BACKEND_BASE_URL"), "/") : "") . "/" . getenv("MAGENTO_BACKEND_NAME") . "/StringLiteral/page.html"); // stepKey: oneParamAdminPageString
4040
$I->amOnUrl("http://myFullUrl.com/"); // stepKey: onExternalPage
4141
}
4242
}

src/Magento/FunctionalTestingFramework/DataTransport/AdminFormExecutor.php

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@
66

77
namespace Magento\FunctionalTestingFramework\DataTransport;
88

9-
use Magento\FunctionalTestingFramework\Util\MftfGlobals;
9+
use Magento\FunctionalTestingFramework\Page\Objects\PageObject;
1010
use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlInterface;
1111
use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlTransport;
1212
use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException;
1313
use Magento\FunctionalTestingFramework\DataTransport\Auth\Tfa\OTP;
1414
use Magento\FunctionalTestingFramework\DataTransport\Auth\Tfa;
15+
use Magento\FunctionalTestingFramework\Provider\UrlProvider;
1516

1617
/**
1718
* Curl executor for requests to Admin.
@@ -59,6 +60,16 @@ public function __construct($removeBackend)
5960
$this->authorize();
6061
}
6162

63+
/**
64+
* Returns base URL for Magento backend instance
65+
* @return string
66+
* @throws TestFrameworkException
67+
*/
68+
public function getBaseUrl(): string
69+
{
70+
return UrlProvider::getBaseUrl(PageObject::ADMIN_AREA);
71+
}
72+
6273
/**
6374
* Authorize admin on backend.
6475
*
@@ -68,11 +79,11 @@ public function __construct($removeBackend)
6879
private function authorize()
6980
{
7081
// Perform GET to backend url so form_key is set
71-
$this->transport->write(MftfGlobals::getBackendBaseUrl(), [], CurlInterface::GET);
82+
$this->transport->write($this->getBaseUrl(), [], CurlInterface::GET);
7283
$this->read();
7384

7485
// Authenticate admin user
75-
$authUrl = MftfGlobals::getBackendBaseUrl() . 'admin/auth/login/';
86+
$authUrl = $this->getBaseUrl() . 'admin/auth/login/';
7687
$data = [
7788
'login[username]' => getenv('MAGENTO_ADMIN_USERNAME'),
7889
'login[password]' => getenv('MAGENTO_ADMIN_PASSWORD'),
@@ -87,7 +98,7 @@ private function authorize()
8798

8899
// Get OTP
89100
if (Tfa::isEnabled()) {
90-
$authUrl = MftfGlobals::getBackendBaseUrl() . Tfa::getProviderAdminFormEndpoint('google');
101+
$authUrl = $this->getBaseUrl() . Tfa::getProviderAdminFormEndpoint('google');
91102
$data = [
92103
'tfa_code' => OTP::getOTP(),
93104
'form_key' => $this->formKey,
@@ -127,7 +138,7 @@ private function setFormKey()
127138
public function write($url, $data = [], $method = CurlInterface::POST, $headers = [])
128139
{
129140
$url = ltrim($url, "/");
130-
$apiUrl = MftfGlobals::getBackendBaseUrl() . $url;
141+
$apiUrl = $this->getBaseUrl() . $url;
131142

132143
if ($this->removeBackend) {
133144
//TODO

src/Magento/FunctionalTestingFramework/DataTransport/Auth/Tfa.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66

77
namespace Magento\FunctionalTestingFramework\DataTransport\Auth;
88

9-
use Magento\FunctionalTestingFramework\Util\MftfGlobals;
109
use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlInterface;
1110
use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlTransport;
1211
use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException;
12+
use Magento\FunctionalTestingFramework\Provider\UrlProvider;
1313

1414
/**
1515
* Class Tfa (i.e. 2FA)
@@ -66,7 +66,7 @@ public static function isEnabled()
6666
return self::$tfaEnabled;
6767
}
6868

69-
$schemaUrl = MftfGlobals::getWebApiBaseUrl() . self::TFA_SCHEMA;
69+
$schemaUrl = UrlProvider::getWebApiBaseUrl() . self::TFA_SCHEMA;
7070
$transport = new CurlTransport();
7171
try {
7272
$transport->write($schemaUrl, [], CurlInterface::GET, self::$headers);

src/Magento/FunctionalTestingFramework/DataTransport/Auth/WebApiAuth.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66

77
namespace Magento\FunctionalTestingFramework\DataTransport\Auth;
88

9-
use Magento\FunctionalTestingFramework\Util\MftfGlobals;
109
use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlInterface;
1110
use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlTransport;
1211
use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException;
1312
use Magento\FunctionalTestingFramework\DataTransport\Auth\Tfa\OTP;
13+
use Magento\FunctionalTestingFramework\Provider\UrlProvider;
1414

1515
/**
1616
* Class WebApiAuth
@@ -63,15 +63,15 @@ public static function getAdminToken($username = null, $password = null)
6363
return self::$adminAuthTokens[$login];
6464
}
6565

66-
$authUrl = MftfGlobals::getWebApiBaseUrl() . self::PATH_ADMIN_AUTH;
66+
$authUrl = UrlProvider::getWebApiBaseUrl() . self::PATH_ADMIN_AUTH;
6767

6868
$data = [
6969
'username' => $login,
7070
'password' => $password
7171
];
7272

7373
if (Tfa::isEnabled()) {
74-
$authUrl = MftfGlobals::getWebApiBaseUrl() . Tfa::getProviderWebApiAuthEndpoint('google');
74+
$authUrl = UrlProvider::getWebApiBaseUrl() . Tfa::getProviderWebApiAuthEndpoint('google');
7575
$data['otp'] = OTP::getOTP();
7676
}
7777

src/Magento/FunctionalTestingFramework/DataTransport/FrontendFormExecutor.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
namespace Magento\FunctionalTestingFramework\DataTransport;
88

9-
use Magento\FunctionalTestingFramework\Util\MftfGlobals;
9+
use Magento\FunctionalTestingFramework\Provider\UrlProvider;
1010
use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlInterface;
1111
use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlTransport;
1212
use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException;
@@ -82,11 +82,11 @@ public function __construct($customerEmail, $customerPassWord)
8282
*/
8383
private function authorize()
8484
{
85-
$url = MftfGlobals::getBaseUrl() . 'customer/account/login/';
85+
$url = UrlProvider::getBaseUrl() . 'customer/account/login/';
8686
$this->transport->write($url, [], CurlInterface::GET);
8787
$this->read();
8888

89-
$url = MftfGlobals::getBaseUrl() . 'customer/account/loginPost/';
89+
$url = UrlProvider::getBaseUrl() . 'customer/account/loginPost/';
9090
$data = [
9191
'login[username]' => $this->customerEmail,
9292
'login[password]' => $this->customerPassword,
@@ -144,7 +144,7 @@ public function write($url, $data = [], $method = CurlInterface::POST, $headers
144144
if (isset($data['customer_password'])) {
145145
unset($data['customer_password']);
146146
}
147-
$apiUrl = MftfGlobals::getBaseUrl() . $url;
147+
$apiUrl = UrlProvider::getBaseUrl() . $url;
148148
if ($this->formKey) {
149149
$data['form_key'] = $this->formKey;
150150
} else {

src/Magento/FunctionalTestingFramework/DataTransport/WebApiExecutor.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
namespace Magento\FunctionalTestingFramework\DataTransport;
88

99
use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException;
10-
use Magento\FunctionalTestingFramework\Util\MftfGlobals;
1110
use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlInterface;
1211
use Magento\FunctionalTestingFramework\DataTransport\Protocol\CurlTransport;
1312
use Magento\FunctionalTestingFramework\DataTransport\Auth\WebApiAuth;
13+
use Magento\FunctionalTestingFramework\Provider\UrlProvider;
1414

1515
/**
1616
* Curl executor for Magento Web Api requests.
@@ -133,7 +133,7 @@ public function close()
133133
*/
134134
protected function getFormattedUrl($resource)
135135
{
136-
$urlResult = MftfGlobals::getWebApiBaseUrl();
136+
$urlResult = UrlProvider::getWebApiBaseUrl();
137137
if ($this->storeCode != null) {
138138
$urlResult .= $this->storeCode . '/';
139139
}

src/Magento/FunctionalTestingFramework/Module/MagentoWebDriver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -866,7 +866,7 @@ public function saveScreenshot()
866866
*/
867867
public function amOnPage($page)
868868
{
869-
parent::amOnPage($page);
869+
(0 === strpos($page, 'http')) ? parent::amOnUrl($page) : parent::amOnPage($page);
870870
$this->waitForPageLoad();
871871
}
872872

src/Magento/FunctionalTestingFramework/Module/MagentoWebDriverDoctor.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException;
1010
use Facebook\WebDriver\Remote\RemoteWebDriver;
11+
use Magento\FunctionalTestingFramework\Page\Objects\PageObject;
12+
use Magento\FunctionalTestingFramework\Provider\UrlProvider;
1113

1214
/**
1315
* MagentoWebDriverDoctor module extends MagentoWebDriver module and is a light weighted module to diagnose webdriver
@@ -47,16 +49,14 @@ public function _initialize()
4749
}
4850

4951
try {
50-
$adminUrl = rtrim(getenv('MAGENTO_BACKEND_BASE_URL'), '/')
51-
?: rtrim(getenv('MAGENTO_BASE_URL'), '/')
52-
. '/' . getenv('MAGENTO_BACKEND_NAME') . '/admin';
52+
$adminUrl = UrlProvider::getBaseUrl(PageObject::ADMIN_AREA);
5353
$this->loadPageAtUrl($adminUrl);
5454
} catch (\Exception $e) {
5555
$context[self::EXCEPTION_CONTEXT_ADMIN] = $e->getMessage();
5656
}
5757

5858
try {
59-
$storeUrl = getenv('MAGENTO_BASE_URL');
59+
$storeUrl = UrlProvider::getBaseUrl();
6060
$this->loadPageAtUrl($storeUrl);
6161
} catch (\Exception $e) {
6262
$context[self::EXCEPTION_CONTEXT_STOREFRONT] = $e->getMessage();

src/Magento/FunctionalTestingFramework/Util/MftfGlobals.php renamed to src/Magento/FunctionalTestingFramework/Provider/UrlProvider.php

Lines changed: 38 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,17 @@
44
* See COPYING.txt for license details.
55
*/
66

7-
namespace Magento\FunctionalTestingFramework\Util;
7+
namespace Magento\FunctionalTestingFramework\Provider;
88

99
use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException;
10+
use Magento\FunctionalTestingFramework\Page\Objects\PageObject;
1011
use Magento\FunctionalTestingFramework\Util\Path\UrlFormatter;
1112

1213
/**
13-
* MFTF Globals
14+
* Provider responsible for returning right URLs for provided scope.
1415
*/
15-
class MftfGlobals
16+
class UrlProvider
1617
{
17-
/**
18-
* Magento Base URL
19-
*
20-
* @var string null
21-
*/
22-
private static $baseUrl = null;
23-
24-
/**
25-
* Magento Backend Base URL
26-
*
27-
* @var string null
28-
*/
29-
private static $backendBaseUrl = null;
30-
3118
/**
3219
* Magento Web API Base URL
3320
*
@@ -36,76 +23,61 @@ class MftfGlobals
3623
private static $webApiBaseUrl = null;
3724

3825
/**
39-
* Returns Magento Base URL
26+
* Returns proper Base URL for specified Area.
4027
*
41-
* @param boolean $withTrailingSeparator
28+
* @param string|null $customArea
29+
* @param boolean $withTrailingSeparator
4230
* @return string
4331
* @throws TestFrameworkException
4432
*/
45-
public static function getBaseUrl($withTrailingSeparator = true)
33+
public static function getBaseUrl($customArea = null, $withTrailingSeparator = true)
4634
{
47-
if (!self::$baseUrl) {
48-
try {
49-
$url = getenv('MAGENTO_BASE_URL');
50-
if ($url) {
51-
self::$baseUrl = UrlFormatter::format($url, false);
52-
}
53-
} catch (TestFrameworkException $e) {
54-
}
55-
}
5635

57-
if (self::$baseUrl) {
58-
return UrlFormatter::format(self::$baseUrl, $withTrailingSeparator);
36+
try {
37+
$baseUrl = getenv('MAGENTO_BASE_URL');
38+
39+
switch ($customArea) {
40+
case PageObject::ADMIN_AREA:
41+
$backendName = getenv('MAGENTO_BACKEND_NAME');
42+
$baseUrl = self::getBackendBaseUrl() ?: $baseUrl;
43+
44+
return UrlFormatter::format(
45+
UrlFormatter::format($baseUrl) . $backendName,
46+
$withTrailingSeparator
47+
);
48+
}
49+
return UrlFormatter::format($baseUrl, $withTrailingSeparator);
50+
} catch (TestFrameworkException $e) {
5951
}
6052

6153
throw new TestFrameworkException(
62-
'Unable to retrieve Magento Base URL. Please check .env and set:'
54+
'Unable to retrieve Magento Base URL. Please check .env and set either:'
6355
. PHP_EOL
64-
. '"MAGENTO_BASE_URL"'
56+
. '"MAGENTO_BASE_URL" and "MAGENTO_BACKEND_NAME"'
57+
. PHP_EOL
58+
. 'or'
59+
. PHP_EOL
60+
. '"MAGENTO_BACKEND_BASE_URL"'
6561
);
6662
}
6763

6864
/**
69-
* Return Magento Backend Base URL
65+
* Returns MAGENTO_BACKEND_BASE_URL if set or null
7066
*
7167
* @param boolean $withTrailingSeparator
72-
* @return string
68+
* @return string|null
7369
* @throws TestFrameworkException
7470
*/
7571
public static function getBackendBaseUrl($withTrailingSeparator = true)
7672
{
77-
if (!self::$backendBaseUrl) {
78-
try {
79-
$bUrl = getenv('MAGENTO_BACKEND_BASE_URL');
80-
if ($bUrl) {
81-
self::$backendBaseUrl = UrlFormatter::format($bUrl, false);
82-
} else {
83-
$baseUrl = getenv('MAGENTO_BASE_URL');
84-
$backendName = getenv('MAGENTO_BACKEND_NAME');
85-
if ($baseUrl && $backendName) {
86-
self::$backendBaseUrl = UrlFormatter::format(
87-
UrlFormatter::format($baseUrl) . $backendName,
88-
false
89-
);
90-
}
91-
}
92-
} catch (TestFrameworkException $e) {
93-
}
94-
}
73+
$bUrl = getenv('MAGENTO_BACKEND_BASE_URL');
9574

96-
if (self::$backendBaseUrl) {
97-
return UrlFormatter::format(self::$backendBaseUrl, $withTrailingSeparator);
98-
}
75+
$backendBaseUrl = $bUrl ?: null;
9976

100-
throw new TestFrameworkException(
101-
'Unable to retrieve Magento Backend Base URL. Please check .env and set either:'
102-
. PHP_EOL
103-
. '"MAGENTO_BASE_URL" and "MAGENTO_BACKEND_NAME"'
104-
. PHP_EOL
105-
. 'or'
106-
. PHP_EOL
107-
. '"MAGENTO_BACKEND_BASE_URL"'
108-
);
77+
if ($backendBaseUrl) {
78+
$backendBaseUrl = UrlFormatter::format($backendBaseUrl, $withTrailingSeparator);
79+
}
80+
return $backendBaseUrl;
10981
}
11082

11183
/**
@@ -133,7 +105,7 @@ public static function getWebApiBaseUrl($withTrailingSeparator = true)
133105
}
134106

135107
if (!isset($baseUrl)) {
136-
$baseUrl = MftfGlobals::getBaseUrl(false);
108+
$baseUrl = self::getBaseUrl();
137109
}
138110

139111
if ($webapiPort) {

src/Magento/FunctionalTestingFramework/Test/Objects/ActionObject.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -725,8 +725,13 @@ private function resolveParameterization($isParameterized, $replacement, $match,
725725
} else {
726726
$resolvedReplacement = $replacement;
727727
}
728-
if (get_class($object) == PageObject::class && $object->getArea() == PageObject::ADMIN_AREA) {
729-
$resolvedReplacement = "/{{_ENV.MAGENTO_BACKEND_NAME}}/" . $resolvedReplacement;
728+
if (get_class($object) === PageObject::class && $object->getArea() === PageObject::ADMIN_AREA) {
729+
$urlSegments = [
730+
'{{_ENV.MAGENTO_BACKEND_BASE_URL}}',
731+
'{{_ENV.MAGENTO_BACKEND_NAME}}',
732+
$resolvedReplacement
733+
];
734+
$resolvedReplacement = implode('/', $urlSegments);
730735
}
731736
return $resolvedReplacement;
732737
}

0 commit comments

Comments
 (0)