119 lines
3.3 KiB
PHP
Executable File
119 lines
3.3 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
|
|
namespace Magento\TestFramework;
|
|
|
|
/**
|
|
* Class that implements CRUD tests for \Magento\Framework\Model\AbstractModel based objects
|
|
*/
|
|
class Entity
|
|
{
|
|
/**
|
|
* @var \Magento\Framework\Model\AbstractModel
|
|
*/
|
|
protected $_model;
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $_updateData;
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
protected $_modelClass;
|
|
|
|
/**
|
|
* @param \Magento\Framework\Model\AbstractModel $model
|
|
* @param array $updateData
|
|
* @param string|null $modelClass Class of a model to use when creating new instances, or NULL for auto-detection
|
|
* @throws \InvalidArgumentException
|
|
*/
|
|
public function __construct(\Magento\Framework\Model\AbstractModel $model, array $updateData, $modelClass = null)
|
|
{
|
|
$this->_model = $model;
|
|
$this->_updateData = $updateData;
|
|
if ($modelClass) {
|
|
if (!$model instanceof $modelClass) {
|
|
throw new \InvalidArgumentException("Class '$modelClass' is irrelevant to the tested model.");
|
|
}
|
|
$this->_modelClass = $modelClass;
|
|
} else {
|
|
$this->_modelClass = get_class($this->_model);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test Create -> Read -> Update -> Delete operations
|
|
*/
|
|
public function testCrud()
|
|
{
|
|
$this->_testCreate();
|
|
try {
|
|
$this->_testRead();
|
|
$this->_testUpdate();
|
|
$this->_testDelete();
|
|
} catch (\Exception $e) {
|
|
$this->_model->delete();
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Retrieve new instance of not yet loaded model
|
|
*
|
|
* @return \Magento\Framework\Model\AbstractModel
|
|
*/
|
|
protected function _getEmptyModel()
|
|
{
|
|
return \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create($this->_modelClass);
|
|
}
|
|
|
|
protected function _testCreate()
|
|
{
|
|
if ($this->_model->getId()) {
|
|
\PHPUnit\Framework\Assert::fail("Can't run creation test for models with defined id");
|
|
}
|
|
$this->_model->save();
|
|
\PHPUnit\Framework\Assert::assertNotEmpty($this->_model->getId(), 'CRUD Create error');
|
|
}
|
|
|
|
protected function _testRead()
|
|
{
|
|
$model = $this->_getEmptyModel();
|
|
$model->load($this->_model->getId());
|
|
\PHPUnit\Framework\Assert::assertEquals($this->_model->getId(), $model->getId(), 'CRUD Read error');
|
|
}
|
|
|
|
protected function _testUpdate()
|
|
{
|
|
foreach ($this->_updateData as $key => $value) {
|
|
$this->_model->setDataUsingMethod($key, $value);
|
|
}
|
|
$this->_model->save();
|
|
|
|
$model = $this->_getEmptyModel();
|
|
$model->load($this->_model->getId());
|
|
foreach ($this->_updateData as $key => $value) {
|
|
\PHPUnit\Framework\Assert::assertEquals(
|
|
$value,
|
|
$model->getDataUsingMethod($key),
|
|
'CRUD Update "' . $key . '" error'
|
|
);
|
|
}
|
|
}
|
|
|
|
protected function _testDelete()
|
|
{
|
|
$modelId = $this->_model->getId();
|
|
$this->_model->delete();
|
|
|
|
$model = $this->_getEmptyModel();
|
|
$model->load($modelId);
|
|
\PHPUnit\Framework\Assert::assertEmpty($model->getId(), 'CRUD Delete error');
|
|
}
|
|
}
|