Thanks to visit codestin.com
Credit goes to github.com

Skip to content

MQE-498: Ability to pass simple values into an action group #41

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 16 commits into from
Feb 26, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
use Magento\FunctionalTestingFramework\Page\Objects\SectionObject;
use Magento\FunctionalTestingFramework\Test\Objects\ActionGroupObject;
use Magento\FunctionalTestingFramework\Test\Objects\ActionObject;
use Magento\FunctionalTestingFramework\Test\Objects\ArgumentObject;
use PHPUnit\Framework\TestCase;
use tests\unit\Util\ActionGroupObjectBuilder;
use tests\unit\Util\EntityDataObjectBuilder;
Expand Down Expand Up @@ -49,10 +50,29 @@ public function testGetStepsWithCustomArgs()

$actionGroupUnderTest = (new ActionGroupObjectBuilder())
->withActionObjects([new ActionObject('action1', 'testAction', ['userInput' => '{{arg1.field2}}'])])
->withArguments([new ArgumentObject('arg1', null, 'entity')])
->build();

$steps = $actionGroupUnderTest->getSteps(['arg1' => 'data2'], self::ACTION_GROUP_MERGE_KEY);
$this->assertOnMergeKeyAndActionValue($steps, ['userInput' => 'testValue2']);

// entity.field as argument
$actionGroupUnderTest = (new ActionGroupObjectBuilder())
->withActionObjects([new ActionObject('action1', 'testAction', ['userInput' => '{{arg1}}'])])
->withArguments([new ArgumentObject('arg1', null, 'entity')])
->build();

$steps = $actionGroupUnderTest->getSteps(['arg1' => 'data2.field2'], self::ACTION_GROUP_MERGE_KEY);
$this->assertOnMergeKeyAndActionValue($steps, ['userInput' => 'testValue2']);

// String Data
$actionGroupUnderTest = (new ActionGroupObjectBuilder())
->withActionObjects([new ActionObject('action1', 'testAction', ['userInput' => '{{simple}}'])])
->withArguments([new ArgumentObject('simple', null, 'string')])
->build();

$steps = $actionGroupUnderTest->getSteps(['simple' => 'override'], self::ACTION_GROUP_MERGE_KEY);
$this->assertOnMergeKeyAndActionValue($steps, ['userInput' => 'override']);
}

/**
Expand All @@ -62,10 +82,20 @@ public function testGetStepsWithPersistedArgs()
{
$actionGroupUnderTest = (new ActionGroupObjectBuilder())
->withActionObjects([new ActionObject('action1', 'testAction', ['userInput' => '{{arg1.field2}}'])])
->withArguments([new ArgumentObject('arg1', null, 'entity')])
->build();

$steps = $actionGroupUnderTest->getSteps(['arg1' => '$data3$'], self::ACTION_GROUP_MERGE_KEY);
$this->assertOnMergeKeyAndActionValue($steps, ['userInput' => '$data3.field2$']);

// Simple Data
$actionGroupUnderTest = (new ActionGroupObjectBuilder())
->withActionObjects([new ActionObject('action1', 'testAction', ['userInput' => '{{simple}}'])])
->withArguments([new ArgumentObject('simple', null, 'string')])
->build();

$steps = $actionGroupUnderTest->getSteps(['simple' => '$data3.field2$'], self::ACTION_GROUP_MERGE_KEY);
$this->assertOnMergeKeyAndActionValue($steps, ['userInput' => '$data3.field2$']);
}

/**
Expand All @@ -81,6 +111,7 @@ public function testGetStepsWithNoFieldArg()

$actionGroupUnderTest = (new ActionGroupObjectBuilder())
->withActionObjects([new ActionObject('action1', 'testAction', ['userInput' => '{{arg1}}'])])
->withArguments([new ArgumentObject('arg1', null, 'entity')])
->build();

$steps = $actionGroupUnderTest->getSteps(['arg1' => 'data2.field2'], self::ACTION_GROUP_MERGE_KEY);
Expand Down Expand Up @@ -111,6 +142,12 @@ public function testGetStepsWithNoArgs()
*/
public function testGetStepsWithParameterizedArg()
{
// Mock Entity Object Handler
$this->setEntityObjectHandlerReturn(function ($entityName) {
if ($entityName == "data2") {
return (new EntityDataObjectBuilder())->withDataFields(['field2' => 'testValue2'])->build();
}
});
// mock the section object handler response
$element = new ElementObject("element1", "textArea", ".selector {{var1}}", null, null, true);
$section = new SectionObject("testSection", ["element1" => $element]);
Expand All @@ -120,11 +157,55 @@ public function testGetStepsWithParameterizedArg()

$actionGroupUnderTest = (new ActionGroupObjectBuilder())
->withActionObjects(
[new ActionObject('action1', 'testAction', ['selector' => '{{section1.element1(arg1.field1)}}'])]
[new ActionObject('action1', 'testAction', ['selector' => '{{section1.element1(arg1.field2)}}'])]
)
->withArguments([new ArgumentObject('arg1', null, 'entity')])
->build();

$steps = $actionGroupUnderTest->getSteps(['arg1' => '$someData$'], self::ACTION_GROUP_MERGE_KEY);
// XML Data
$steps = $actionGroupUnderTest->getSteps(['arg1' => 'data2'], self::ACTION_GROUP_MERGE_KEY);
$this->assertOnMergeKeyAndActionValue($steps, ['selector' => '.selector testValue2']);

// Persisted Data
$steps = $actionGroupUnderTest->getSteps(['arg1' => '$data2$'], self::ACTION_GROUP_MERGE_KEY);
$this->assertOnMergeKeyAndActionValue($steps, ['selector' => '.selector $data2.field2$']);
}

/**
* Tests a parameterized section reference in an action group resolved with user simpleArgs.
*/
public function testGetStepsWithParameterizedSimpleArg()
{
// Mock Entity Object Handler
$this->setEntityObjectHandlerReturn(function ($entityName) {
if ($entityName == "data2") {
return (new EntityDataObjectBuilder())->withDataFields(['field2' => 'testValue2'])->build();
}
});
// mock the section object handler response
$element = new ElementObject("element1", "textArea", ".selector {{var1}}", null, null, true);
$section = new SectionObject("testSection", ["element1" => $element]);
// bypass the private constructor
$sectionInstance = AspectMock::double(SectionObjectHandler::class, ['getObject' => $section])->make();
AspectMock::double(SectionObjectHandler::class, ['getInstance' => $sectionInstance]);

$actionGroupUnderTest = (new ActionGroupObjectBuilder())
->withActionObjects(
[new ActionObject('action1', 'testAction', ['selector' => '{{section1.element1(simple)}}'])]
)
->withArguments([new ArgumentObject('simple', null, 'string')])
->build();

// String Literal
$steps = $actionGroupUnderTest->getSteps(['simple' => 'stringLiteral'], self::ACTION_GROUP_MERGE_KEY);
$this->assertOnMergeKeyAndActionValue($steps, ['selector' => '.selector stringLiteral']);

// String Literal w/ data-like structure
$steps = $actionGroupUnderTest->getSteps(['simple' => 'data2.field2'], self::ACTION_GROUP_MERGE_KEY);
$this->assertOnMergeKeyAndActionValue($steps, ['selector' => '.selector data2.field2']);

// Persisted Data
$steps = $actionGroupUnderTest->getSteps(['simple' => '$someData.field1$'], self::ACTION_GROUP_MERGE_KEY);
$this->assertOnMergeKeyAndActionValue($steps, ['selector' => '.selector $someData.field1$']);
}

Expand All @@ -135,6 +216,7 @@ public function testGetStepsWithOuterScopePersistence()
{
$actionGroupUnderTest = (new ActionGroupObjectBuilder())
->withActionObjects([new ActionObject('action1', 'testAction', ['userInput' => '{{arg1.field1}}'])])
->withArguments([new ArgumentObject('arg1', null, 'entity')])
->build();

$steps = $actionGroupUnderTest->getSteps(['arg1' => '$$someData$$'], self::ACTION_GROUP_MERGE_KEY);
Expand All @@ -147,11 +229,11 @@ public function testGetStepsWithOuterScopePersistence()
public function testExceptionOnMissingActions()
{
$actionGroupUnderTest = (new ActionGroupObjectBuilder())
->withArguments(['arg1' => null])
->withArguments([new ArgumentObject('arg1', null, 'entity')])
->build();

$this->expectException(TestReferenceException::class);
$this->expectExceptionMessageRegExp('/Argument\(s\) missed .* for actionGroup/');
$this->expectExceptionMessageRegExp('/Arguments missed .* for actionGroup/');
$actionGroupUnderTest->getSteps(['arg2' => 'data1'], self::ACTION_GROUP_MERGE_KEY);
}

Expand All @@ -161,11 +243,11 @@ public function testExceptionOnMissingActions()
public function testExceptionOnMissingArguments()
{
$actionGroupUnderTest = (new ActionGroupObjectBuilder())
->withArguments(['arg1' => null])
->withArguments([new ArgumentObject('arg1', null, 'entity')])
->build();

$this->expectException(TestReferenceException::class);
$this->expectExceptionMessageRegExp('/Not enough arguments given for actionGroup .*/');
$this->expectExceptionMessageRegExp('/Arguments missed .* for actionGroup/');
$actionGroupUnderTest->getSteps(null, self::ACTION_GROUP_MERGE_KEY);
}

Expand Down
4 changes: 2 additions & 2 deletions dev/tests/unit/Util/ActionGroupObjectBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@ class ActionGroupObjectBuilder
private $actionObjects = [];

/**
* Action Group Object Builder default arguments.
* Action Group Object Builder default entity arguments.
*
* @var array
*/
private $arguments = ['arg1' => 'data1'];
private $arguments = [];

/**
* Setter for the Action Group Object name
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php
namespace Magento\AcceptanceTest\_generated\Backend;

use Magento\FunctionalTestingFramework\AcceptanceTester;
use Magento\FunctionalTestingFramework\DataGenerator\Handlers\DataObjectHandler;
use Magento\FunctionalTestingFramework\DataGenerator\Persist\DataPersistenceHandler;
use Magento\FunctionalTestingFramework\DataGenerator\Objects\EntityDataObject;
use \Codeception\Util\Locator;
use Yandex\Allure\Adapter\Annotation\Features;
use Yandex\Allure\Adapter\Annotation\Stories;
use Yandex\Allure\Adapter\Annotation\Title;
use Yandex\Allure\Adapter\Annotation\Description;
use Yandex\Allure\Adapter\Annotation\Parameter;
use Yandex\Allure\Adapter\Annotation\Severity;
use Yandex\Allure\Adapter\Model\SeverityLevel;
use Yandex\Allure\Adapter\Annotation\TestCaseId;

/**
* @Title("Action Group With Simple Data Usage From Default Argument")
*/
class ActionGroupWithSimpleDataUsageFromDefaultArgumentCest
{
/**
* @Severity(level = SeverityLevel::CRITICAL)
* @Parameter(name = "AcceptanceTester", value="$I")
* @param AcceptanceTester $I
* @return void
* @throws \Exception
*/
public function ActionGroupWithSimpleDataUsageFromDefaultArgument(AcceptanceTester $I)
{
$I->see("stringLiteral", "#element .stringLiteral");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php
namespace Magento\AcceptanceTest\_generated\Backend;

use Magento\FunctionalTestingFramework\AcceptanceTester;
use Magento\FunctionalTestingFramework\DataGenerator\Handlers\DataObjectHandler;
use Magento\FunctionalTestingFramework\DataGenerator\Persist\DataPersistenceHandler;
use Magento\FunctionalTestingFramework\DataGenerator\Objects\EntityDataObject;
use \Codeception\Util\Locator;
use Yandex\Allure\Adapter\Annotation\Features;
use Yandex\Allure\Adapter\Annotation\Stories;
use Yandex\Allure\Adapter\Annotation\Title;
use Yandex\Allure\Adapter\Annotation\Description;
use Yandex\Allure\Adapter\Annotation\Parameter;
use Yandex\Allure\Adapter\Annotation\Severity;
use Yandex\Allure\Adapter\Model\SeverityLevel;
use Yandex\Allure\Adapter\Annotation\TestCaseId;

/**
* @Title("Action Group With Simple Data Usage From Passed Argument")
*/
class ActionGroupWithSimpleDataUsageFromPassedArgumentCest
{
/**
* @Severity(level = SeverityLevel::CRITICAL)
* @Parameter(name = "AcceptanceTester", value="$I")
* @param AcceptanceTester $I
* @return void
* @throws \Exception
*/
public function ActionGroupWithSimpleDataUsageFromPassedArgument(AcceptanceTester $I)
{
$I->see("overrideString", "#element .overrideString");
$I->see("1", "#element .1");
$I->see("1.5", "#element .1.5");
$I->see("true", "#element .true");
$I->see("simpleData.firstname", "#element .simpleData.firstname");
$I->see($persisted->getCreatedDataByName('data'), "#element ." . $persisted->getCreatedDataByName('data'));
$I->see("John", "#element .John");
$I->see($simpleData->getCreatedDataByName('firstname'), "#element ." . $simpleData->getCreatedDataByName('firstname'));
}
}
14 changes: 14 additions & 0 deletions dev/tests/verification/TestModule/ActionGroup/BasicActionGroup.xml
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,18 @@

<see selector="{{SampleSection.threeParamElement(someArgument.firstname, someArgument.lastname, 'test')}}" userInput="{{someArgument.lastname}}" stepKey="seeLastName" />
</actionGroup>

<actionGroup name="actionGroupWithStringUsage">
<arguments>
<argument name="someArgument" type="string" defaultValue="stringLiteral"/>
</arguments>
<see selector="{{SampleSection.oneParamElement(someArgument)}}" userInput="{{someArgument}}" stepKey="see1" />
</actionGroup>

<actionGroup name="actionGroupWithEntityUsage">
<arguments>
<argument name="someArgument" type="entity" defaultValue="stringLiteral"/>
</arguments>
<see selector="{{SampleSection.oneParamElement(someArgument)}}" userInput="{{someArgument}}" stepKey="see1" />
</actionGroup>
</actionGroups>
41 changes: 41 additions & 0 deletions dev/tests/verification/TestModule/Test/ActionGroupTest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,45 @@

<actionGroup ref="actionGroupWithMultipleParameterSelectorsFromArgument" stepKey="actionGroup"/>
</test>

<test name="ActionGroupWithSimpleDataUsageFromPassedArgument">
<annotations>
<severity value="CRITICAL"/>
<title value="Action Group With Simple Data Usage From Passed Argument"/>
</annotations>

<actionGroup ref="actionGroupWithStringUsage" stepKey="actionGroup1">
<argument name="someArgument" value="overrideString"/>
</actionGroup>
<actionGroup ref="actionGroupWithStringUsage" stepKey="actionGroup11">
<argument name="someArgument" value="1"/>
</actionGroup>
<actionGroup ref="actionGroupWithStringUsage" stepKey="actionGroup12">
<argument name="someArgument" value="1.5"/>
</actionGroup>
<actionGroup ref="actionGroupWithStringUsage" stepKey="actionGroup13">
<argument name="someArgument" value="true"/>
</actionGroup>
<actionGroup ref="actionGroupWithStringUsage" stepKey="actionGroup2">
<argument name="someArgument" value="simpleData.firstname"/>
</actionGroup>
<actionGroup ref="actionGroupWithStringUsage" stepKey="actionGroup3">
<argument name="someArgument" value="$persisted.data$"/>
</actionGroup>

<actionGroup ref="actionGroupWithEntityUsage" stepKey="actionGroup4">
<argument name="someArgument" value="simpleData.firstname"/>
</actionGroup>
<actionGroup ref="actionGroupWithStringUsage" stepKey="actionGroup5">
<argument name="someArgument" value="$simpleData.firstname$"/>
</actionGroup>
</test>

<test name="ActionGroupWithSimpleDataUsageFromDefaultArgument">
<annotations>
<severity value="CRITICAL"/>
<title value="Action Group With Simple Data Usage From Default Argument"/>
</annotations>
<actionGroup ref="actionGroupWithStringUsage" stepKey="actionGroup"/>
</test>
</tests>
22 changes: 22 additions & 0 deletions dev/tests/verification/Tests/ActionGroupGenerationTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -74,4 +74,26 @@ public function testActionGroupWithMultipleParameterSelectorsFromDefaultArgument
{
$this->generateAndCompareTest('ActionGroupWithMultipleParameterSelectorsFromDefaultArgument');
}

/**
* Test generation of a test referencing an action group with simple passed data.
*
* @throws \Exception
* @throws \Magento\FunctionalTestingFramework\Exceptions\TestReferenceException
*/
public function testActionGroupWithSimpleDataUsageFromPassedArgument()
{
$this->generateAndCompareTest('ActionGroupWithSimpleDataUsageFromPassedArgument');
}

/**
* Test generation of a test referencing an action group with default data.
*
* @throws \Exception
* @throws \Magento\FunctionalTestingFramework\Exceptions\TestReferenceException
*/
public function testActionGroupWithSimpleDataUsageFromDefaultArgument()
{
$this->generateAndCompareTest('ActionGroupWithSimpleDataUsageFromDefaultArgument');
}
}
Loading