/** * @param \Magento\CatalogRule\Model\Rule $rule * @param \Closure $proceed * @param \Magento\Framework\DataObject|\Magento\Catalog\Model\Product $product * @return bool */ public function aroundValidate(\Magento\CatalogRule\Model\Rule $rule, \Closure $proceed, \Magento\Framework\DataObject $product) { $validateResult = $proceed($product); if (!$validateResult && ($configurableProducts = $this->configurable->getParentIdsByChild($product->getId()))) { foreach ($configurableProducts as $configurableProductId) { $validateResult = $rule->getConditions()->validateByEntityId($configurableProductId); // If any of configurable product is valid for current rule, then their sub-product must be valid too if ($validateResult) { break; } } } return $validateResult; }
/** * @depends testGetConfigurableAttributesAsArray */ public function testGetParentIdsByChild() { $attributes = $this->_model->getConfigurableAttributesAsArray($this->_product); $attribute = reset($attributes); $optionValueId = $attribute['values'][0]['value_index']; $result = $this->_model->getParentIdsByChild($optionValueId * 10); // fixture $this->assertEquals(array(1), $result); }
/** * @depends testGetConfigurableAttributesAsArray */ public function testGetParentIdsByChild() { $result = $this->_model->getParentIdsByChild(10); // fixture $this->assertEquals([1], $result); }