function it_does_not_validate_families_with_missing_identifier_requirements($attributeRepository, $channelRepository, $context, $minimumRequirements, FamilyInterface $family, AttributeRequirementInterface $requirementEcommerce, AttributeRequirementInterface $requirementMobile, ConstraintViolationBuilderInterface $violation)
 {
     $family->getAttributeRequirements()->willReturn([$requirementEcommerce, $requirementMobile]);
     $attributeRepository->getIdentifierCode()->willReturn('sku');
     $requirementEcommerce->getAttributeCode()->willReturn('sku');
     $requirementEcommerce->getChannelCode()->willReturn('ecommerce');
     $requirementMobile->getAttributeCode()->willReturn('sku');
     $requirementMobile->getChannelCode()->willReturn('mobile');
     $channelRepository->getChannelCodes()->willReturn(['ecommerce', 'mobile', 'print']);
     $family->getCode()->willReturn('familyCode');
     $context->buildViolation(Argument::any(), Argument::any())->willReturn($violation)->shouldBeCalled();
     $this->validate($family, $minimumRequirements);
 }
 /**
  * @param FamilyInterface $family
  *
  * @return string[]
  */
 protected function getMissingChannelCodes(FamilyInterface $family)
 {
     $requirements = $family->getAttributeRequirements();
     $identifierCode = $this->attributeRepository->getIdentifierCode();
     $currentChannelCodes = [];
     foreach ($requirements as $requirement) {
         if ($requirement->getAttributeCode() === $identifierCode) {
             $currentChannelCodes[] = $requirement->getChannelCode();
         }
     }
     $expectedChannelCodes = $this->channelRepository->getChannelCodes();
     $missingChannelCodes = array_diff($expectedChannelCodes, $currentChannelCodes);
     return $missingChannelCodes;
 }
 /**
  * Normalize the requirements
  *
  * @param FamilyInterface $family
  *
  * @return array
  */
 protected function normalizeRequirements(FamilyInterface $family)
 {
     $required = [];
     foreach ($family->getAttributeRequirements() as $requirement) {
         $channelCode = $requirement->getChannel()->getCode();
         if (!isset($required['requirements-' . $channelCode])) {
             $required['requirements-' . $channelCode] = [];
         }
         if ($requirement->isRequired()) {
             $required['requirements-' . $channelCode][] = $requirement->getAttribute()->getCode();
         }
     }
     return $required;
 }
Пример #4
0
 /**
  * Normalize the requirements
  *
  * @param FamilyInterface $family
  *
  * @return array
  */
 protected function normalizeRequirements(FamilyInterface $family)
 {
     $required = [];
     $flat = [];
     foreach ($family->getAttributeRequirements() as $requirement) {
         $channelCode = $requirement->getChannel()->getCode();
         if (!isset($required['requirements-' . $channelCode])) {
             $required['requirements-' . $channelCode] = [];
         }
         if ($requirement->isRequired()) {
             $required['requirements-' . $channelCode][] = $requirement->getAttribute()->getCode();
         }
     }
     foreach ($required as $key => $attributes) {
         $flat[$key] = implode(',', $attributes);
     }
     return $flat;
 }
 /**
  * @param FamilyInterface $family
  *
  * @return AttributeRequirementInterface[]
  */
 protected function getExistingIdentifierRequirements(FamilyInterface $family)
 {
     $identifierRequirements = [];
     $existingRequirements = $family->getAttributeRequirements();
     foreach ($existingRequirements as $requirement) {
         if (AttributeTypes::IDENTIFIER === $requirement->getAttribute()->getAttributeType()) {
             $identifierRequirements[] = $requirement;
         }
     }
     return $identifierRequirements;
 }
 function it_throws_an_exception_if_channel_not_found($channelRepository, $attributeRepository, AttributeInterface $attribute, FamilyInterface $family)
 {
     $data = ['code' => 'mycode', 'requirements' => ['mobile' => ['sku', 'name'], 'print' => ['sku', 'name', 'description']]];
     $family->getAttributeRequirements()->willReturn([]);
     $family->setCode('mycode')->shouldBeCalled();
     $attributeRepository->findOneByIdentifier('sku')->willReturn($attribute);
     $attributeRepository->findOneByIdentifier('name')->willReturn($attribute);
     $attributeRepository->findOneByIdentifier('description')->willReturn($attribute);
     $attributeRepository->findOneByIdentifier('price')->willReturn($attribute);
     $channelRepository->findOneByIdentifier('print')->willReturn(null);
     $channelRepository->findOneByIdentifier('mobile')->willReturn(null);
     $this->shouldThrow(new \InvalidArgumentException(sprintf('Channel with "%s" code does not exist', 'mobile')))->during('update', [$family, $data]);
 }