Example #1
0
 public function testIsModified()
 {
     $entityId = 1;
     $data = ['id' => $entityId, 'name' => 'test', 'description' => '', 'custom_not_present_attribute' => ''];
     $fields = ['id' => [], 'name' => [], 'description' => []];
     $modifiedData = array_merge($data, ['name' => 'newName']);
     $this->model->expects($this->any())->method('getId')->willReturn($entityId);
     $this->entityMetadata->expects($this->exactly(2))->method('getFields')->with($this->model)->willReturn($fields);
     $this->model->setData($data);
     $this->entitySnapshot->registerSnapshot($this->model);
     $this->model->setData($modifiedData);
     $this->assertTrue($this->entitySnapshot->isModified($this->model));
     $this->entitySnapshot->registerSnapshot($this->model);
     $this->assertFalse($this->entitySnapshot->isModified($this->model));
 }
Example #2
0
 /**
  * @inheritdoc
  */
 public function save(\Magento\Framework\Model\AbstractModel $object)
 {
     /**
      * Direct deleted items to delete method
      */
     if ($object->isDeleted()) {
         return $this->delete($object);
     }
     $this->beginTransaction();
     try {
         if (!$this->isModified($object)) {
             $this->entityRelationComposite->processRelations($object);
             $this->commit();
             return $this;
         }
         $object->validateBeforeSave();
         $object->beforeSave();
         if ($object->isSaveAllowed()) {
             if (!$this->isPartialSave()) {
                 $this->loadAllAttributes($object);
             }
             if ($this->getEntityTable() == \Magento\Eav\Model\Entity::DEFAULT_ENTITY_TABLE && !$object->getEntityTypeId()) {
                 $object->setEntityTypeId($this->getTypeId());
             }
             $object->setParentId((int) $object->getParentId());
             $this->objectRelationProcessor->validateDataIntegrity($this->getEntityTable(), $object->getData());
             $this->_beforeSave($object);
             $this->_processSaveData($this->_collectSaveData($object));
             $this->_afterSave($object);
             $this->entitySnapshot->registerSnapshot($object);
             $object->afterSave();
             $this->entityRelationComposite->processRelations($object);
         }
         $this->addCommitCallback([$object, 'afterCommitCallback'])->commit();
         $object->setHasDataChanges(false);
     } catch (\Exception $e) {
         $this->rollBack();
         $object->setHasDataChanges(true);
         throw $e;
     }
     return $this;
 }
Example #3
0
 /**
  * @inheritdoc
  */
 protected function beforeAddLoadedItem(\Magento\Framework\Object $item)
 {
     $this->entitySnapshot->registerSnapshot($item);
     return $item;
 }