/** * {@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); }
/** * {@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; }
/** * {@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]); }