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

use Magento\FunctionalTestingFramework\AcceptanceTester;
use Magento\FunctionalTestingFramework\DataGenerator\Handlers\CredentialStore;
use Magento\FunctionalTestingFramework\DataGenerator\Handlers\PersistedObjectHandler;
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("<br><br><b><font size=+0.9>Test files</font></b><br><br>verification/TestModule/Test/PersistenceCustomFieldsTest.xml<br>")
 */
class PersistenceCustomFieldsTestCest
{
	/**
	  * @param AcceptanceTester $I
	  * @throws \Exception
	  */
	public function _before(AcceptanceTester $I)
	{
		$createData1Fields['firstname'] = "Mac";
		$createData1Fields['lastname'] = "Doe";
		$I->comment("[createData1] create 'DefaultPerson' entity");
		PersistedObjectHandler::getInstance()->createEntity(
			"createData1",
			"hook",
			"DefaultPerson",
			[],
			$createData1Fields
		);

		$createData2Fields['firstname'] = PersistedObjectHandler::getInstance()->retrieveEntityField('createData1', 'firstname', 'hook');
		$I->comment("[createData2] create 'uniqueData' entity");
		PersistedObjectHandler::getInstance()->createEntity(
			"createData2",
			"hook",
			"uniqueData",
			["createData1"],
			$createData2Fields
		);

	}

	/**
	 * @Features({"TestModule"})
	 * @Parameter(name = "AcceptanceTester", value="$I")
	 * @param AcceptanceTester $I
	 * @return void
	 * @throws \Exception
	 */
	public function PersistenceCustomFieldsTest(AcceptanceTester $I)
	{
		$createdDataFields['favoriteIndex'] = "1";
		$createdDataFields['middlename'] = "Kovacs";
		$I->comment("[createdData] create 'simpleData' entity");
		PersistedObjectHandler::getInstance()->createEntity(
			"createdData",
			"test",
			"simpleData",
			[],
			$createdDataFields
		);

		$createdData3Fields['firstname'] = "Takeshi";
		$createdData3Fields['lastname'] = "Kovacs";
		$I->comment("[createdData3] create 'UniquePerson' entity");
		PersistedObjectHandler::getInstance()->createEntity(
			"createdData3",
			"test",
			"UniquePerson",
			["createdData"],
			$createdData3Fields
		);

		$I->comment("Entering Action Group [createdAG] PersistenceActionGroup");
		$createDataAG1CreatedAGFields['firstname'] = "string1";
		$I->comment("[createDataAG1CreatedAG] create 'simpleData' entity");
		PersistedObjectHandler::getInstance()->createEntity(
			"createDataAG1CreatedAG",
			"test",
			"simpleData",
			[],
			$createDataAG1CreatedAGFields
		);

		$createDataAG2CreatedAGFields['firstname'] = "Jane";
		$I->comment("[createDataAG2CreatedAG] create 'simpleData' entity");
		PersistedObjectHandler::getInstance()->createEntity(
			"createDataAG2CreatedAG",
			"test",
			"simpleData",
			[],
			$createDataAG2CreatedAGFields
		);

		$createDataAG3CreatedAGFields['firstname'] = PersistedObjectHandler::getInstance()->retrieveEntityField('createdData3', 'firstname', 'test');
		$I->comment("[createDataAG3CreatedAG] create 'simpleData' entity");
		PersistedObjectHandler::getInstance()->createEntity(
			"createDataAG3CreatedAG",
			"test",
			"simpleData",
			[],
			$createDataAG3CreatedAGFields
		);

		$I->comment("Exiting Action Group [createdAG] PersistenceActionGroup");
	}
}
