Viewing File: /home/maglabs/it/app/code/Magento/Widget/Test/Unit/Model/ResourceModel/Layout/AbstractTestCase.php
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);
namespace Magento\Widget\Test\Unit\Model\ResourceModel\Layout;
use Magento\Framework\DB\Adapter\Pdo\Mysql;
use Magento\Framework\DB\Select;
use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
use Magento\Widget\Model\ResourceModel\Layout\Update\Collection;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
abstract class AbstractTestCase extends TestCase
{
/**
* Test 'where' condition for assertion
*/
const TEST_WHERE_CONDITION = 'condition = 1';
/**
* Test interval in days
*/
const TEST_DAYS_BEFORE = 3;
/**
* @var Collection
*/
protected $_collection;
/**
* Name of main table alias
*
* @var string
*/
protected $_tableAlias = 'main_table';
/**
* Expected conditions for testAddUpdatedDaysBeforeFilter
*
* @var array
*/
protected $_expectedConditions = [];
protected function setUp(): void
{
$this->_expectedConditions = [
'counter' => 0,
'data' => [
0 => [$this->_tableAlias . '.updated_at', ['notnull' => true]],
1 => [$this->_tableAlias . '.updated_at', ['lt' => 'date']],
],
];
}
/**
* Retrieve resource model instance
*
* @param Select $select
* @return MockObject
*/
protected function _getResource(Select $select)
{
$connection = $this->createMock(Mysql::class);
$connection->expects($this->once())->method('select')->willReturn($select);
$connection->expects($this->any())->method('quoteIdentifier')->willReturnArgument(0);
$resource = $this->getMockForAbstractClass(
AbstractDb::class,
[],
'',
false,
true,
true,
['getConnection', 'getMainTable', 'getTable', '__wakeup']
);
$resource->expects($this->any())->method('getConnection')->willReturn($connection);
$resource->expects($this->any())->method('getTable')->willReturnArgument(0);
return $resource;
}
/**
* @abstract
* @param Select $select
* @return AbstractCollection
*/
abstract protected function _getCollection(Select $select);
public function testAddUpdatedDaysBeforeFilter()
{
$select = $this->createMock(Select::class);
$select->expects($this->any())->method('where')->with(self::TEST_WHERE_CONDITION);
$collection = $this->_getCollection($select);
/** @var \PHPUnit\Framework\MockObject\MockObject $connection */
$connection = $collection->getResource()->getConnection();
$connection->expects(
$this->any()
)->method(
'prepareSqlCondition'
)->willReturnCallback(
[$this, 'verifyPrepareSqlCondition']
);
// expected date without time
$datetime = new \DateTime('now', new \DateTimeZone('UTC'));
$storeInterval = new \DateInterval('P' . self::TEST_DAYS_BEFORE . 'D');
$datetime->sub($storeInterval);
$dateTimeLib = new \Magento\Framework\Stdlib\DateTime();
$expectedDate = $dateTimeLib->formatDate($datetime->getTimestamp());
$this->_expectedConditions['data'][1][1]['lt'] = $expectedDate;
$collection->addUpdatedDaysBeforeFilter(self::TEST_DAYS_BEFORE);
}
/**
* Assert SQL condition
*
* @param string $fieldName
* @param array $condition
* @return string
*/
public function verifyPrepareSqlCondition($fieldName, $condition)
{
$counter = $this->_expectedConditions['counter'];
$data = $this->_expectedConditions['data'][$counter];
$this->_expectedConditions['counter']++;
$this->assertEquals($data[0], $fieldName);
$this->assertCount(1, $data[1]);
$key = array_keys($data[1]);
$key = reset($key);
$value = reset($data[1]);
$this->assertArrayHasKey($key, $condition);
if ($key == 'lt') {
$this->assertStringContainsString($value, $condition[$key]);
} else {
$this->assertContains($value, $condition);
}
return self::TEST_WHERE_CONDITION;
}
}
Back to Directory
File Manager