<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);
namespace Magento\Bundle\Test\Fixture;
use Magento\Framework\DataObject;
use Magento\Sales\Api\OrderRepositoryInterface;
use Magento\TestFramework\Fixture\Api\DataMerger;
use Magento\TestFramework\Fixture\Api\ServiceFactory;
use Magento\TestFramework\Fixture\Data\ProcessorInterface;
use Magento\TestFramework\Fixture\RevertibleDataFixtureInterface;
class OrderItem implements RevertibleDataFixtureInterface
{
private const DEFAULT_DATA = [
'items' => [
['sku' => '%uniqid%']
],
'payment'=> [ 'method' => 'checkmo']
];
/**
* @var ServiceFactory
*/
private ServiceFactory $serviceFactory;
/**
* @var ProcessorInterface
*/
private ProcessorInterface $dataProcessor;
/**
* @var DataMerger
*/
private DataMerger $dataMerger;
/**
* @param ServiceFactory $serviceFactory
* @param ProcessorInterface $dataProcessor
* @param DataMerger $dataMerger
*/
public function __construct(
ServiceFactory $serviceFactory,
ProcessorInterface $dataProcessor,
DataMerger $dataMerger
) {
$this->serviceFactory = $serviceFactory;
$this->dataProcessor = $dataProcessor;
$this->dataMerger = $dataMerger;
}
/**
* @param array $data
* @return DataObject|null
*/
public function apply(array $data = []): ?DataObject
{
$service = $this->serviceFactory->create(OrderRepositoryInterface::class, 'save');
return $service->execute(['entity' => $this->prepareData($data)]);
}
/**
* @inheritdoc
*/
public function revert(DataObject $data): void
{
$service = $this->serviceFactory->create(OrderRepositoryInterface::class, 'delete');
$service->execute(['entity' => $data]);
}
/**
* Prepare product data
*
* @param array $data
* @return array
*/
private function prepareData(array $data): array
{
$data = $this->dataMerger->merge(self::DEFAULT_DATA, $data, false);
return $this->dataProcessor->process($this, $data);
}
}
|