Skip to content

Commit 27e5c5b

Browse files
authored
Merge branch 'develop' into MQE-957
2 parents 2df0dc0 + 298bbca commit 27e5c5b

File tree

6 files changed

+139
-1
lines changed

6 files changed

+139
-1
lines changed

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,25 @@ public function testGetPageObject()
5151
$this->assertNull($invalidPage);
5252
}
5353

54+
public function testGetEmptyPage()
55+
{
56+
$mockData = [
57+
"testPage1" => [
58+
"url" => "testURL1",
59+
"module" => "testModule1",
60+
"section" => [
61+
],
62+
"area" => "test"
63+
]];
64+
$this->setMockParserOutput($mockData);
65+
66+
// get pages
67+
$page = PageObjectHandler::getInstance()->getObject('testPage1');
68+
69+
// Empty page has been read in and gotten without an exception being thrown.
70+
$this->addToAssertionCount(1);
71+
}
72+
5473
/**
5574
* Function used to set mock for parser return and force init method to run between tests.
5675
*

dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionObjectTest.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,36 @@ public function testResolveDataInUserInput()
255255
$this->assertEquals($expected, $actionObject->getCustomActionAttributes());
256256
}
257257

258+
/**
259+
* {{EntityDataObject.values}} should be replaced with ["value1","value2"]
260+
*/
261+
public function testResolveArrayData()
262+
{
263+
// Set up mocks
264+
$actionObject = new ActionObject('merge123', 'fillField', [
265+
'selector' => '#selector',
266+
'userInput' => '{{EntityDataObject.values}}'
267+
]);
268+
$entityDataObject = new EntityDataObject('EntityDataObject', 'test', [
269+
'values' => [
270+
'value1',
271+
'value2',
272+
'"My" Value'
273+
]
274+
], [], '', '');
275+
$this->mockDataHandlerWithData($entityDataObject);
276+
277+
// Call the method under test
278+
$actionObject->resolveReferences();
279+
280+
// Verify
281+
$expected = [
282+
'selector' => '#selector',
283+
'userInput' => '["value1","value2","\"My\" Value"]'
284+
];
285+
$this->assertEquals($expected, $actionObject->getCustomActionAttributes());
286+
}
287+
258288
/**
259289
* Action object should throw an exception if a reference to a parameterized selector has too few given args.
260290
*/
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\FunctionalTestingFramework\Extension;
8+
9+
/**
10+
* Class ErrorLogger
11+
* @package Magento\FunctionalTestingFramework\Extension
12+
*/
13+
class ErrorLogger
14+
{
15+
/**
16+
* Error Logger Instance
17+
* @var ErrorLogger
18+
*/
19+
private static $errorLogger;
20+
21+
/**
22+
* Singleton method to return ErrorLogger.
23+
* @return ErrorLogger
24+
*/
25+
public static function getInstance()
26+
{
27+
if (!self::$errorLogger) {
28+
self::$errorLogger = new ErrorLogger();
29+
}
30+
31+
return self::$errorLogger;
32+
}
33+
34+
/**
35+
* ErrorLogger constructor.
36+
*/
37+
private function __construct()
38+
{
39+
// private constructor
40+
}
41+
42+
/**
43+
* Loops through stepEvent for browser log entries
44+
* @param \Facebook\WebDriver\Remote\RemoteWebDriver $webDriver
45+
* @param \Codeception\Event\StepEvent $stepEvent
46+
* @return void
47+
*/
48+
public function logErrors($webDriver, $stepEvent)
49+
{
50+
//Types available should be "server", "browser", "driver". Only care about browser at the moment.
51+
$browserLogEntries = $webDriver->manage()->getLog("browser");
52+
foreach ($browserLogEntries as $entry) {
53+
if ($entry["source"] === "javascript") {
54+
$this->logError("javascript", $stepEvent, $entry);
55+
}
56+
}
57+
}
58+
59+
/**
60+
* Logs errors to console/report.
61+
* @param string $type
62+
* @param \Codeception\Event\StepEvent $stepEvent
63+
* @param array $entry
64+
* @return void
65+
*/
66+
private function logError($type, $stepEvent, $entry)
67+
{
68+
//TODO Add to overall log
69+
$stepEvent->getTest()->getScenario()->comment("{$type} ERROR({$entry["level"]}) - " . $entry["message"]);
70+
}
71+
}

src/Magento/FunctionalTestingFramework/Extension/TestContextExtension.php

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

99
use \Codeception\Events;
10+
use Magento\FunctionalTestingFramework\Extension\ErrorLogger;
1011

1112
/**
1213
* Class TestContextExtension
@@ -22,6 +23,7 @@ class TestContextExtension extends \Codeception\Extension
2223
*/
2324
public static $events = [
2425
Events::TEST_FAIL => 'testFail',
26+
Events::STEP_AFTER => 'afterStep'
2527
];
2628

2729
/**
@@ -68,4 +70,16 @@ public function extractContext($trace, $class)
6870
}
6971
return null;
7072
}
73+
74+
/**
75+
* Codeception event listener function, triggered after step.
76+
* Calls ErrorLogger to log JS errors encountered.
77+
* @param \Codeception\Event\StepEvent $e
78+
* @return void
79+
*/
80+
public function afterStep(\Codeception\Event\StepEvent $e)
81+
{
82+
$webDriver = $this->getModule("\Magento\FunctionalTestingFramework\Module\MagentoWebDriver")->webDriver;
83+
ErrorLogger::getInstance()->logErrors($webDriver, $e);
84+
}
7185
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ private function __construct()
6262
}
6363

6464
$module = $pageData[self::MODULE];
65-
$sectionNames = array_keys($pageData[self::SECTION]);
65+
$sectionNames = array_keys($pageData[self::SECTION] ?? []);
6666
$parameterized = $pageData[self::PARAMETERIZED] ?? false;
6767

6868
$this->pageObjects[$pageName] =

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -495,6 +495,10 @@ private function findAndReplaceReferences($objectHandler, $inputString)
495495
$this->setTimeout($obj->getElement($objField)->getTimeout());
496496
} elseif (get_class($obj) == EntityDataObject::class) {
497497
$replacement = $this->resolveEntityDataObjectReference($obj, $match);
498+
499+
if (is_array($replacement)) {
500+
$replacement = '["' . implode('","', array_map('addSlashes', $replacement)) . '"]';
501+
}
498502
}
499503

500504
if ($replacement === null) {

0 commit comments

Comments
 (0)