From 00b21e38fd22d617eac2ff63cc5a930c32d4b361 Mon Sep 17 00:00:00 2001 From: Nathan Smith Date: Fri, 6 Apr 2018 12:12:39 -0500 Subject: [PATCH 1/3] Added ability to use array entities as arguments. --- .../Test/Objects/ActionObjectTest.php | 29 +++++++++++++++++++ .../Test/Objects/ActionObject.php | 4 +++ 2 files changed, 33 insertions(+) diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionObjectTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionObjectTest.php index 98646d0c4..aafc32fcf 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionObjectTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionObjectTest.php @@ -255,6 +255,35 @@ public function testResolveDataInUserInput() $this->assertEquals($expected, $actionObject->getCustomActionAttributes()); } + /** + * {{EntityDataObject.values}} should be replaced with ["value1","value2"] + */ + public function testResolveArrayData() + { + // Set up mocks + $actionObject = new ActionObject('merge123', 'fillField', [ + 'selector' => '#selector', + 'userInput' => '{{EntityDataObject.values}}' + ]); + $entityDataObject = new EntityDataObject('EntityDataObject', 'test', [ + 'values' => [ + 'value1', + 'value2' + ] + ], [], '', ''); + $this->mockDataHandlerWithData($entityDataObject); + + // Call the method under test + $actionObject->resolveReferences(); + + // Verify + $expected = [ + 'selector' => '#selector', + 'userInput' => '["value1","value2"]' + ]; + $this->assertEquals($expected, $actionObject->getCustomActionAttributes()); + } + /** * Action object should throw an exception if a reference to a parameterized selector has too few given args. */ diff --git a/src/Magento/FunctionalTestingFramework/Test/Objects/ActionObject.php b/src/Magento/FunctionalTestingFramework/Test/Objects/ActionObject.php index 84f073c04..8841f6471 100644 --- a/src/Magento/FunctionalTestingFramework/Test/Objects/ActionObject.php +++ b/src/Magento/FunctionalTestingFramework/Test/Objects/ActionObject.php @@ -496,6 +496,10 @@ private function findAndReplaceReferences($objectHandler, $inputString) $replacement = $this->resolveParameterization($parameterized, $replacement, $match, $obj); + if (is_array($replacement)) { + $replacement = '["' . implode('","', $replacement) . '"]'; + } + $outputString = str_replace($match, $replacement, $outputString); } return $outputString; From d3ad9555c31e1bc4df80ec336b7181a912dc38f6 Mon Sep 17 00:00:00 2001 From: Nathan Smith Date: Wed, 18 Apr 2018 11:02:30 -0500 Subject: [PATCH 2/3] Added slash escapement and moved condition for array entity arguments --- .../Test/Objects/ActionObjectTest.php | 5 +++-- .../Test/Objects/ActionObject.php | 7 +++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionObjectTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionObjectTest.php index aafc32fcf..b5aa8c4b1 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionObjectTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionObjectTest.php @@ -268,7 +268,8 @@ public function testResolveArrayData() $entityDataObject = new EntityDataObject('EntityDataObject', 'test', [ 'values' => [ 'value1', - 'value2' + 'value2', + '"My" Value' ] ], [], '', ''); $this->mockDataHandlerWithData($entityDataObject); @@ -279,7 +280,7 @@ public function testResolveArrayData() // Verify $expected = [ 'selector' => '#selector', - 'userInput' => '["value1","value2"]' + 'userInput' => '["value1","value2","\"My\" Value"]' ]; $this->assertEquals($expected, $actionObject->getCustomActionAttributes()); } diff --git a/src/Magento/FunctionalTestingFramework/Test/Objects/ActionObject.php b/src/Magento/FunctionalTestingFramework/Test/Objects/ActionObject.php index 8841f6471..f84b8f46b 100644 --- a/src/Magento/FunctionalTestingFramework/Test/Objects/ActionObject.php +++ b/src/Magento/FunctionalTestingFramework/Test/Objects/ActionObject.php @@ -493,13 +493,12 @@ private function findAndReplaceReferences($objectHandler, $inputString) throw new TestReferenceException("Could not resolve entity reference " . $inputString); } } + elseif (is_array($replacement)) { + $replacement = '["' . implode('","', array_map('addSlashes',$replacement)) . '"]'; + } $replacement = $this->resolveParameterization($parameterized, $replacement, $match, $obj); - if (is_array($replacement)) { - $replacement = '["' . implode('","', $replacement) . '"]'; - } - $outputString = str_replace($match, $replacement, $outputString); } return $outputString; From 9bce2765b3061f92d831fdfe4fd6950ea5c63d18 Mon Sep 17 00:00:00 2001 From: Nathan Smith Date: Wed, 18 Apr 2018 13:45:00 -0500 Subject: [PATCH 3/3] Moved array entity data replacement conditional --- .../Test/Objects/ActionObject.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Magento/FunctionalTestingFramework/Test/Objects/ActionObject.php b/src/Magento/FunctionalTestingFramework/Test/Objects/ActionObject.php index aa8721874..8a57013b1 100644 --- a/src/Magento/FunctionalTestingFramework/Test/Objects/ActionObject.php +++ b/src/Magento/FunctionalTestingFramework/Test/Objects/ActionObject.php @@ -495,6 +495,10 @@ private function findAndReplaceReferences($objectHandler, $inputString) $this->setTimeout($obj->getElement($objField)->getTimeout()); } elseif (get_class($obj) == EntityDataObject::class) { $replacement = $this->resolveEntityDataObjectReference($obj, $match); + + if (is_array($replacement)) { + $replacement = '["' . implode('","', array_map('addSlashes', $replacement)) . '"]'; + } } if ($replacement === null) { @@ -504,9 +508,6 @@ private function findAndReplaceReferences($objectHandler, $inputString) throw new TestReferenceException("Could not resolve entity reference " . $inputString); } } - elseif (is_array($replacement)) { - $replacement = '["' . implode('","', array_map('addSlashes',$replacement)) . '"]'; - } $replacement = $this->resolveParameterization($parameterized, $replacement, $match, $obj);