mirror of
https://github.com/bdnugget/magento2.git
synced 2026-11-07 09:17:35 +00:00
347 lines
13 KiB
PHP
347 lines
13 KiB
PHP
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
declare(strict_types=1);
|
|
|
|
namespace Magento\AsynchronousOperations\Test\Unit\Model;
|
|
|
|
use Magento\AsynchronousOperations\Api\Data\BulkSummaryInterface;
|
|
use Magento\AsynchronousOperations\Api\Data\OperationInterface;
|
|
use Magento\AsynchronousOperations\Model\BulkStatus;
|
|
use Magento\AsynchronousOperations\Model\BulkStatus\CalculatedStatusSql;
|
|
use Magento\AsynchronousOperations\Model\ResourceModel\Bulk\Collection as BulkCollection;
|
|
use Magento\AsynchronousOperations\Model\ResourceModel\Bulk\CollectionFactory as BulkCollectionFactory;
|
|
use Magento\AsynchronousOperations\Model\ResourceModel\Operation\Collection as OperationCollection;
|
|
use Magento\AsynchronousOperations\Model\ResourceModel\Operation\CollectionFactory as OperationCollectionFactory;
|
|
use Magento\Framework\App\ResourceConnection;
|
|
use Magento\Framework\DB\Adapter\AdapterInterface;
|
|
use Magento\Framework\DB\Select;
|
|
use Magento\Framework\EntityManager\EntityMetadataInterface;
|
|
use Magento\Framework\EntityManager\MetadataPool;
|
|
use PHPUnit\Framework\MockObject\MockObject;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
/**
|
|
* Unit tests for Magento\AsynchronousOperations\Model\BulkStatus class.
|
|
*
|
|
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
|
|
*/
|
|
class BulkStatusTest extends TestCase
|
|
{
|
|
/**
|
|
* @var BulkStatus
|
|
*/
|
|
private $model;
|
|
|
|
/**
|
|
* @var BulkCollectionFactory|MockObject
|
|
*/
|
|
private $bulkCollectionFactory;
|
|
|
|
/**
|
|
* @var OperationCollectionFactory|MockObject
|
|
*/
|
|
private $operationCollectionFactory;
|
|
|
|
/**
|
|
* @var OperationInterface|MockObject
|
|
*/
|
|
private $operationMock;
|
|
|
|
/**
|
|
* @var BulkSummaryInterface|MockObject
|
|
*/
|
|
private $bulkMock;
|
|
|
|
/**
|
|
* @var ResourceConnection|MockObject
|
|
*/
|
|
private $resourceConnectionMock;
|
|
|
|
/**
|
|
* @var CalculatedStatusSql|MockObject
|
|
*/
|
|
private $calculatedStatusSqlMock;
|
|
|
|
/**
|
|
* @var MetadataPool|MockObject
|
|
*/
|
|
private $metadataPoolMock;
|
|
|
|
/**
|
|
* @var EntityMetadataInterface|MockObject
|
|
*/
|
|
private $entityMetadataMock;
|
|
|
|
/**
|
|
* @var AdapterInterface|MockObject
|
|
*/
|
|
private $connectionMock;
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
protected function setUp(): void
|
|
{
|
|
$this->bulkCollectionFactory = $this->createPartialMock(BulkCollectionFactory::class, ['create']);
|
|
$this->operationCollectionFactory = $this->createPartialMock(OperationCollectionFactory::class, ['create']);
|
|
$this->operationMock = $this->createMock(OperationInterface::class);
|
|
$this->bulkMock = $this->createMock(BulkSummaryInterface::class);
|
|
$this->resourceConnectionMock = $this->createMock(ResourceConnection::class);
|
|
$this->calculatedStatusSqlMock = $this->createMock(CalculatedStatusSql::class);
|
|
$this->metadataPoolMock = $this->createMock(MetadataPool::class);
|
|
$this->entityMetadataMock = $this->createMock(EntityMetadataInterface::class);
|
|
$this->connectionMock = $this->createMock(AdapterInterface::class);
|
|
|
|
$this->model = new BulkStatus(
|
|
$this->bulkCollectionFactory,
|
|
$this->operationCollectionFactory,
|
|
$this->resourceConnectionMock,
|
|
$this->calculatedStatusSqlMock,
|
|
$this->metadataPoolMock
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @param int|null $failureType
|
|
* @param array $failureCodes
|
|
*
|
|
* @return void
|
|
* @dataProvider getFailedOperationsByBulkIdDataProvider
|
|
*/
|
|
public function testGetFailedOperationsByBulkId(?int $failureType, array $failureCodes): void
|
|
{
|
|
$bulkUuid = 'bulk-1';
|
|
$operationCollection = $this->createMock(OperationCollection::class);
|
|
$this->operationCollectionFactory->expects($this->once())->method('create')->willReturn($operationCollection);
|
|
$operationCollection
|
|
->method('addFieldToFilter')
|
|
->willReturnCallback(function ($arg1, $arg2) use ($bulkUuid, $operationCollection, $failureCodes) {
|
|
if ($arg1 == 'bulk_uuid' && $arg2 == $bulkUuid) {
|
|
return $operationCollection;
|
|
} elseif ($arg1 == 'status' && $arg2 == $failureCodes) {
|
|
return $operationCollection;
|
|
}
|
|
});
|
|
$operationCollection->expects($this->once())->method('getItems')->willReturn([$this->operationMock]);
|
|
$this->assertEquals([$this->operationMock], $this->model->getFailedOperationsByBulkId($bulkUuid, $failureType));
|
|
}
|
|
|
|
/**
|
|
* @return void
|
|
*/
|
|
public function testGetOperationsCountByBulkIdAndStatus(): void
|
|
{
|
|
$bulkUuid = 'bulk-1';
|
|
$status = 1354;
|
|
$size = 32;
|
|
|
|
$operationCollection = $this->createMock(OperationCollection::class);
|
|
$this->operationCollectionFactory->expects($this->once())->method('create')->willReturn($operationCollection);
|
|
$operationCollection
|
|
->method('addFieldToFilter')
|
|
->willReturnCallback(function ($arg1, $arg2) use ($bulkUuid, $operationCollection, $status) {
|
|
if ($arg1 == 'bulk_uuid' && $arg2 == $bulkUuid) {
|
|
return $operationCollection;
|
|
} elseif ($arg1 == 'status' && $arg2 == $status) {
|
|
return $operationCollection;
|
|
}
|
|
});
|
|
$operationCollection
|
|
->expects($this->once())
|
|
->method('getSize')
|
|
->willReturn($size);
|
|
$this->assertEquals($size, $this->model->getOperationsCountByBulkIdAndStatus($bulkUuid, $status));
|
|
}
|
|
|
|
/**
|
|
* @return void
|
|
*/
|
|
public function testGetOperationsCountByBulkIdAndOpenStatus(): void
|
|
{
|
|
$bulkUuid = 'bulk-2';
|
|
$status = OperationInterface::STATUS_TYPE_OPEN;
|
|
$size = 32;
|
|
|
|
$operationCollection = $this->createMock(OperationCollection::class);
|
|
$this->operationCollectionFactory
|
|
->expects($this->once())
|
|
->method('create')
|
|
->willReturn($operationCollection);
|
|
$operationCollection
|
|
->expects($this->exactly(3))
|
|
->method('addFieldToFilter')
|
|
->willReturnCallback(function ($arg1, $arg2) use ($bulkUuid, $operationCollection, $status) {
|
|
if ($arg1 == 'bulk_uuid' && $arg2 == $bulkUuid) {
|
|
return $operationCollection;
|
|
} elseif ($arg1 == 'status' && $arg2 == $status) {
|
|
return $operationCollection;
|
|
}
|
|
});
|
|
$operationCollection
|
|
->expects($this->exactly(2))
|
|
->method('getSize')
|
|
->willReturn($size);
|
|
$operationCollection
|
|
->expects($this->once())
|
|
->method('clear')
|
|
->willReturnSelf();
|
|
$this->assertEquals($size, $this->model->getOperationsCountByBulkIdAndStatus($bulkUuid, $status));
|
|
}
|
|
|
|
/**
|
|
* @return void
|
|
*/
|
|
public function testGetNotStartedOperationsCountByBulkIdAndOpenStatus(): void
|
|
{
|
|
$bulkUuid = 'bulk-3';
|
|
$bulkOperationCount = 3;
|
|
$status = OperationInterface::STATUS_TYPE_OPEN;
|
|
$size = 0;
|
|
|
|
$operationCollection = $this->createMock(OperationCollection::class);
|
|
$this->operationCollectionFactory
|
|
->expects($this->once())
|
|
->method('create')
|
|
->willReturn($operationCollection);
|
|
$operationCollection
|
|
->expects($this->once())
|
|
->method('addFieldToFilter')
|
|
->with('bulk_uuid', $bulkUuid)
|
|
->willReturnSelf();
|
|
$operationCollection
|
|
->expects($this->once())
|
|
->method('getSize')
|
|
->willReturn($size);
|
|
|
|
$connectionName = 'connection_name';
|
|
$entityType = BulkSummaryInterface::class;
|
|
$this->metadataPoolMock
|
|
->expects($this->once())
|
|
->method('getMetadata')
|
|
->with($entityType)
|
|
->willReturn($this->entityMetadataMock);
|
|
$this->entityMetadataMock
|
|
->expects($this->once())
|
|
->method('getEntityConnectionName')
|
|
->willReturn($connectionName);
|
|
$this->resourceConnectionMock
|
|
->expects($this->once())
|
|
->method('getConnectionByName')
|
|
->with($connectionName)
|
|
->willReturn($this->connectionMock);
|
|
$selectMock = $this->createMock(Select::class);
|
|
$selectMock
|
|
->expects($this->once())
|
|
->method('from')
|
|
->willReturnSelf();
|
|
$selectMock
|
|
->expects($this->once())
|
|
->method('where')
|
|
->with('uuid = ?', $bulkUuid)
|
|
->willReturnSelf();
|
|
$this->connectionMock
|
|
->expects($this->once())
|
|
->method('select')
|
|
->willReturn($selectMock);
|
|
$this->connectionMock
|
|
->expects($this->once())
|
|
->method('fetchOne')
|
|
->with($selectMock)
|
|
->willReturn($bulkOperationCount);
|
|
|
|
$this->assertEquals($bulkOperationCount, $this->model->getOperationsCountByBulkIdAndStatus($bulkUuid, $status));
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public static function getFailedOperationsByBulkIdDataProvider(): array
|
|
{
|
|
return [
|
|
[1, [1]],
|
|
[
|
|
null,
|
|
[
|
|
OperationInterface::STATUS_TYPE_RETRIABLY_FAILED,
|
|
OperationInterface::STATUS_TYPE_NOT_RETRIABLY_FAILED
|
|
]
|
|
]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @return void
|
|
*/
|
|
public function testGetBulksByUser(): void
|
|
{
|
|
$userId = 1;
|
|
$selectMock = $this->createMock(Select::class);
|
|
$bulkCollection = $this->createMock(BulkCollection::class);
|
|
$bulkCollection->expects($this->once())->method('getSelect')->willReturn($selectMock);
|
|
$selectMock->expects($this->once())->method('columns')->willReturnSelf();
|
|
$selectMock->expects($this->once())->method('order')->willReturnSelf();
|
|
$this->bulkCollectionFactory->expects($this->once())->method('create')->willReturn($bulkCollection);
|
|
$bulkCollection->expects($this->once())->method('addFieldToFilter')->with('user_id', $userId)->willReturnSelf();
|
|
$bulkCollection->expects($this->once())->method('getItems')->willReturn([$this->bulkMock]);
|
|
$this->assertEquals([$this->bulkMock], $this->model->getBulksByUser($userId));
|
|
}
|
|
|
|
/**
|
|
* @return void
|
|
*/
|
|
public function testGetBulksStatus(): void
|
|
{
|
|
$bulkUuid = 'bulk-1';
|
|
$allProcessedOperationCollection = $this->createMock(OperationCollection::class);
|
|
$completeOperationCollection = $this->createMock(OperationCollection::class);
|
|
|
|
$connectionName = 'connection_name';
|
|
$entityType = BulkSummaryInterface::class;
|
|
$this->metadataPoolMock
|
|
->expects($this->once())
|
|
->method('getMetadata')
|
|
->with($entityType)
|
|
->willReturn($this->entityMetadataMock);
|
|
$this->entityMetadataMock
|
|
->expects($this->once())
|
|
->method('getEntityConnectionName')
|
|
->willReturn($connectionName);
|
|
$this->resourceConnectionMock
|
|
->expects($this->once())
|
|
->method('getConnectionByName')
|
|
->with($connectionName)
|
|
->willReturn($this->connectionMock);
|
|
|
|
$selectMock = $this->createMock(Select::class);
|
|
$selectMock->expects($this->once())->method('from')->willReturnSelf();
|
|
$selectMock->expects($this->once())->method('where')->with('uuid = ?', $bulkUuid)->willReturnSelf();
|
|
$this->connectionMock->expects($this->once())->method('select')->willReturn($selectMock);
|
|
$this->connectionMock->expects($this->once())->method('fetchOne')->with($selectMock)->willReturn(10);
|
|
|
|
$this->operationCollectionFactory
|
|
->method('create')
|
|
->willReturnOnConsecutiveCalls($allProcessedOperationCollection, $completeOperationCollection);
|
|
$allProcessedOperationCollection
|
|
->expects($this->once())
|
|
->method('addFieldToFilter')
|
|
->with('bulk_uuid', $bulkUuid)
|
|
->willReturnSelf();
|
|
$allProcessedOperationCollection->expects($this->once())->method('getSize')->willReturn(5);
|
|
|
|
$completeOperationCollection
|
|
->method('addFieldToFilter')
|
|
->willReturnCallback(function ($arg1, $arg2) use ($bulkUuid, $completeOperationCollection) {
|
|
if ($arg1 == 'bulk_uuid' && $arg2 == $bulkUuid) {
|
|
return $completeOperationCollection;
|
|
} elseif ($arg1 == 'status' && $arg2 == OperationInterface::STATUS_TYPE_COMPLETE) {
|
|
return $completeOperationCollection;
|
|
}
|
|
});
|
|
$completeOperationCollection->method('getSize')->willReturn(5);
|
|
$this->assertEquals(BulkSummaryInterface::IN_PROGRESS, $this->model->getBulkStatus($bulkUuid));
|
|
}
|
|
}
|