function it_sets_multiselect_value_to_a_product_value($builder, $attrOptionRepository, AttributeInterface $attribute, ProductInterface $product1, ProductInterface $product2, ProductInterface $product3, ProductValueInterface $productValue, AttributeOptionInterface $attributeOption, AttributeOptionInterface $oldOption) { $locale = 'fr_FR'; $scope = 'mobile'; $attribute->getCode()->willReturn('attributeCode'); $attributeOption->getCode()->willReturn('attributeOptionCode'); $attrOptionRepository->findOneBy(['code' => 'attributeOptionCode', 'attribute' => $attribute])->shouldBeCalledTimes(1)->willReturn($attributeOption); $productValue->getOptions()->willReturn([$oldOption]); $productValue->removeOption($oldOption)->shouldBeCalled(); $productValue->addOption($attributeOption)->shouldBeCalled(); $builder->addProductValue($product2, $attribute, $locale, $scope)->willReturn($productValue); $product1->getValue('attributeCode', $locale, $scope)->shouldBeCalled()->willReturn($productValue); $product2->getValue('attributeCode', $locale, $scope)->shouldBeCalled()->willReturn(null); $product3->getValue('attributeCode', $locale, $scope)->shouldBeCalled()->willReturn($productValue); $this->setValue([$product1, $product2, $product3], $attribute, ['attributeOptionCode'], $locale, $scope); }
function it_adds_attribute_data_on_multiselect_value_to_a_product_value($builder, $attrOptionRepository, AttributeInterface $attribute, ProductInterface $product1, ProductInterface $product2, ProductInterface $product3, ProductValueInterface $productValue, AttributeOptionInterface $attributeOption) { $locale = 'fr_FR'; $scope = 'mobile'; $attribute->getCode()->willReturn('attributeCode'); $attributeOption->getCode()->willReturn('attributeOptionCode'); $attrOptionRepository->findOneBy(['code' => 'attributeOptionCode', 'attribute' => $attribute])->shouldBeCalledTimes(3)->willReturn($attributeOption); $productValue->addOption($attributeOption)->shouldBeCalled(); $builder->addProductValue($product2, $attribute, $locale, $scope)->willReturn($productValue); $product1->getValue('attributeCode', $locale, $scope)->shouldBeCalled()->willReturn($productValue); $product2->getValue('attributeCode', $locale, $scope)->shouldBeCalled()->willReturn(null); $product3->getValue('attributeCode', $locale, $scope)->shouldBeCalled()->willReturn($productValue); $this->addAttributeData($product1, $attribute, ['attributeOptionCode'], ['locale' => $locale, 'scope' => $scope]); $this->addAttributeData($product2, $attribute, ['attributeOptionCode'], ['locale' => $locale, 'scope' => $scope]); $this->addAttributeData($product3, $attribute, ['attributeOptionCode'], ['locale' => $locale, 'scope' => $scope]); }
/** * Copy attribute options into a multi select attribute * * @param ProductValueInterface $fromValue * @param ProductValueInterface $toValue */ protected function copyOptions(ProductValueInterface $fromValue, ProductValueInterface $toValue) { foreach ($fromValue->getOptions() as $attributeOption) { $toValue->addOption($attributeOption); } }
/** * @param ProductValueInterface $productValue * @param ProductValueInterface $value */ protected function setProductOption(ProductValueInterface $productValue, ProductValueInterface $value) { foreach ($productValue->getOptions() as $option) { if (!$value->getOptions()->contains($option)) { $productValue->removeOption($option); } } // TODO: Clean this code removing flush for ORM if (!class_exists(PimCatalogBundle::DOCTRINE_MONGODB)) { $this->productManager->getObjectManager()->flush(); } foreach ($value->getOptions() as $option) { $productValue->addOption($option); } }