Skip to content

Commit

Permalink
Merge remote-tracking branches 'local/ACP2E-1214', 'local/ACP2E-1223'…
Browse files Browse the repository at this point in the history
… and 'local/ACP2E-1296' into PR_combine
  • Loading branch information
o-dubovyk committed Nov 5, 2022
4 parents 18bdb6a + e5df77c + 74e6857 + 0d90748 commit 4670034
Show file tree
Hide file tree
Showing 8 changed files with 251 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,9 @@ public function modifyPrice(IndexTableStructure $priceTable, array $entityIds =
foreach ($this->getBundleIds($entityIds) as $entityId) {
$entityId = (int) $entityId;
foreach ($this->getWebsiteIdsOfProduct($entityId) as $websiteId) {
$websiteId = (int) $websiteId;
$productIdsDisabledRequired = $this->selectionProductsDisabledRequired
->getChildProductIds($entityId, (int)$websiteId);
->getChildProductIds($entityId, $websiteId);
if ($productIdsDisabledRequired) {
$connection = $this->resourceConnection->getConnection('indexer');
$select = $connection->select();
Expand Down Expand Up @@ -118,9 +119,8 @@ private function getWebsiteIdsOfProduct(int $entityId): array
['product_in_websites' => $this->resourceConnection->getTableName('catalog_product_website')],
['website_id']
)->where('product_in_websites.product_id = ?', $entityId);
foreach ($connection->fetchCol($select) as $websiteId) {
$this->websiteIdsOfProduct[$entityId][] = (int)$websiteId;
}
$this->websiteIdsOfProduct[$entityId] = $connection->fetchCol($select);

return $this->websiteIdsOfProduct[$entityId];
}

Expand Down
4 changes: 2 additions & 2 deletions app/code/Magento/Reports/Block/Adminhtml/Filter/Form.php
Original file line number Diff line number Diff line change
Expand Up @@ -201,8 +201,8 @@ protected function _initFormValues()
{
$data = $this->getFilterData()->getData();
foreach ($data as $key => $value) {
if (is_array($value) && isset($value[0])) {
$data[$key] = explode(',', $value[0]);
if (is_array($value) && count($value) === 1) {
$data[$key] = explode(',', reset($value));
}
}
$this->getForm()->addValues($data);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -211,9 +211,11 @@ protected function _addCustomFilter($collection, $filterData)
{
if ($filterData->getPriceRuleType()) {
$rulesList = $filterData->getData('rules_list');
if (isset($rulesList[0])) {
$rulesIds = explode(',', $rulesList[0]);
$collection->addRuleFilter($rulesIds);
if (is_array($rulesList) && count($rulesList) > 0) {
if (count($rulesList) === 1) {
$rulesList = explode(',', reset($rulesList));
}
$collection->addRuleFilter($rulesList);
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\Reports\Test\Unit\Block\Adminhtml\Filter;

use Magento\Backend\Block\Template\Context;
use Magento\Framework\Data\Form;
use Magento\Framework\Data\Form\Element\AbstractElement;
use Magento\Framework\Data\Form\Element\Collection;
use Magento\Framework\Data\FormFactory;
use Magento\Framework\DataObject;
use Magento\Framework\Registry;
use Magento\Framework\UrlInterface;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
use ReflectionClass;

class FormTest extends TestCase
{
/**
* @var Context|MockObject
*/
private $context;

/**
* @var Registry|MockObject
*/
private $registry;

/**
* @var FormFactory|MockObject
*/
private $formFactory;

/**
* @var \Magento\Reports\Block\Adminhtml\Filter\Form
*/
private $model;

/**
* @inheritdoc
*/
protected function setUp(): void
{
parent::setUp();
$this->context = $this->createMock(Context::class);
$this->registry = $this->createMock(Registry::class);
$this->formFactory = $this->createMock(FormFactory::class);
$this->context->method('getUrlBuilder')
->willReturn($this->getMockForAbstractClass(UrlInterface::class));
$this->model = new \Magento\Reports\Block\Adminhtml\Filter\Form(
$this->context,
$this->registry,
$this->formFactory
);
}

/**
* @return void
* @throws \ReflectionException
*/
public function testMultiselectInitialValues(): void
{
$this->context->method('getUrlBuilder')
->willReturn($this->getMockForAbstractClass(UrlInterface::class));
$this->model->setData('filter_data', new DataObject(['multiselect' => ['5', '6']]));
$form = $this->getMockBuilder(Form::class)
->disableOriginalConstructor()
->onlyMethods(['getElements'])
->getMockForAbstractClass();
$element = $this->getMockBuilder(AbstractElement::class)
->disableOriginalConstructor()
->getMockForAbstractClass();

$element->setId('multiselect');
$form->method('getElements')->willReturn(new Collection($form));
$reflection = new ReflectionClass($form);
$reflectionProp = $reflection->getProperty('_allElements');
$reflectionProp->setAccessible(true);
$reflectionProp->setValue($form, new Collection($form));
$form->addElement($element);
$this->model->setForm($form);
$reflection = new ReflectionClass($this->model);
$reflectionMethod = $reflection->getMethod('_initFormValues');
$reflectionMethod->setAccessible(true);
$reflectionMethod->invoke($this->model);
$this->assertEquals(['5', '6'], $this->model->getForm()->getElement('multiselect')->getValue());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -67,32 +67,37 @@ protected function setUp(): void
* @dataProvider getCountTotalsDataProvider
*
* @param string $reportType
* @param int $priceRuleType
* @param array|null $rulesList
* @param int $collectionSize
* @param bool $expectedCountTotals
* @param array|null $expectedRuleFilter
* @return void
*/
public function testGetCountTotals(
string $reportType,
int $priceRuleType,
?array $rulesList,
int $collectionSize,
bool $expectedCountTotals
bool $expectedCountTotals,
?array $expectedRuleFilter = null
): void {
$filterData = new DataObject();
$filterData->setData('report_type', $reportType);
$filterData->setData('period_type', 'day');
$filterData->setData('from', '2000-01-01');
$filterData->setData('to', '2000-01-30');
$filterData->setData('store_ids', '1');
$filterData->setData('price_rule_type', $priceRuleType);
if ($priceRuleType) {
$filterData->setData('rules_list', ['0,1']);
}
$filterData->setData('price_rule_type', $rulesList !== null);
$filterData->setData('rules_list', $rulesList);
$filterData->setData('order_statuses', 'statuses');
$this->model->setFilterData($filterData);

$resourceCollectionName = $this->model->getResourceCollectionName();
$collectionMock = $this->buildBaseCollectionMock($filterData, $resourceCollectionName, $collectionSize);
$collectionMock = $this->buildBaseCollectionMock(
$filterData,
$resourceCollectionName,
$collectionSize,
$expectedRuleFilter
);

$store = $this->getMockBuilder(StoreInterface::class)
->getMock();
Expand All @@ -111,23 +116,26 @@ public function testGetCountTotals(
public function getCountTotalsDataProvider(): array
{
return [
['created_at_shipment', 0, 0, false],
['created_at_shipment', 0, 1, true],
['updated_at_order', 0, 1, true],
['updated_at_order', 1, 1, true],
['created_at_shipment', null, 0, false],
['created_at_shipment', null, 1, true],
['updated_at_order', null, 1, true],
['updated_at_order', ['1,2'], 1, true, ['1', '2']],
['updated_at_order', ['1', '2'], 1, true, ['1', '2']],
];
}

/**
* @param \Magento\Framework\DataObject $filterData
* @param DataObject $filterData
* @param string $resourceCollectionName
* @param int $collectionSize
* @param array|null $ruleFilter
* @return MockObject
*/
private function buildBaseCollectionMock(
DataObject $filterData,
string $resourceCollectionName,
int $collectionSize
int $collectionSize,
?array $ruleFilter
): MockObject {
$collectionMock = $this->getMockBuilder($resourceCollectionName)
->disableOriginalConstructor()
Expand Down Expand Up @@ -159,7 +167,7 @@ private function buildBaseCollectionMock(
if ($filterData->getData('price_rule_type')) {
$collectionMock->expects($this->once())
->method('addRuleFilter')
->with(\explode(',', $filterData->getData('rules_list')[0]))
->with($ruleFilter)
->willReturnSelf();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,10 @@ public function execute()
} catch (LocalizedException $e) {
$this->messageManager->addErrorMessage($e->getMessage());
} catch (\Exception $e) {
$this->messageManager->addExceptionMessage($e, __('Something went wrong while deleting these records.'));
$this->messageManager->addExceptionMessage(
$e,
__('Something went wrong while deleting these records.')
);
}
}
/** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
Expand Down Expand Up @@ -123,6 +126,7 @@ private function getCollection(): Collection
->getIdFieldName(),
$this->getRequest()->getParam('reviews')
);
$collection->addStoreData();

$this->collection = $collection;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\Review\Test\Unit\Controller\Adminhtml\Product;

use Magento\Backend\App\Action\Context;
use Magento\Framework\App\RequestInterface;
use Magento\Framework\Controller\Result\Redirect;
use Magento\Framework\Controller\ResultFactory;
use Magento\Framework\Message\ManagerInterface;
use Magento\Framework\Registry;
use Magento\Review\Controller\Adminhtml\Product\MassDelete;
use Magento\Review\Model\RatingFactory;
use Magento\Review\Model\ResourceModel\Review as ReviewResourceModel;
use Magento\Review\Model\ResourceModel\Review\Collection as ReviewCollection;
use Magento\Review\Model\ResourceModel\Review\CollectionFactory as ReviewCollectionFactory;
use Magento\Review\Model\ReviewFactory;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;

class MassDeleteTest extends TestCase
{
/**
* @var MassDelete
*/
private $massDelete;

/**
* @var RequestInterface|MockObject
*/
private $requestMock;

/**
* @var ReviewCollectionFactory|MockObject
*/
private $collectionFactoryMock;

/**
* @inheritdoc
*/
protected function setUp(): void
{
$contextMock = $this->createMock(Context::class);
$this->requestMock = $this->createMock(RequestInterface::class);
$contextMock->method('getRequest')
->willReturn($this->requestMock);
$messageManagerMock = $this->createMock(ManagerInterface::class);
$contextMock->method('getMessageManager')
->willReturn($messageManagerMock);
$resultFactoryMock = $this->createMock(ResultFactory::class);
$contextMock->method('getResultFactory')
->willReturn($resultFactoryMock);
$resultMock = $this->createMock(Redirect::class);
$resultFactoryMock->method('create')
->willReturn($resultMock);

$coreRegistryMock = $this->createMock(Registry::class);
$reviewFactoryMock = $this->createMock(ReviewFactory::class);
$ratingFactoryMock = $this->createMock(RatingFactory::class);
$this->collectionFactoryMock = $this->createMock(ReviewCollectionFactory::class);

$this->massDelete = new MassDelete(
$contextMock,
$coreRegistryMock,
$reviewFactoryMock,
$ratingFactoryMock,
$this->collectionFactoryMock
);
}

public function testExecute(): void
{
$this->requestMock->expects(self::atLeastOnce())
->method('getParam')
->willReturnMap(
[
['reviews', null, [10, 20]],
['ret', 'index', 'index'],
]
);

$collectionMock = $this->createMock(ReviewCollection::class);
$this->collectionFactoryMock->expects(self::once())
->method('create')
->willReturn($collectionMock);
$resource = $this->createMock(ReviewResourceModel::class);
$collectionMock->method('getResource')
->willReturn($resource);
$resource->method('getIdFieldName')
->willReturn('id');
$collectionMock->expects(self::once())
->method('addFieldToFilter')
->with('main_table.id', [10, 20])
->willReturnSelf();
$collectionMock->expects(self::once())
->method('addStoreData')
->willReturnSelf();

$this->massDelete->execute();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

namespace Magento\Bundle\Model\ResourceModel\Indexer;

use Magento\Bundle\Test\Fixture\Product as BundleProductFixture;
use Magento\Catalog\Api\ProductRepositoryInterface;
use Magento\Catalog\Model\Indexer\Product\Price;
use Magento\Customer\Model\Group;
Expand All @@ -14,6 +15,7 @@
use Magento\Store\Api\WebsiteRepositoryInterface;
use Magento\TestFramework\Catalog\Model\Product\Price\GetPriceIndexDataByProductId;
use Magento\CatalogInventory\Model\Indexer\Stock;
use Magento\TestFramework\Fixture\DataFixture;
use Magento\TestFramework\Helper\Bootstrap;
use PHPUnit\Framework\TestCase;

Expand Down Expand Up @@ -91,6 +93,18 @@ public function testExecuteRowWithShowOutOfStock(): void
$this->assertIndexTableData($bundleProduct->getId(), $expectedPrices);
}

#[
DataFixture(
BundleProductFixture::class,
['sku' => 'bundle1', 'extension_attributes' => ['website_ids' => []]]
),
]
public function testExecuteForBundleWithoutWebsites(): void
{
$bundleProduct = $this->productRepository->get('bundle1');
$this->indexer->executeRow($bundleProduct->getId());
}

/**
* Asserts price data in index table.
*
Expand Down

0 comments on commit 4670034

Please sign in to comment.