/**
  * {@inheritdoc}
  */
 public function build(ArchetypeSubjectInterface $subject)
 {
     if (null === ($archetype = $subject->getArchetype())) {
         return;
     }
     $this->createAndAssignAttributes($archetype, $subject);
     $this->createAndAssignOptions($archetype, $subject);
 }
 function it_creates_new_values_only_for_non_existing_attributes($attributeValueFactory, ArchetypeInterface $archetype, ArchetypeSubjectInterface $subject, AttributeInterface $attribute, AttributeValueInterface $attributeValue, OptionInterface $option)
 {
     $archetype->getAttributes()->willReturn(array($attribute))->shouldBeCalled();
     $archetype->getOptions()->willReturn(array($option))->shouldBeCalled();
     $attribute->getCode()->willReturn('test');
     $subject->getAttributeByCode('test')->shouldBeCalled()->willReturn($attributeValue);
     $attributeValueFactory->createNew()->shouldNotBeCalled();
     $attributeValue->setAttribute($attribute)->shouldNotBeCalled();
     $subject->getArchetype()->willReturn($archetype);
     $subject->addAttribute(Argument::any())->shouldNotBeCalled();
     $subject->addOption($option)->shouldBeCalled();
     $this->build($subject);
 }