function it_updates_a_variant_group($attributeRepository, $groupTypeRepository, $productBuilder, $pqbFactory, GroupInterface $variantGroup, AttributeInterface $attribute, GroupTypeInterface $type, GroupTranslation $translatable, ProductInterface $product, ProductInterface $removedProduct, ProductInterface $addedProduct, ProductTemplateInterface $productTemplate, ProductQueryBuilderInterface $pqb) { $groupTypeRepository->findOneByIdentifier('VARIANT')->willReturn($type); $attributeRepository->findOneByIdentifier('main_color')->willReturn($attribute); $attributeRepository->findOneByIdentifier('secondary_color')->willReturn($attribute); $pqbFactory->create()->willReturn($pqb); $pqb->addFilter('id', 'IN', [2])->shouldBeCalled(); $pqb->execute()->willReturn([$addedProduct]); $variantGroup->getTranslation()->willReturn($translatable); $translatable->setLabel('T-shirt super beau')->shouldBeCalled(); $variantGroup->setCode('mycode')->shouldBeCalled(); $variantGroup->setLocale('fr_FR')->shouldBeCalled(); $variantGroup->setType($type)->shouldBeCalled(); $variantGroup->getId()->willReturn(null); $variantGroup->addAxisAttribute(Argument::any())->shouldBeCalled(); $variantGroup->removeProduct($removedProduct)->shouldBeCalled(); $variantGroup->addProduct($addedProduct)->shouldBeCalled(); $variantGroup->getProducts()->willReturn([$removedProduct]); $productTemplate->getValuesData()->willReturn([]); $productTemplate->setValues(Argument::any())->shouldBeCalled(); $productTemplate->setValuesData(['main_color' => [['locale' => null, 'scope' => null, 'data' => 'white']]])->shouldBeCalled(); $variantGroup->getProductTemplate()->willReturn($productTemplate); $variantGroup->setProductTemplate($productTemplate)->shouldBeCalled(); $productValue = new ProductValue(); $identifierValue = new ProductValue(); $productBuilder->createProduct()->willReturn($product); $product->getValues()->willReturn(new ArrayCollection([$productValue, $identifierValue])); $product->getIdentifier()->willReturn($identifierValue); $values = ['code' => 'mycode', 'axis' => ['main_color', 'secondary_color'], 'type' => 'VARIANT', 'labels' => ['fr_FR' => 'T-shirt super beau'], 'values' => ['main_color' => [['locale' => null, 'scope' => null, 'data' => 'white']]], 'products' => [2]]; $this->update($variantGroup, $values, []); }
/** * Bind products * * @param GroupInterface $group * @param array $appendProducts * @param array $removeProducts */ protected function bindProducts(GroupInterface $group, array $appendProducts, array $removeProducts) { foreach ($appendProducts as $product) { $group->addProduct($product); } foreach ($removeProducts as $product) { $group->removeProduct($product); } }
function it_updates_a_group($groupTypeRepository, $attributeRepository, $pqbFactory, GroupInterface $group, GroupTypeInterface $type, GroupTranslation $translatable, AttributeInterface $attributeColor, AttributeInterface $attributeSize, ProductInterface $removedProduct, ProductInterface $addedProduct, ProductQueryBuilderInterface $pqb) { $groupTypeRepository->findOneByIdentifier('RELATED')->willReturn($type); $attributeRepository->findOneByIdentifier('color')->willReturn($attributeColor); $attributeRepository->findOneByIdentifier('size')->willReturn($attributeSize); $pqbFactory->create()->willReturn($pqb); $pqb->addFilter('id', 'IN', [2])->shouldBeCalled(); $pqb->execute()->willReturn([$addedProduct]); $group->getTranslation()->willReturn($translatable); $translatable->setLabel('T-shirt super beau')->shouldBeCalled(); $group->setCode('mycode')->shouldBeCalled(); $group->setLocale('fr_FR')->shouldBeCalled(); $group->setType($type)->shouldBeCalled(); $group->setAxisAttributes([$attributeColor, $attributeSize])->shouldBeCalled(); $group->getId()->willReturn(null); $group->removeProduct($removedProduct)->shouldBeCalled(); $group->addProduct($addedProduct)->shouldBeCalled(); $group->getProducts()->willReturn([$removedProduct]); $values = ['code' => 'mycode', 'type' => 'RELATED', 'labels' => ['fr_FR' => 'T-shirt super beau'], 'axis' => ['color', 'size'], 'products' => [2]]; $this->update($group, $values, []); }
/** * @param GroupInterface $group * @param array $labels */ protected function setProducts(GroupInterface $group, array $productIds) { foreach ($group->getProducts() as $product) { $group->removeProduct($product); } if (empty($productIds)) { return; } $pqb = $this->productQueryBuilderFactory->create(); $pqb->addFilter('id', 'IN', $productIds); $products = $pqb->execute(); foreach ($products as $product) { $group->addProduct($product); } }
function it_is_not_attribute_removable_with_group_containing_attribute(AttributeInterface $attribute, GroupInterface $group, GroupTypeInterface $groupType, ArrayCollection $groupAttributes) { $groupType->isVariant()->willReturn(true); $groupAttributes->contains($attribute)->willReturn(true); $group->getType()->willReturn($groupType); $group->getAxisAttributes()->willReturn($groupAttributes); $group->addProduct($this)->willReturn($this); $this->addGroup($group); $this->isAttributeRemovable($attribute)->shouldReturn(false); }