function it_updates_a_group($groupTypeRepository, $attributeRepository, GroupInterface $group, GroupTypeInterface $type, GroupTranslation $translatable, AttributeInterface $attributeColor, AttributeInterface $attributeSize)
 {
     $groupTypeRepository->findOneByIdentifier('RELATED')->willReturn($type);
     $attributeRepository->findOneByIdentifier('color')->willReturn($attributeColor);
     $attributeRepository->findOneByIdentifier('size')->willReturn($attributeSize);
     $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);
     $values = ['code' => 'mycode', 'type' => 'RELATED', 'labels' => ['fr_FR' => 'T-shirt super beau'], 'axis' => ['color', 'size']];
     $this->update($group, $values, []);
 }
 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 string[]       $attributeCodes
  *
  * @throws \InvalidArgumentException
  */
 protected function setAxis(GroupInterface $group, array $attributeCodes)
 {
     $attributes = [];
     foreach ($attributeCodes as $attributeCode) {
         $attribute = $this->attributeRepository->findOneByIdentifier($attributeCode);
         if (null === $attribute) {
             throw new \InvalidArgumentException(sprintf('Attribute "%s" does not exist', $attributeCode));
         }
         $attributes[] = $attribute;
     }
     $group->setAxisAttributes($attributes);
 }
 /**
  * @param GroupInterface $group
  * @param array          $data
  */
 protected function setAxis(GroupInterface $group, $data)
 {
     if (isset($data['axis']) && !empty($data['axis'])) {
         $axisCodes = explode(',', $data['axis']);
         $attributes = [];
         foreach ($axisCodes as $code) {
             $attribute = $this->attributeRepository->findOneByIdentifier($code);
             if (!$attribute) {
                 throw new \LogicException(sprintf('Attribute with identifier "%s" not found', $code));
             }
             $attributes[] = $attribute;
         }
         $group->setAxisAttributes($attributes);
     }
 }