function it_normalizes_attribute_option(AttributeOptionInterface $option, AttributeOptionValueInterface $valueUs, AttributeOptionValueInterface $valueFr)
 {
     $option->getId()->willReturn(42);
     $option->getCode()->willReturn('red');
     $valueUs->getLocale()->willReturn('en_US');
     $valueUs->getValue()->willReturn('Red');
     $valueFr->getLocale()->willReturn('fr_FR');
     $valueFr->getValue()->willReturn('Rouge');
     $option->getOptionValues()->willReturn([$valueUs, $valueFr]);
     $this->normalize($option, 'mongodb_json', [])->shouldReturn(['id' => 42, 'code' => 'red', 'optionValues' => ['en_US' => ['value' => 'Red', 'locale' => 'en_US'], 'fr_FR' => ['value' => 'Rouge', 'locale' => 'fr_FR']]]);
 }
 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']]]);
 }
 /**
  * {@inheritdoc}
  */
 public function findAllWithAttributeOption(AttributeOptionInterface $option)
 {
     $id = (int) $option->getId();
     $qb = $this->createQueryBuilder('p');
     if ('options' === $option->getAttribute()->getBackendType()) {
         $qb->field('values.optionIds')->in([$id]);
     } else {
         $qb->field('values.option')->equals($id);
     }
     return $qb->getQuery()->execute()->toArray();
 }