111 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
declare(strict_types=1);
 | 
						|
 | 
						|
namespace Magento\AsynchronousOperations\Cron;
 | 
						|
 | 
						|
use Magento\AsynchronousOperations\Api\Data\OperationInterface;
 | 
						|
use Magento\AsynchronousOperations\Api\Data\OperationInterfaceFactory;
 | 
						|
use Magento\AsynchronousOperations\Api\SaveMultipleOperationsInterface;
 | 
						|
use Magento\AsynchronousOperations\Model\ResourceModel\Operation\Collection;
 | 
						|
use Magento\AsynchronousOperations\Model\ResourceModel\Operation\CollectionFactory;
 | 
						|
use Magento\Framework\App\ResourceConnection;
 | 
						|
use Magento\Framework\Bulk\BulkManagementInterface;
 | 
						|
use Magento\Framework\Serialize\Serializer\Json;
 | 
						|
use Magento\TestFramework\Helper\Bootstrap;
 | 
						|
use PHPUnit\Framework\TestCase;
 | 
						|
 | 
						|
/**
 | 
						|
 * Test for MarkIncompleteOperationsAsFailed
 | 
						|
 *
 | 
						|
 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
 | 
						|
 */
 | 
						|
class MarkIncompleteOperationsAsFailedTest extends TestCase
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @var MarkIncompleteOperationsAsFailed
 | 
						|
     */
 | 
						|
    private $model;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @inheritdoc
 | 
						|
     */
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        parent::setUp();
 | 
						|
        $objectManager = Bootstrap::getObjectManager();
 | 
						|
        $this->model = $objectManager->create(MarkIncompleteOperationsAsFailed::class);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoDbIsolation enabled
 | 
						|
     */
 | 
						|
    public function testExecute(): void
 | 
						|
    {
 | 
						|
        $objectManager = Bootstrap::getObjectManager();
 | 
						|
        $jsonSerializer = $objectManager->get(Json::class);
 | 
						|
        $resource = $objectManager->get(ResourceConnection::class);
 | 
						|
        $topicName = 'topic_name_1';
 | 
						|
        $buuid = uniqid('bulk-');
 | 
						|
        $startedAt = $resource->getConnection()->formatDate(new \DateTime('-14 hours', new \DateTimeZone('UTC')));
 | 
						|
        $operationsData = [
 | 
						|
            [
 | 
						|
                OperationInterface::ID => 0,
 | 
						|
                OperationInterface::STATUS => OperationInterface::STATUS_TYPE_COMPLETE,
 | 
						|
                'started_at' => $startedAt,
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                OperationInterface::ID => 1,
 | 
						|
                OperationInterface::STATUS => OperationInterface::STATUS_TYPE_OPEN,
 | 
						|
                'started_at' => $startedAt,
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                OperationInterface::ID => 2,
 | 
						|
                OperationInterface::STATUS => OperationInterface::STATUS_TYPE_NOT_RETRIABLY_FAILED,
 | 
						|
                'started_at' => $startedAt,
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                OperationInterface::ID => 3,
 | 
						|
                OperationInterface::STATUS => OperationInterface::STATUS_TYPE_OPEN,
 | 
						|
                'started_at' => null,
 | 
						|
            ]
 | 
						|
        ];
 | 
						|
        $operationFactory = $objectManager->get(OperationInterfaceFactory::class);
 | 
						|
        $operations = [];
 | 
						|
        foreach ($operationsData as $data) {
 | 
						|
            $data += [
 | 
						|
                OperationInterface::BULK_ID => $buuid,
 | 
						|
                OperationInterface::TOPIC_NAME => $topicName,
 | 
						|
                OperationInterface::SERIALIZED_DATA => $jsonSerializer->serialize([]),
 | 
						|
            ];
 | 
						|
            $operations[] = $operationFactory->create(['data' => $data]);
 | 
						|
        }
 | 
						|
        $bulkManagement = $objectManager->get(BulkManagementInterface::class);
 | 
						|
        $saveMultipleOperations = $objectManager->get(SaveMultipleOperationsInterface::class);
 | 
						|
        $bulkManagement->scheduleBulk($buuid, [], 'test bulk');
 | 
						|
        $saveMultipleOperations->execute($operations);
 | 
						|
 | 
						|
        $this->model->execute();
 | 
						|
 | 
						|
        $operationCollectionFactory = $objectManager->get(CollectionFactory::class);
 | 
						|
        /** @var Collection $collection */
 | 
						|
        $collection = $operationCollectionFactory->create();
 | 
						|
        $collection->addFieldToFilter(
 | 
						|
            OperationInterface::BULK_ID,
 | 
						|
            ['eq' => $buuid]
 | 
						|
        );
 | 
						|
        $collection->addFieldToFilter(
 | 
						|
            OperationInterface::STATUS,
 | 
						|
            ['eq' => OperationInterface::STATUS_TYPE_RETRIABLY_FAILED]
 | 
						|
        );
 | 
						|
        $this->assertEquals(1, $collection->count());
 | 
						|
        $operation = $collection->getFirstItem();
 | 
						|
        $this->assertEquals(1, $operation->getId());
 | 
						|
        $this->assertEquals(0, $operation->getErrorCode());
 | 
						|
        $this->assertEquals('Unknown Error', $operation->getResultMessage());
 | 
						|
    }
 | 
						|
}
 |