/**
  * Normalize the requirements
  *
  * @param Family $family
  *
  * @return array
  */
 protected function normalizeRequirements(Family $family)
 {
     $required = array();
     foreach ($family->getAttributeRequirements() as $requirement) {
         $channelCode = $requirement->getChannel()->getCode();
         if (!isset($required[$channelCode])) {
             $required[$channelCode] = array();
         }
         if ($requirement->isRequired()) {
             $required[$channelCode][] = $requirement->getAttribute()->getCode();
         }
     }
     return $required;
 }
 /**
  * Test related method
  */
 public function testGetAttributeRequirements()
 {
     $mobileName = $this->getAttributeRequirementMock('mobile', 'name');
     $mobileDescription = $this->getAttributeRequirementMock('mobile', 'description');
     $ecommerceName = $this->getAttributeRequirementMock('ecommerce', 'name');
     $ecommerceDescription = $this->getAttributeRequirementMock('ecommerce', 'description');
     $this->family->setAttributeRequirements(array($mobileName, $mobileDescription, $ecommerceName, $ecommerceDescription));
     $expectedAttrRequirements = array('name_mobile' => $mobileName, 'description_mobile' => $mobileDescription, 'name_ecommerce' => $ecommerceName, 'description_ecommerce' => $ecommerceDescription);
     $this->assertEquals($expectedAttrRequirements, $this->family->getAttributeRequirements());
     // test add method
     $ipadName = $this->getAttributeRequirementMock('ipad', 'name');
     $this->family->addAttributeRequirement($ipadName);
     $expectedAttrRequirements['name_ipad'] = $ipadName;
     $this->assertEquals($expectedAttrRequirements, $this->family->getAttributeRequirements());
 }
 /**
  * {@inheritDoc}
  */
 public function getAttributeRequirements()
 {
     $this->__initializer__ && $this->__initializer__->__invoke($this, 'getAttributeRequirements', array());
     return parent::getAttributeRequirements();
 }