magento2-docker/dev/tests/integration/testsuite/Magento/Swatches/Model/Plugin/EavAttributeTest.php

123 lines
3.6 KiB
PHP
Executable File

<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);
namespace Magento\Swatches\Model\Plugin;
use Magento\Catalog\Api\ProductAttributeRepositoryInterface;
use Magento\Catalog\Model\ResourceModel\Eav\Attribute;
use Magento\Framework\ObjectManagerInterface;
use Magento\Swatches\Model\ResourceModel\Swatch as SwatchResource;
use Magento\Swatches\Model\Swatch;
use Magento\TestFramework\Helper\Bootstrap;
use Magento\TestFramework\Interception\PluginList;
use PHPUnit\Framework\TestCase;
/**
* Checks swatches attribute save behaviour
*
* @see \Magento\Swatches\Model\Plugin\EavAttribute
*
* @magentoAppArea adminhtml
* @magentoDbIsolation disabled
*/
class EavAttributeTest extends TestCase
{
/** @var ObjectManagerInterface */
private $objectManager;
/** @var ProductAttributeRepositoryInterface */
private $productAttributeRepository;
/** @var SwatchResource */
private $swatchResource;
/**
* @inheritdoc
*/
protected function setUp(): void
{
parent::setUp();
$this->objectManager = Bootstrap::getObjectManager();
$this->productAttributeRepository = $this->objectManager->get(ProductAttributeRepositoryInterface::class);
$this->swatchResource = $this->objectManager->get(SwatchResource::class);
}
/**
* @return void
*/
public function testEavAttributePluginIsRegistered(): void
{
$pluginInfo = $this->objectManager->get(PluginList::class)->get(Attribute::class);
$this->assertSame(EavAttribute::class, $pluginInfo['save_swatches_option_params']['instance']);
}
/**
* @magentoDataFixture Magento/Swatches/_files/text_swatch_attribute.php
*
* @return void
*/
public function testChangeAttributeToDropdown(): void
{
$attribute = $this->productAttributeRepository->get('test_configurable');
$options = $attribute->getOptions();
unset($options[0]);
$optionsIds = $this->collectOptionsIds($options);
$attribute->addData($this->prepareOptions($options));
$attribute->setData(Swatch::SWATCH_INPUT_TYPE_KEY, Swatch::SWATCH_INPUT_TYPE_DROPDOWN);
$attribute->beforeSave();
$this->assertEmpty($this->fetchSwatchOptions($optionsIds), 'Swatch options were not deleted');
}
/**
* Prepare options
*
* @param array $options
* @return array
*/
private function prepareOptions(array $options): array
{
foreach ($options as $key => $option) {
$preparedOptions['option']['order'][$option->getValue()] = $key;
$preparedOptions['option']['value'][$option->getValue()] = [$option->getLabel()];
$preparedOptions['option']['delete'][$option->getValue()] = '';
}
return $preparedOptions ?? [];
}
/**
* Collect options ids
*
* @param array $options
* @return array
*/
private function collectOptionsIds(array $options): array
{
foreach ($options as $option) {
$optionsIds[] = $option->getValue();
}
return $optionsIds ?? [];
}
/**
* Fetch related to provided ids records from eav_attribute_option_swatch table
*
* @param $optionsIds
* @return array
*/
private function fetchSwatchOptions(array $optionsIds): array
{
$connection = $this->swatchResource->getConnection();
$select = $connection->select()->from(['main_table' => $this->swatchResource->getMainTable()])
->where('main_table.option_id IN (?)', $optionsIds);
return $connection->fetchAll($select);
}
}