Skip to content

Commit 90042c4

Browse files
committed
MQE-637: Refactor PageObjectHandler
1 parent bf94cd0 commit 90042c4

File tree

2 files changed

+41
-58
lines changed

2 files changed

+41
-58
lines changed

dev/tests/unit/Magento/FunctionalTestFramework/Page/Handlers/PageObjectHandlerTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public function testGetPageObject()
5757
private function setMockParserOutput($data)
5858
{
5959
// clear section object handler value to inject parsed content
60-
$property = new \ReflectionProperty(PageObjectHandler::class, 'PAGE_DATA_PROCESSOR');
60+
$property = new \ReflectionProperty(PageObjectHandler::class, 'INSTANCE');
6161
$property->setAccessible(true);
6262
$property->setValue(null);
6363

src/Magento/FunctionalTestingFramework/Page/Handlers/PageObjectHandler.php

Lines changed: 40 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -11,104 +11,87 @@
1111
use Magento\FunctionalTestingFramework\Page\Objects\PageObject;
1212
use Magento\FunctionalTestingFramework\XmlParser\PageParser;
1313

14-
/**
15-
* Class PageObjectHandler
16-
*/
1714
class PageObjectHandler implements ObjectHandlerInterface
1815
{
19-
const TYPE = 'page';
20-
const SUB_TYPE = 'section';
16+
const PAGE = 'page';
17+
const SECTION = 'section';
2118
const URL = 'url';
2219
const MODULE = 'module';
2320
const PARAMETERIZED = 'parameterized';
2421

2522
/**
26-
* Singleton class variable instance
23+
* The singleton instance of this class
2724
*
2825
* @var PageObjectHandler
2926
*/
30-
private static $PAGE_DATA_PROCESSOR;
27+
private static $INSTANCE;
3128

3229
/**
3330
* Array containing all page objects
3431
*
35-
* @var array
32+
* @var PageObject[]
3633
*/
37-
private $pages = [];
34+
private $pageObjects = [];
3835

3936
/**
40-
* Singleton method to return PageDataProcessor.
41-
*
42-
* @return PageObjectHandler
37+
* Private constructor
4338
*/
44-
public static function getInstance()
39+
private function __construct()
4540
{
46-
if (!self::$PAGE_DATA_PROCESSOR) {
47-
self::$PAGE_DATA_PROCESSOR = new PageObjectHandler();
48-
self::$PAGE_DATA_PROCESSOR->initPageObjects();
41+
$objectManager = ObjectManagerFactory::getObjectManager();
42+
$parser = $objectManager->get(PageParser::class);
43+
$parserOutput = $parser->getData(self::PAGE);
44+
45+
if (!$parserOutput) {
46+
// No *Page.xml files found so give up
47+
return;
4948
}
5049

51-
return self::$PAGE_DATA_PROCESSOR;
50+
foreach ($parserOutput as $pageName => $pageData) {
51+
$url = $pageData[self::URL];
52+
$module = $pageData[self::MODULE];
53+
$sectionNames = array_keys($pageData[self::SECTION]);
54+
$parameterized = $pageData[self::PARAMETERIZED] ?? false;
55+
$this->pageObjects[$pageName] = new PageObject($pageName, $url, $module, $sectionNames, $parameterized);
56+
}
5257
}
5358

5459
/**
55-
* PageObjectHandler constructor.
60+
* Singleton method to return PageObjectHandler.
61+
*
62+
* @return PageObjectHandler
5663
*/
57-
private function __construct()
64+
public static function getInstance()
5865
{
59-
//private constructor
66+
if (!self::$INSTANCE) {
67+
self::$INSTANCE = new PageObjectHandler();
68+
}
69+
70+
return self::$INSTANCE;
6071
}
6172

6273
/**
63-
* Takes a page name and returns an array parsed from xml.
74+
* Return a page object by name
6475
*
65-
* @param string $pageName
66-
* @return PageObject | null
76+
* @param string $name
77+
* @return PageObject|null
6778
*/
68-
public function getObject($pageName)
79+
public function getObject($name)
6980
{
70-
if (array_key_exists($pageName, $this->pages)) {
71-
return $this->getAllObjects()[$pageName];
81+
if (array_key_exists($name, $this->pageObjects)) {
82+
return $this->getAllObjects()[$name];
7283
}
7384

7485
return null;
7586
}
7687

7788
/**
78-
* Return an array containing all pages parsed from xml.
89+
* Return all page objects
7990
*
80-
* @return array
91+
* @return PageObject[]
8192
*/
8293
public function getAllObjects()
8394
{
84-
return $this->pages;
85-
}
86-
87-
/**
88-
* Executes parser code to read in page xml data.
89-
*
90-
* @return void
91-
* @SuppressWarnings(PHPMD.UnusedPrivateMethod)
92-
*/
93-
private function initPageObjects()
94-
{
95-
$objectManager = ObjectManagerFactory::getObjectManager();
96-
/** @var $parser \Magento\FunctionalTestingFramework\XmlParser\PageParser */
97-
$parser = $objectManager->get(PageParser::class);
98-
$parsedObjs = $parser->getData(self::TYPE);
99-
100-
if (!$parsedObjs) {
101-
// No *Page.xml files found so give up
102-
return;
103-
}
104-
105-
foreach ($parsedObjs as $pageName => $pageData) {
106-
$url = $pageData[self::URL];
107-
$module = $pageData[self::MODULE];
108-
$sections = array_keys($pageData[self::SUB_TYPE]);
109-
$parameterized = $pageData[self::PARAMETERIZED] ?? false;
110-
111-
$this->pages[$pageName] = new PageObject($pageName, $url, $module, $sections, $parameterized);
112-
}
95+
return $this->pageObjects;
11396
}
11497
}

0 commit comments

Comments
 (0)