/**
  * {@inheritdoc}
  */
 public function supportsAttributes(AttributeInterface $fromAttribute, AttributeInterface $toAttribute)
 {
     $supportsFrom = in_array($fromAttribute->getAttributeType(), $this->supportedFromTypes);
     $supportsTo = in_array($toAttribute->getAttributeType(), $this->supportedToTypes);
     $sameType = $fromAttribute->getAttributeType() === $toAttribute->getAttributeType();
     return $supportsFrom && $supportsTo && $sameType;
 }
 function it_supports_boolean_attributes(AttributeInterface $booleanAttribute, AttributeInterface $textareaAttribute)
 {
     $booleanAttribute->getAttributeType()->willReturn('pim_catalog_boolean');
     $this->supports($booleanAttribute)->shouldReturn(true);
     $textareaAttribute->getAttributeType()->willReturn('pim_catalog_textarea');
     $this->supports($textareaAttribute)->shouldReturn(false);
 }
 function it_supports_simpleselect_attributes(AttributeInterface $simpleSelectAttribute, AttributeInterface $textareaAttribute)
 {
     $simpleSelectAttribute->getAttributeType()->willReturn('pim_catalog_simpleselect');
     $this->supports($simpleSelectAttribute)->shouldReturn(true);
     $textareaAttribute->getAttributeType()->willReturn('pim_catalog_textarea');
     $this->supports($textareaAttribute)->shouldReturn(false);
 }
 function it_supports_number_attributes(AttributeInterface $numberAttribute, AttributeInterface $textareaAttribute)
 {
     $numberAttribute->getAttributeType()->willReturn('pim_catalog_number');
     $this->supports($numberAttribute)->shouldReturn(true);
     $textareaAttribute->getAttributeType()->willReturn('pim_catalog_textarea');
     $this->supports($textareaAttribute)->shouldReturn(false);
 }
 function it_resolves_eligible_values_for_a_set_of_attributes($localeRepository, $channelRepository, AttributeInterface $sku, AttributeInterface $name, AttributeInterface $desc, AttributeInterface $tax, LocaleInterface $fr, LocaleInterface $en, ChannelInterface $ecom, ChannelInterface $print)
 {
     $sku->getCode()->willReturn('sku');
     $sku->getAttributeType()->willReturn('pim_catalog_identifier');
     $sku->isLocalizable()->willReturn(false);
     $sku->isScopable()->willReturn(false);
     $sku->isLocaleSpecific()->willReturn(false);
     $name->getCode()->willReturn('name');
     $name->getAttributeType()->willReturn('pim_catalog_text');
     $name->isLocalizable()->willReturn(true);
     $name->isScopable()->willReturn(false);
     $name->isLocaleSpecific()->willReturn(false);
     $desc->getCode()->willReturn('description');
     $desc->getAttributeType()->willReturn('pim_catalog_text');
     $desc->isLocalizable()->willReturn(true);
     $desc->isScopable()->willReturn(true);
     $desc->isLocaleSpecific()->willReturn(false);
     $tax->getCode()->willReturn('tax');
     $tax->getAttributeType()->willReturn('pim_catalog_text');
     $tax->isLocalizable()->willReturn(true);
     $tax->isScopable()->willReturn(false);
     $tax->isLocaleSpecific()->willReturn(true);
     $tax->getLocaleSpecificCodes()->willReturn(['fr_FR']);
     $fr->getCode()->willReturn('fr_FR');
     $en->getCode()->willReturn('en_US');
     $localeRepository->getActivatedLocales()->willReturn([$fr, $en]);
     $ecom->getCode()->willReturn('ecommerce');
     $ecom->getLocales()->willReturn([$en, $fr]);
     $print->getCode()->willReturn('print');
     $print->getLocales()->willReturn([$en, $fr]);
     $channelRepository->findAll()->willReturn([$ecom, $print]);
     $this->resolveEligibleValues([$sku, $name, $desc, $tax])->shouldReturn([['attribute' => 'sku', 'type' => 'pim_catalog_identifier', 'locale' => null, 'scope' => null], ['attribute' => 'name', 'type' => 'pim_catalog_text', 'locale' => 'fr_FR', 'scope' => null], ['attribute' => 'name', 'type' => 'pim_catalog_text', 'locale' => 'en_US', 'scope' => null], ['attribute' => 'description', 'type' => 'pim_catalog_text', 'locale' => 'en_US', 'scope' => 'ecommerce'], ['attribute' => 'description', 'type' => 'pim_catalog_text', 'locale' => 'fr_FR', 'scope' => 'ecommerce'], ['attribute' => 'description', 'type' => 'pim_catalog_text', 'locale' => 'en_US', 'scope' => 'print'], ['attribute' => 'description', 'type' => 'pim_catalog_text', 'locale' => 'fr_FR', 'scope' => 'print'], ['attribute' => 'tax', 'type' => 'pim_catalog_text', 'locale' => 'fr_FR', 'scope' => null]]);
 }
 function it_supports_multi_select_attribute(AttributeInterface $attribute)
 {
     $attribute->getAttributeType()->willReturn('pim_catalog_multiselect');
     $this->supportsAttribute($attribute)->shouldReturn(true);
     $attribute->getAttributeType()->willReturn(Argument::any());
     $this->supportsAttribute($attribute)->shouldReturn(false);
 }
 function it_supports_metric_attributes(AttributeInterface $metrictAttribute, AttributeInterface $textareaAttribute)
 {
     $metrictAttribute->getAttributeType()->willReturn('pim_catalog_metric');
     $this->supportsAttribute($metrictAttribute)->shouldReturn(true);
     $textareaAttribute->getAttributeType()->willReturn('pim_catalog_textarea');
     $this->supportsAttribute($textareaAttribute)->shouldReturn(false);
 }
 function it_supports_reference_data_attributes(AttributeInterface $refDataAttribute, AttributeInterface $textareaAttribute)
 {
     $refDataAttribute->getAttributeType()->willReturn('pim_reference_data_simpleselect');
     $this->supportsAttribute($refDataAttribute)->shouldReturn(true);
     $textareaAttribute->getAttributeType()->willReturn('pim_catalog_textarea');
     $this->supportsAttribute($textareaAttribute)->shouldReturn(false);
 }
 function it_adds_missing_product_values_from_family_on_new_product($valuesResolver, FamilyInterface $family, ProductInterface $product, AttributeInterface $sku, AttributeInterface $name, AttributeInterface $desc, ProductValueInterface $skuValue)
 {
     $sku->getCode()->willReturn('sku');
     $sku->getAttributeType()->willReturn('pim_catalog_identifier');
     $sku->isLocalizable()->willReturn(false);
     $sku->isScopable()->willReturn(false);
     $name->getCode()->willReturn('name');
     $name->getAttributeType()->willReturn('pim_catalog_text');
     $name->isLocalizable()->willReturn(true);
     $name->isScopable()->willReturn(false);
     $desc->getCode()->willReturn('description');
     $desc->getAttributeType()->willReturn('pim_catalog_text');
     $desc->isLocalizable()->willReturn(true);
     $desc->isScopable()->willReturn(true);
     // get expected attributes
     $product->getAttributes()->willReturn([$sku]);
     $family->getAttributes()->willReturn([$sku, $name, $desc]);
     $product->getFamily()->willReturn($family);
     // get eligible values
     $valuesResolver->resolveEligibleValues(['sku' => $sku, 'name' => $name, 'description' => $desc])->willReturn([['attribute' => 'sku', 'type' => 'pim_catalog_identifier', 'locale' => null, 'scope' => null], ['attribute' => 'name', 'type' => 'pim_catalog_text', 'locale' => 'fr_FR', 'scope' => null], ['attribute' => 'name', 'type' => 'pim_catalog_text', 'locale' => 'en_US', 'scope' => null], ['attribute' => 'description', 'type' => 'pim_catalog_text', 'locale' => 'en_US', 'scope' => 'ecommerce'], ['attribute' => 'description', 'type' => 'pim_catalog_text', 'locale' => 'fr_FR', 'scope' => 'ecommerce'], ['attribute' => 'description', 'type' => 'pim_catalog_text', 'locale' => 'en_US', 'scope' => 'print'], ['attribute' => 'description', 'type' => 'pim_catalog_text', 'locale' => 'fr_FR', 'scope' => 'print']]);
     // get existing values
     $skuValue->getAttribute()->willReturn($sku);
     $skuValue->getLocale()->willReturn(null);
     $skuValue->getScope()->willReturn(null);
     $product->getValues()->willReturn([$skuValue]);
     // add 6 new values : 4 desc (locales x scopes) + 2 name (locales
     $product->addValue(Argument::any())->shouldBeCalledTimes(6);
     $this->addMissingProductValues($product);
 }
 function it_supports_price_collection_attributes(AttributeInterface $price_collectionAttribute, AttributeInterface $textareaAttribute)
 {
     $price_collectionAttribute->getAttributeType()->willReturn('pim_catalog_price_collection');
     $this->supportsAttribute($price_collectionAttribute)->shouldReturn(true);
     $textareaAttribute->getAttributeType()->willReturn('pim_catalog_textarea');
     $this->supportsAttribute($textareaAttribute)->shouldReturn(false);
 }
 function it_does_not_support_other_attributes($identifier, $textarea, AttributeInterface $image)
 {
     $this->supportAttribute($identifier)->shouldReturn(false);
     $this->supportAttribute($textarea)->shouldReturn(false);
     $image->getAttributeType()->willReturn('pim_catalog_image');
     $this->supportAttribute($image)->shouldReturn(false);
 }
 function it_supports_metric_attribute(AttributeInterface $metric)
 {
     $metric->getAttributeType()->willReturn('pim_catalog_metric');
     $this->supportsAttribute($metric)->shouldReturn(true);
     $metric->getAttributeType()->willReturn(Argument::any());
     $this->supportsAttribute($metric)->shouldReturn(false);
 }
 function it_supports_date_attributes(AttributeInterface $dateAtt, AttributeInterface $otherAtt)
 {
     $dateAtt->getAttributeType()->willReturn('pim_catalog_date');
     $this->supportsAttribute($dateAtt)->shouldReturn(true);
     $otherAtt->getAttributeType()->willReturn('pim_catalog_other');
     $this->supportsAttribute($otherAtt)->shouldReturn(false);
 }
 function it_throws_an_exception_when_the_locale_is_not_provided($qb, AttributeInterface $attribute)
 {
     $attribute->getCode()->willReturn('my_code');
     $attribute->getBackendType()->willReturn('options');
     $attribute->getAttributeType()->willReturn('pim_catalog_simpleselect');
     $this->shouldThrow('\\InvalidArgumentException')->duringAddAttributeSorter($attribute, 'desc', null, 'ecommerce');
 }
 /**
  * Get empty value for specified attribute depending on its type
  *
  * @param AttributeInterface $attribute
  *
  * @return array|bool|string|null
  */
 protected function getEmptyValue(AttributeInterface $attribute)
 {
     switch ($attribute->getAttributeType()) {
         case 'pim_catalog_metric':
             $emptyValue = ['data' => null, 'unit' => $attribute->getDefaultMetricUnit()];
             break;
         case 'pim_catalog_multiselect':
         case 'pim_reference_data_multiselect':
             $emptyValue = [];
             break;
         case 'pim_catalog_text':
             $emptyValue = '';
             break;
         case 'pim_catalog_boolean':
             $emptyValue = false;
             break;
         case 'pim_catalog_price_collection':
             $emptyValue = [];
             break;
         default:
             $emptyValue = null;
             break;
     }
     return $emptyValue;
 }
 function it_denormalizes_data_into_number_with_french_format($valuesDenormalizer, $localizer, AttributeInterface $attribute)
 {
     $attribute->getAttributeType()->willReturn('pim_catalog_number');
     $options = ['attribute' => $attribute, 'locale' => 'fr_FR'];
     $valuesDenormalizer->denormalize(3.85, 'Pim\\Bundle\\CatalogBundle\\Model\\ProductValue', 'json', $options)->willReturn(3.85);
     $localizer->localize(3.85, $options)->willReturn('3,85');
     $this->denormalize(3.85, 'Pim\\Bundle\\CatalogBundle\\Model\\ProductValue', 'json', $options)->shouldReturn('3,85');
 }
 public function it_enforces_attribute_type(AttributeInterface $attribute)
 {
     foreach ($this->dataProviderForSupportedAttributes() as $attributeTypeTest) {
         $attributeType = $attributeTypeTest[0];
         $expectedResult = $attributeTypeTest[1];
         $attribute->getAttributeType()->willReturn($attributeType);
         $this->supportAttribute($attribute)->shouldReturn($expectedResult);
     }
 }
 function it_enforces_attribute_type(AttributeInterface $attribute)
 {
     $attribute->getAttributeType()->willReturn('pim_catalog_price_collection');
     $this->supportAttribute($attribute)->shouldReturn(true);
     $attribute->getAttributeType()->willReturn('pim_catalog_text');
     $this->supportAttribute($attribute)->shouldReturn(false);
     $attribute->getAttributeType()->willReturn('foo');
     $this->supportAttribute($attribute)->shouldReturn(false);
 }
 function it_supports_media_attributes(AttributeInterface $imageAttribute, AttributeInterface $fileAttribute, AttributeInterface $textareaAttribute)
 {
     $imageAttribute->getAttributeType()->willReturn('pim_catalog_image');
     $this->supports($imageAttribute)->shouldReturn(true);
     $fileAttribute->getAttributeType()->willReturn('pim_catalog_file');
     $this->supports($fileAttribute)->shouldReturn(true);
     $textareaAttribute->getAttributeType()->willReturn('pim_catalog_textarea');
     $this->supports($textareaAttribute)->shouldReturn(false);
 }
 /**
  * Don't allow creating an identifier attribute if one already exists
  *
  * @param AttributeInterface $attribute
  * @param Constraint         $constraint
  */
 public function validate($attribute, Constraint $constraint)
 {
     if ($attribute->getAttributeType() === 'pim_catalog_identifier') {
         $identifier = $this->manager->getIdentifierAttribute();
         if ($identifier && $identifier->getId() !== $attribute->getId()) {
             $this->context->addViolationAt('attributeType', $constraint->message);
         }
     }
 }
 /**
  * Don't allow creating an identifier attribute if one already exists
  *
  * @param AttributeInterface $attribute
  * @param Constraint         $constraint
  */
 public function validate($attribute, Constraint $constraint)
 {
     if (AttributeTypes::IDENTIFIER === $attribute->getAttributeType()) {
         $identifier = $this->attributeRepository->getIdentifier();
         if ($identifier && $identifier->getId() !== $attribute->getId()) {
             $this->context->buildViolation($constraint->message)->atPath('attributeType')->addViolation();
         }
     }
 }
 function it_should_support_and_provide_a_reference_data_field(AttributeInterface $attribute)
 {
     $attribute->getAttributeType()->willReturn('pim_reference_data_simpleselect');
     $this->supports($attribute)->shouldReturn(true);
     $this->getField($attribute)->shouldReturn('akeneo-simple-select-reference-data-field');
     $attribute->getAttributeType()->willReturn('pim_reference_data_multiselect');
     $this->supports($attribute)->shouldReturn(true);
     $this->getField($attribute)->shouldReturn('akeneo-multi-select-reference-data-field');
 }
 function it_adds_a_violation_if_attribute_identifier_already_exists($context, $attributeRepository, AttributeInterface $attribute, AttributeInterface $identifier, SingleIdentifierAttribute $constraint)
 {
     $attribute->getAttributeType()->willReturn('pim_catalog_identifier');
     $attribute->getId()->willReturn(2);
     $attributeRepository->getIdentifier()->willReturn($identifier);
     $identifier->getId()->willReturn(1);
     $context->addViolationAt('attributeType', $constraint->message)->shouldBeCalled();
     $this->validate($attribute, $constraint);
 }
예제 #24
0
 /**
  * {@inheritdoc}
  */
 public function guessConstraints(AttributeInterface $attribute)
 {
     $constraints = array();
     $characterLimit = 'pim_catalog_textarea' === $attribute->getAttributeType() ? static::TEXTAREA_FIELD_LEMGTH : static::TEXT_FIELD_LEMGTH;
     if ($maxCharacters = $attribute->getMaxCharacters()) {
         $characterLimit = min($maxCharacters, $characterLimit);
     }
     $constraints[] = new Assert\Length(array('max' => $characterLimit));
     return $constraints;
 }
예제 #25
0
 /**
  * {@inheritdoc}
  */
 public function guessConstraints(AttributeInterface $attribute)
 {
     $constraints = [];
     $characterLimit = AttributeTypes::TEXTAREA === $attribute->getAttributeType() ? static::TEXTAREA_FIELD_LEMGTH : static::TEXT_FIELD_LEMGTH;
     if ($maxCharacters = $attribute->getMaxCharacters()) {
         $characterLimit = min($maxCharacters, $characterLimit);
     }
     $constraints[] = new Assert\Length(['max' => $characterLimit]);
     return $constraints;
 }
 function it_normalizes_product_value_which_is_not_a_number($productValueNormalizer, $localizer, ProductValueInterface $productValue, AttributeInterface $attribute)
 {
     $options = ['decimal_separator' => ','];
     $productValue->getData()->willReturn('shoes');
     $attribute->getAttributeType()->willReturn(AttributeTypes::TEXT);
     $productValue->getAttribute()->willReturn($attribute);
     $productValueNormalizer->normalize($productValue, null, $options)->willReturn(['simple-select' => 'shoes']);
     $localizer->convertDefaultToLocalized('', $options)->shouldNotBeCalled();
     $this->normalize($productValue, null, $options)->shouldReturn(['simple-select' => 'shoes']);
 }
 function it_supports_any_attributes(AttributeInterface $attribute)
 {
     $attribute->getAttributeType()->willReturn('pim_catalog_text');
     $this->supportAttribute($attribute)->shouldReturn(true);
     $attribute->getAttributeType()->willReturn('pim_catalog_date');
     $this->supportAttribute($attribute)->shouldReturn(true);
     $attribute->getAttributeType()->willReturn('pim_catalog_image');
     $this->supportAttribute($attribute)->shouldReturn(true);
     $attribute->getAttributeType()->willReturn('foo');
     $this->supportAttribute($attribute)->shouldReturn(true);
 }
 function it_supports_metric_attributes(AttributeInterface $fromMetricAttribute, AttributeInterface $toMetricAttribute, AttributeInterface $toTextareaAttribute, AttributeInterface $fromNumberAttribute, AttributeInterface $toNumberAttribute)
 {
     $fromMetricAttribute->getAttributeType()->willReturn('pim_catalog_metric');
     $toMetricAttribute->getAttributeType()->willReturn('pim_catalog_metric');
     $this->supportsAttributes($fromMetricAttribute, $toMetricAttribute)->shouldReturn(true);
     $fromNumberAttribute->getAttributeType()->willReturn('pim_catalog_number');
     $toNumberAttribute->getAttributeType()->willReturn('pim_catalog_number');
     $this->supportsAttributes($fromNumberAttribute, $toNumberAttribute)->shouldReturn(false);
     $this->supportsAttributes($fromMetricAttribute, $toNumberAttribute)->shouldReturn(false);
     $this->supportsAttributes($fromNumberAttribute, $toTextareaAttribute)->shouldReturn(false);
 }
 function it_renders_a_product_with_an_image($templating, ProductInterface $blender, AttributeGroupInterface $media, AttributeInterface $mainImage)
 {
     $path = realpath(__DIR__ . '/../../../../../features/Context/fixtures/');
     $blender->getAttributes()->willReturn([$mainImage]);
     $mainImage->getGroup()->willReturn($media);
     $media->getLabel()->willReturn('Media');
     $mainImage->getCode()->willReturn('main_image');
     $mainImage->getAttributeType()->willReturn('pim_catalog_image');
     $templating->render(self::TEMPLATE_NAME, ['product' => $blender, 'locale' => 'en_US', 'scope' => 'ecommerce', 'groupedAttributes' => ['Media' => ['main_image' => $mainImage]], 'imageAttributes' => ['main_image' => $mainImage], 'uploadDir' => $path . DIRECTORY_SEPARATOR, 'customFont' => null])->shouldBeCalled();
     $this->render($blender, 'pdf', ['locale' => 'en_US', 'scope' => 'ecommerce']);
 }
 function it_throws_an_exception_if_no_converters_found($attrColumnsResolver, $assocColumnsResolver, $fieldConverter, $converterRegistry, $fieldExtractor, $columnsMerger, AttributeInterface $attribute)
 {
     $item = ['sku' => '1069978', 'enabled' => 1];
     $attrColumnsResolver->resolveAttributeColumns()->willReturn(['sku']);
     $assocColumnsResolver->resolveAssociationColumns()->willReturn([]);
     $columnsMerger->merge($item)->willReturn($item);
     $fieldExtractor->extractColumnInfo('sku')->willReturn(['attribute' => $attribute]);
     $attribute->getAttributeType()->willReturn('sku');
     $fieldConverter->supportsColumn('sku')->willReturn(false);
     $converterRegistry->getConverter(Argument::any())->willReturn(null);
     $this->shouldThrow(new \LogicException('No converters found for attribute type "sku"'))->during('convert', [$item]);
 }