function it_does_not_update_readonly_fields_on_an_existing_attribute_option(AttributeOptionInterface $attributeOption, AttributeOptionValueInterface $attributeOptionValue)
 {
     $attributeOption->getId()->willReturn(42);
     $attributeOption->getAttribute()->willReturn(null);
     // read only fields
     $attributeOption->setCode('mycode')->shouldNotBeCalled();
     $attributeOption->setAttribute(Argument::any())->shouldNotBeCalled();
     $attributeOption->setSortOrder(12)->shouldBeCalled();
     $attributeOption->setLocale('de_DE')->shouldBeCalled();
     $attributeOption->getTranslation()->willReturn($attributeOptionValue);
     $attributeOptionValue->setLabel('210 x 1219 mm')->shouldBeCalled();
     $this->update($attributeOption, ['code' => 'mycode', 'attribute' => 'myattribute', 'sort_order' => 12, 'labels' => ['de_DE' => '210 x 1219 mm']]);
 }
 function it_throws_an_exception_when_attribute_option_is_not_valid($attributeRepository, $validator, AttributeOptionInterface $attributeOption, AttributeInterface $attribute, AttributeGroupInterface $attributeGroup, AttributeOptionValueInterface $attributeOptionValue)
 {
     $attributeOption->getId()->willReturn(null);
     $attributeOption->getAttribute()->willReturn($attribute);
     $attribute->getGroup()->willReturn($attributeGroup);
     $attributeOption->setCode('mycode')->shouldBeCalled();
     $attributeRepository->findOneByIdentifier('myattribute')->willReturn(null);
     $attributeOption->setAttribute($attribute)->shouldNotBeCalled();
     $attributeOption->setSortOrder(12)->shouldBeCalled();
     $attributeOption->setLocale('de_DE')->shouldBeCalled();
     $attributeOption->getTranslation()->willReturn($attributeOptionValue);
     $attributeOptionValue->setLabel('210 x 1219 mm')->shouldBeCalled();
     $violationList = new ConstraintViolationList();
     $violationList->add(new ConstraintViolation('', '', [], $attributeOption, null, null));
     $validator->validate($attributeOption)->willReturn($violationList);
     $this->shouldThrow('Pim\\Bundle\\CatalogBundle\\Exception\\BusinessValidationException')->during('update', [$attributeOption, ['code' => 'mycode', 'attribute' => 'myattribute', 'sort_order' => 12, 'labels' => ['de_DE' => '210 x 1219 mm']]]);
 }
 /**
  * @param AttributeOptionInterface $attributeOption
  * @param string                   $field
  * @param mixed                    $data
  *
  * @throws \InvalidArgumentException
  */
 protected function setData(AttributeOptionInterface $attributeOption, $field, $data)
 {
     if ('code' === $field) {
         $attributeOption->setCode($data);
     }
     if ('attribute' === $field) {
         $attribute = $this->findAttribute($data);
         if (null !== $attribute) {
             $attributeOption->setAttribute($attribute);
         } else {
             throw new \InvalidArgumentException(sprintf('Attribute "%s" does not exist', $data));
         }
     }
     if ('labels' === $field) {
         foreach ($data as $localeCode => $label) {
             $attributeOption->setLocale($localeCode);
             $translation = $attributeOption->getTranslation();
             $translation->setLabel($label);
         }
     }
     if ('sort_order' === $field) {
         $attributeOption->setSortOrder($data);
     }
 }
 /**
  * {@inheritdoc}
  */
 public function addOption(AttributeOptionInterface $option)
 {
     $this->options[] = $option;
     $option->setAttribute($this);
     return $this;
 }