function it_throws_an_exception_if_no_groups_found($attributeGroupRepository, AttributeInterface $attribute, AttributeTranslation $translation)
 {
     $attribute->getId()->willReturn(null);
     $attribute->getAttributeType()->willReturn('pim_reference_data_simpleselect');
     $data = ['labels' => ['en_US' => 'Test1', 'fr_FR' => 'Test2'], 'group' => 'marketing', 'attributeType' => 'pim_catalog_text'];
     $attribute->setLocale('en_US')->shouldBeCalled();
     $attribute->setLocale('fr_FR')->shouldBeCalled();
     $attribute->getTranslation()->willReturn($translation);
     $translation->setLabel('Test1')->shouldBeCalled();
     $translation->setLabel('Test2')->shouldBeCalled();
     $attributeGroupRepository->findOneByIdentifier('marketing')->willReturn(null);
     $this->shouldThrow(new \InvalidArgumentException('AttributeGroup "marketing" does not exist'))->during('update', [$attribute, $data]);
 }
 /**
  * @param AttributeInterface $attribute
  * @param string             $field
  * @param mixed              $data
  *
  * @throws \InvalidArgumentException
  */
 protected function setData(AttributeInterface $attribute, $field, $data)
 {
     if ('labels' === $field) {
         foreach ($data as $localeCode => $label) {
             $attribute->setLocale($localeCode);
             $translation = $attribute->getTranslation();
             $translation->setLabel($label);
         }
     } elseif ('group' === $field) {
         $attributeGroup = $this->findAttributeGroup($data);
         if (null !== $attributeGroup) {
             $attribute->setGroup($attributeGroup);
         } else {
             throw new \InvalidArgumentException(sprintf('AttributeGroup "%s" does not exist', $data));
         }
     } else {
         $this->accessor->setValue($attribute, $field, $data);
     }
 }
 function it_gets_all_product_attributes_and_sets_correct_locale($attributeRepository, $massActionManager, AttributeInterface $attr1, AttributeInterface $attr2, AttributeGroupInterface $attrGroup, LocaleInterface $enLocale)
 {
     $enLocale->getCode()->willReturn('en_US');
     $this->setLocale($enLocale);
     $attributeRepository->findWithGroups([], ['conditions' => ['unique' => 0]])->shouldBeCalled()->willReturn([$attr1, $attr2]);
     $attr1->setLocale('en_US')->shouldBeCalled();
     $attr2->setLocale('en_US')->shouldBeCalled();
     $attr1->getGroup()->willReturn($attrGroup);
     $attr2->getGroup()->willReturn($attrGroup);
     $massActionManager->filterLocaleSpecificAttributes([$attr1, $attr2], 'en_US')->willReturn([$attr1, $attr2]);
     $attrGroup->setLocale('en_US')->shouldBeCalledTimes(2);
     $this->getAllAttributes()->shouldReturn([$attr1, $attr2]);
 }
 /**
  * @param AttributeInterface $attribute
  * @param array              $data
  */
 protected function setLabels(AttributeInterface $attribute, array $data)
 {
     foreach ($data as $localeCode => $label) {
         $attribute->setLocale($localeCode);
         $translation = $attribute->getTranslation();
         $translation->setLabel($label);
     }
 }
 function it_filters_attributes_coming_from_variant_group($massActionManager, $productBuilder, ProductInterface $product1, ProductInterface $product2, AttributeInterface $name, AttributeInterface $name, AttributeInterface $description, AttributeInterface $price, AttributeGroup $otherGroup, ProductValueInterface $nameProductValue, ProductValueInterface $descriptionProductValue, ProductValueInterface $priceProductValue)
 {
     $this->setObjectsToMassEdit([$product1, $product2]);
     $name->getGroup()->willReturn($otherGroup);
     $name->setLocale('en_US')->shouldBeCalled();
     $otherGroup->setLocale('en_US')->shouldBeCalled();
     $description->getGroup()->willReturn($otherGroup);
     $description->setLocale('en_US')->shouldBeCalled();
     $price->getGroup()->willReturn($otherGroup);
     $price->setLocale('en_US')->shouldBeCalled();
     $product1->getId()->willReturn(1);
     $product2->getId()->willReturn(2);
     $name->setLocale(Argument::any())->willReturn($name);
     $name->isScopable()->willReturn(false);
     $name->getCode()->willReturn('name');
     $description->setLocale(Argument::any())->willReturn($description);
     $description->isScopable()->willReturn(false);
     $description->getCode()->willReturn('description');
     $price->setLocale(Argument::any())->willReturn($price);
     $price->isScopable()->willReturn(false);
     $price->getCode()->willReturn('price');
     $this->setObjectsToMassEdit([$product1, $product2]);
     $massActionManager->findCommonAttributes([$product1, $product2])->willReturn([$name, $description, $price]);
     $massActionManager->filterLocaleSpecificAttributes([$name, $description, $price], 'en_US')->willReturn([$name, $description, $price]);
     $massActionManager->filterAttributesComingFromVariant([$name, $description, $price], [$product1, $product2])->willReturn([$name, $price]);
     $productBuilder->createProductValue($name, 'en_US')->willReturn($nameProductValue);
     $productBuilder->addMissingPrices($nameProductValue)->shouldBeCalled();
     $productBuilder->createProductValue($price, 'en_US')->willReturn($priceProductValue);
     $productBuilder->addMissingPrices($priceProductValue)->shouldBeCalled();
     $this->initialize();
     $this->getCommonAttributes()->shouldReturn([$name, $price]);
     $this->getValues()->shouldHaveCount(2);
 }