<?php
namespace Magento\AcceptanceTest\_default\Backend;

use Magento\FunctionalTestingFramework\AcceptanceTester;
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;

/**
 * @Description("<h3>Test files</h3>verification/TestModule/Test/LocatorFunctionTest.xml<br>")
 */
class LocatorFunctionTestCest
{
	/**
	 * @var bool
	 */
	private $isSuccess = false;

	/**
	  * @param AcceptanceTester $I
	  * @throws \Exception
	  */
	public function _after(AcceptanceTester $I)
	{
		if ($this->isSuccess) {
			unlink(__FILE__);
		}
	}

	/**
	 * @Features({"TestModule"})
	 * @param AcceptanceTester $I
	 * @return void
	 * @throws \Exception
	 */
	public function LocatorFunctionTest(AcceptanceTester $I)
	{
		$I->createEntity("data", "test", "ReplacementPerson", [], []); // stepKey: data
		$I->click(Locator::contains("'label'", "'Name'")); // stepKey: SimpleLocator
		$I->click(Locator::contains("'label'", "'Name'")); // stepKey: SimpleLocatorNonShorthand
		$I->click(Locator::find("'img'", ['title' => 'diagram'])); // stepKey: ArrayLocator
		$I->click(Locator::contains("string", "'Name'")); // stepKey: OneParamLiteral
		$I->click(Locator::contains("John", "'Name'")); // stepKey: OneParamData
		$I->click(Locator::contains($I->retrieveEntityField('data', 'key', 'test'), "'Name'")); // stepKey: OneParamPersisted
		$I->click(Locator::contains("string1", "string2")); // stepKey: TwoParamLiteral
		$I->click(Locator::contains("John", "Doe")); // stepKey: TwoParamData
		$I->click(Locator::contains($I->retrieveEntityField('data', 'key1', 'test'), $I->retrieveEntityField('data', 'key2', 'test'))); // stepKey: TwoParamPersisted
		$I->click(Locator::contains("string1", "John")); // stepKey: TwoParamMix1
		$I->click(Locator::contains("string1", $I->retrieveEntityField('data', 'key1', 'test'))); // stepKey: TwoParamMix2
		$I->click(Locator::contains("John", $I->retrieveEntityField('data', 'key1', 'test'))); // stepKey: TwoParamMix3
	}

	public function _passed(AcceptanceTester $I)
	{
		// Test passed successfully.
		$this->isSuccess = true;
	}
}