123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Framework\Model\Test\Unit\ResourceModel;
- use Magento\Framework\DataObject;
- use Magento\Framework\DB\Adapter\AdapterInterface;
- use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
- use Magento\Framework\Serialize\Serializer\Json;
- class AbstractResourceTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @var AbstractResourceStub
- */
- private $abstractResource;
- /**
- * @var Json|\PHPUnit_Framework_MockObject_MockObject
- */
- private $serializerMock;
- /**
- * @var \Psr\Log\LoggerInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $loggerMock;
- protected function setUp()
- {
- $objectManager = new ObjectManager($this);
- $this->serializerMock = $this->createMock(Json::class);
- $this->loggerMock = $this->createMock(\Psr\Log\LoggerInterface::class);
- $this->abstractResource = $objectManager->getObject(AbstractResourceStub::class);
- $objectManager->setBackwardCompatibleProperty($this->abstractResource, 'serializer', $this->serializerMock);
- $objectManager->setBackwardCompatibleProperty($this->abstractResource, '_logger', $this->loggerMock);
- }
- /**
- * @param array $arguments
- * @param string $expected
- * @param array|string|int $serializeCalledWith
- * @param int $numSerializeCalled
- * @dataProvider serializeFieldsDataProvider
- */
- public function testSerializeFields(
- array $arguments,
- $expected,
- $serializeCalledWith,
- $numSerializeCalled = 1
- ) {
- /** @var DataObject $dataObject */
- list($dataObject, $field, $defaultValue, $unsetEmpty) = $arguments;
- $this->serializerMock->expects($this->exactly($numSerializeCalled))
- ->method('serialize')
- ->with($serializeCalledWith)
- ->willReturn($expected);
- $this->abstractResource->_serializeField($dataObject, $field, $defaultValue, $unsetEmpty);
- $this->assertEquals($expected, $dataObject->getData($field));
- }
- /**
- * @return array
- */
- public function serializeFieldsDataProvider()
- {
- $array = ['a', 'b', 'c'];
- $string = 'i am string';
- $integer = 969;
- $empty = '';
- $dataObject = new DataObject(
- [
- 'array' => $array,
- 'string' => $string,
- 'integer' => $integer,
- 'empty' => $empty,
- 'empty_with_default' => ''
- ]
- );
- return [
- [
- [$dataObject, 'array', null, false],
- '["a","b","c"]',
- $array
- ],
- [
- [$dataObject, 'string', null, false],
- '"i am string"',
- $string
- ],
- [
- [$dataObject, 'integer', null, false],
- '969',
- $integer
- ],
- [
- [$dataObject, 'empty', null, true],
- null,
- $empty,
- 0
- ],
- [
- [$dataObject, 'empty_with_default', 'default', false],
- '"default"',
- 'default'
- ]
- ];
- }
- /**
- * @param array $arguments
- * @param array|string|int|boolean $expected
- * @dataProvider unserializeFieldsDataProvider
- */
- public function testUnserializeFields(array $arguments, $expected)
- {
- /** @var DataObject $dataObject */
- list($dataObject, $field, $defaultValue) = $arguments;
- $this->serializerMock->expects($this->once())
- ->method('unserialize')
- ->with($dataObject->getData($field))
- ->willReturn($expected);
- $this->abstractResource->_unserializeField($dataObject, $field, $defaultValue);
- $this->assertEquals($expected, $dataObject->getData($field));
- }
- /**
- * @return array
- */
- public function unserializeFieldsDataProvider()
- {
- $dataObject = new DataObject(
- [
- 'array' => '["a","b","c"]',
- 'string' => '"i am string"',
- 'integer' => '969',
- 'empty_with_default' => '""',
- 'not_serialized_string' => 'i am string',
- 'serialized_boolean_false' => 'false'
- ]
- );
- return [
- [
- [$dataObject, 'array', null],
- ['a', 'b', 'c']
- ],
- [
- [$dataObject, 'string', null],
- 'i am string'
- ],
- [
- [$dataObject, 'integer', null],
- 969
- ],
- [
- [$dataObject, 'empty_with_default', 'default', false],
- 'default'
- ],
- [
- [$dataObject, 'not_serialized_string', null],
- 'i am string'
- ],
- [
- [$dataObject, 'serialized_boolean_false', null],
- false,
- ]
- ];
- }
-
- public function testCommitZeroLevel()
- {
- /** @var AdapterInterface|\PHPUnit_Framework_MockObject_MockObject $connection */
- $connection = $this->createMock(AdapterInterface::class);
- /** @var DataObject|\PHPUnit_Framework_MockObject_MockObject $closureExpectation */
- $closureExpectation = $this->getMockBuilder(DataObject::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->abstractResource->setConnection($connection);
- $this->abstractResource->addCommitCallback(
- function () use ($closureExpectation) {
- $closureExpectation->setData(1);
- }
- );
- $this->abstractResource->addCommitCallback(
- function () use ($closureExpectation) {
- $closureExpectation->getData();
- }
- );
- $connection->expects($this->once())
- ->method('commit');
- $connection->expects($this->once())
- ->method('getTransactionLevel')
- ->willReturn(0);
- $closureExpectation->expects($this->once())
- ->method('setData')
- ->with(1);
- $closureExpectation->expects($this->once())
- ->method('getData');
- $this->abstractResource->commit();
- }
- public function testCommitZeroLevelCallbackException()
- {
- /** @var AdapterInterface|\PHPUnit_Framework_MockObject_MockObject $connection */
- $connection = $this->createMock(AdapterInterface::class);
- $this->abstractResource->setConnection($connection);
- $this->abstractResource->addCommitCallback(
- function () {
- throw new \Exception();
- }
- );
- $connection->expects($this->once())
- ->method('commit');
- $connection->expects($this->once())
- ->method('getTransactionLevel')
- ->willReturn(0);
- $this->loggerMock->expects($this->once())
- ->method('critical');
- $this->abstractResource->commit();
- }
- public function testCommitNotCompletedTransaction()
- {
- /** @var AdapterInterface|\PHPUnit_Framework_MockObject_MockObject $connection */
- $connection = $this->createMock(AdapterInterface::class);
- /** @var DataObject|\PHPUnit_Framework_MockObject_MockObject $closureExpectation */
- $closureExpectation = $this->getMockBuilder(DataObject::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->abstractResource->setConnection($connection);
- $this->abstractResource->addCommitCallback(
- function () use ($closureExpectation) {
- $closureExpectation->setData(1);
- }
- );
- $connection->expects($this->once())
- ->method('commit');
- $connection->expects($this->once())
- ->method('getTransactionLevel')
- ->willReturn(1);
- $closureExpectation->expects($this->never())
- ->method('setData')
- ->with(1);
- $this->abstractResource->commit();
- }
- }
|