Skip to content

Commit 88cd0fa

Browse files
authored
#389 Fix invalid bahaviour of MAGENTO_BACKEND_BASE_URL (#547)
* #389 Fix invalid bahaviour of MAGENTO_BACKEND_BASE_URL * #389 Fix issue related to http (URL) provided to `amOnPage`
1 parent 2fe1372 commit 88cd0fa

File tree

8 files changed

+98
-30
lines changed

8 files changed

+98
-30
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/DataGenerator/Persist/Curl/AbstractExecutor.php

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

99
use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException;
10-
use Magento\FunctionalTestingFramework\Util\Path\UrlFormatter;
10+
use Magento\FunctionalTestingFramework\Provider\UrlProvider;
1111
use Magento\FunctionalTestingFramework\Util\Protocol\CurlInterface;
1212

1313
/**
@@ -29,6 +29,6 @@ abstract class AbstractExecutor implements CurlInterface
2929
*/
3030
public function getBaseUrl(): string
3131
{
32-
return UrlFormatter::format(getenv('MAGENTO_BASE_URL'));
32+
return UrlProvider::getBaseUrl();
3333
}
3434
}

src/Magento/FunctionalTestingFramework/DataGenerator/Persist/Curl/AdminExecutor.php

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

77
namespace Magento\FunctionalTestingFramework\DataGenerator\Persist\Curl;
88

9-
use Magento\FunctionalTestingFramework\Util\Path\UrlFormatter;
9+
use Magento\FunctionalTestingFramework\Page\Objects\PageObject;
10+
use Magento\FunctionalTestingFramework\Provider\UrlProvider;
1011
use Magento\FunctionalTestingFramework\Util\Protocol\CurlInterface;
1112
use Magento\FunctionalTestingFramework\Util\Protocol\CurlTransport;
1213
use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException;
@@ -64,16 +65,7 @@ public function __construct($removeBackend)
6465
*/
6566
public function getBaseUrl(): string
6667
{
67-
$backendHost = getenv('MAGENTO_BACKEND_BASE_URL')
68-
?
69-
UrlFormatter::format(getenv('MAGENTO_BACKEND_BASE_URL'))
70-
:
71-
parent::getBaseUrl();
72-
return empty(getenv('MAGENTO_BACKEND_NAME'))
73-
?
74-
$backendHost
75-
:
76-
$backendHost . getenv('MAGENTO_BACKEND_NAME') . '/';
68+
return UrlProvider::getBaseUrl(PageObject::ADMIN_AREA);
7769
}
7870

7971
/**

src/Magento/FunctionalTestingFramework/Module/MagentoWebDriver.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -856,7 +856,8 @@ public function saveScreenshot()
856856
*/
857857
public function amOnPage($page)
858858
{
859-
parent::amOnPage($page);
859+
(0 === strpos($page, 'http')) ? parent::amOnUrl($page) : parent::amOnPage($page);
860+
860861
$this->waitForPageLoad();
861862
}
862863

src/Magento/FunctionalTestingFramework/Module/MagentoWebDriverDoctor.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
namespace Magento\FunctionalTestingFramework\Module;
88

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

1214
/**
@@ -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();
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\FunctionalTestingFramework\Provider;
9+
10+
use Magento\FunctionalTestingFramework\Page\Objects\PageObject;
11+
12+
/**
13+
* Provider responsible for returning right URLs for provided scope.
14+
*/
15+
class UrlProvider
16+
{
17+
/**
18+
* Returns proper Base URL for specified Area.
19+
*
20+
* @param string|null $customArea
21+
* @return string
22+
*/
23+
public static function getBaseUrl($customArea = null): string
24+
{
25+
$baseUrl = getenv('MAGENTO_BASE_URL');
26+
27+
switch ($customArea) {
28+
case PageObject::ADMIN_AREA:
29+
$backendName = getenv('MAGENTO_BACKEND_NAME');
30+
$baseUrl = self::getBackendBaseUrl() ?: $baseUrl;
31+
32+
return rtrim($baseUrl, '/') . '/' . rtrim($backendName, '/') . '/';
33+
}
34+
35+
return $baseUrl;
36+
}
37+
38+
/**
39+
* Returns MAGENTO_BACKEND_BASE_URL if set or null
40+
*
41+
* @return string|null
42+
*/
43+
public static function getBackendBaseUrl()
44+
{
45+
$backendBaseUrl = getenv('MAGENTO_BACKEND_BASE_URL');
46+
47+
return $backendBaseUrl ?: null;
48+
}
49+
}

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -705,8 +705,15 @@ private function resolveParameterization($isParameterized, $replacement, $match,
705705
} else {
706706
$resolvedReplacement = $replacement;
707707
}
708-
if (get_class($object) == PageObject::class && $object->getArea() == PageObject::ADMIN_AREA) {
709-
$resolvedReplacement = "/{{_ENV.MAGENTO_BACKEND_NAME}}/" . $resolvedReplacement;
708+
709+
if (get_class($object) === PageObject::class && $object->getArea() === PageObject::ADMIN_AREA) {
710+
$urlSegments = [
711+
'{{_ENV.MAGENTO_BACKEND_BASE_URL}}',
712+
'{{_ENV.MAGENTO_BACKEND_NAME}}',
713+
$resolvedReplacement
714+
];
715+
716+
$resolvedReplacement = implode('/', $urlSegments);
710717
}
711718
return $resolvedReplacement;
712719
}

src/Magento/FunctionalTestingFramework/Util/TestGenerator.php

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1942,20 +1942,23 @@ private function resolveRuntimeReference($args, $regex, $func)
19421942
$newArgs = [];
19431943

19441944
foreach ($args as $key => $arg) {
1945+
$newArgs[$key] = $arg;
1946+
19451947
preg_match_all($regex, $arg, $matches);
19461948
if (!empty($matches[0])) {
1947-
$fullMatch = $matches[0][0];
1948-
$refVariable = $matches[1][0];
1949-
unset($matches);
1950-
$replacement = "{$func}(\"{$refVariable}\")";
1949+
foreach ($matches[0] as $matchKey => $fullMatch) {
1950+
$refVariable = $matches[1][$matchKey];
1951+
1952+
$replacement = $this->getReplacement($func, $refVariable);
1953+
1954+
$outputArg = $this->processQuoteBreaks($fullMatch, $newArgs[$key], $replacement);
1955+
$newArgs[$key] = $outputArg;
1956+
}
19511957

1952-
$outputArg = $this->processQuoteBreaks($fullMatch, $arg, $replacement);
1953-
$newArgs[$key] = $outputArg;
1958+
unset($matches);
19541959
continue;
19551960
}
1956-
$newArgs[$key] = $arg;
19571961
}
1958-
19591962
// override passed in args for use later.
19601963
return $newArgs;
19611964
}
@@ -2202,4 +2205,20 @@ private function hasDecimalPoint(string $outStr)
22022205
{
22032206
return strpos($outStr, localeconv()['decimal_point']) !== false;
22042207
}
2208+
2209+
/**
2210+
* Supports fallback for BACKEND URL
2211+
*
2212+
* @param string $func
2213+
* @param string $refVariable
2214+
* @return string
2215+
*/
2216+
private function getReplacement($func, $refVariable): string
2217+
{
2218+
if ($refVariable === 'MAGENTO_BACKEND_BASE_URL') {
2219+
return "({$func}(\"{$refVariable}\") ? rtrim({$func}(\"{$refVariable}\"), \"/\") : \"\")";
2220+
}
2221+
2222+
return "{$func}(\"{$refVariable}\")";
2223+
}
22052224
}

0 commit comments

Comments
 (0)