コード例 #1
0
 function it_builds_versions_for_versionable_entities($normalizer, AbstractProduct $product)
 {
     $product->getId()->willReturn(1);
     $normalizer->normalize($product, 'csv', ['versioning' => true])->willReturn(['bar' => 'baz']);
     $version = $this->buildVersion($product, 'foo');
     $version->shouldBeAnInstanceOf('Pim\\Bundle\\VersioningBundle\\Model\\Version');
     $version->getAuthor()->shouldReturn('foo');
     $version->isPending()->shouldReturn(false);
     $version->getVersion()->shouldReturn(1);
     $version->getResourceId()->shouldReturn(1);
     $version->getSnapshot()->shouldReturn(['bar' => 'baz']);
     $version->getChangeset()->shouldReturn(['bar' => ['old' => '', 'new' => 'baz']]);
 }
コード例 #2
0
 function it_builds_pending_versions_when_versioning_an_entity(AbstractProduct $product, $builder, $repo)
 {
     $product->getId()->willReturn(1);
     $pending1 = new Version('Product', 1, 'julia');
     $pending1->setChangeset(['foo' => 'bar']);
     $pending2 = new Version('Product', 1, 'julia');
     $pending2->setChangeset(['foo' => 'fubar']);
     $repo->findBy(Argument::cetera())->willReturn([$pending1, $pending2]);
     $builder->buildPendingVersion($pending1, null)->willReturn($pending1);
     $builder->buildPendingVersion($pending2, $pending1)->willReturn($pending2);
     $builder->buildVersion(Argument::cetera())->willReturn(new Version('Product', 1, 'julia'));
     $versions = $this->buildVersion($product);
     $versions->shouldHaveCount(3);
 }
 function it_returns_flat_data(Channel $channel, $channelManager, AbstractProduct $item, AbstractProductMedia $media1, AbstractProductMedia $media2, $serializer)
 {
     $media1->getFilename()->willReturn('media_name');
     $media1->getFilePath()->willReturn('media_file_path');
     $media1->getOriginalFilename()->willReturn('media_original_name');
     $media2->getFilename()->willReturn('media_name');
     $media2->getFilePath()->willReturn('media_file_path');
     $media2->getOriginalFilename()->willReturn('media_original_name');
     $item->getMedia()->willReturn([$media1, $media2]);
     $serializer->normalize($item, 'flat', ['scopeCode' => 'foobar', 'localeCodes' => ''])->willReturn(['normalized_product']);
     $channelManager->getChannelByCode('foobar')->willReturn($channel);
     $this->setChannel('foobar');
     $this->process($item)->shouldReturn(['media' => [$media1, $media2], 'product' => ['normalized_product']]);
 }
コード例 #4
0
 function it_initializes_the_operation_with_common_attributes_of_the_products($productRepository, AbstractProduct $product1, AbstractProduct $product2, AbstractAttribute $name, $productManager, $massActionManager)
 {
     $this->setObjectsToMassEdit([$product1, $product2]);
     $product1->getId()->willReturn(1);
     $product2->getId()->willReturn(2);
     $name->setLocale(Argument::any())->willReturn($name);
     $name->getAttributeType()->willReturn('pim_catalog_text');
     $name->isScopable()->willReturn(false);
     $name->isLocalizable()->willReturn(false);
     $name->getCode()->willReturn('name');
     $name->getGroup()->willReturn(new AttributeGroup());
     $massActionManager->findCommonAttributes([1, 2])->willReturn([$name]);
     $this->initialize();
     $this->getCommonAttributes()->shouldReturn([$name]);
     $this->getValues()->shouldHaveCount(1);
 }
コード例 #5
0
 function it_applies_a_filter_on_product_when_its_in_an_expected_association(FilterDatasourceAdapterInterface $datasource, $utility, ProductRepositoryInterface $prodRepository, ProductQueryBuilderInterface $pqb, QueryBuilder $qb, $extractor, $assocRepository, ProductManager $productManager, AssociationType $assocType, AbstractAssociation $association, AbstractProduct $productOwner, AbstractProduct $productAssociatedOne, AbstractProduct $productAssociatedTwo)
 {
     $extractor->getDatagridParameter('_parameters', [])->willReturn([]);
     $extractor->getDatagridParameter('associationType')->willReturn(1);
     $assocRepository->findOneBy(Argument::any())->willReturn($assocType);
     $extractor->getDatagridParameter('product')->willReturn(11);
     $utility->getProductManager()->willReturn($productManager);
     $productManager->find(11)->willReturn($productOwner);
     $productOwner->getAssociationForType($assocType)->willReturn($association);
     $association->getProducts()->willReturn([$productAssociatedOne, $productAssociatedTwo]);
     $productAssociatedOne->getId()->willReturn(12);
     $productAssociatedTwo->getId()->willReturn(13);
     $datasource->getQueryBuilder()->willReturn($qb);
     $utility->getProductRepository()->willReturn($prodRepository);
     $prodRepository->getProductQueryBuilder($qb)->willReturn($pqb);
     $pqb->addFieldFilter('id', 'IN', [12, 13])->shouldBeCalled();
     $this->apply($datasource, ['type' => null, 'value' => 1]);
 }
コード例 #6
0
 function it_normalizes_the_values_of_product(AbstractProduct $product, AbstractAttribute $attribute, ProductValueInterface $value, ArrayCollection $values, \ArrayIterator $iterator, $filter, $serializer)
 {
     $values->getIterator()->willReturn($iterator);
     $product->getAssociations()->willReturn([]);
     $product->getFamily()->willReturn(null);
     $product->getGroupCodes()->willReturn([]);
     $product->getCategoryCodes()->willReturn([]);
     $product->isEnabled()->willReturn(true);
     $value->getAttribute()->willReturn($attribute);
     $attribute->getCode()->willReturn('name');
     $product->getValues()->willReturn($values);
     $filter->filter($values, Argument::any())->shouldBeCalled()->willReturn($values);
     $iterator->rewind()->willReturn(null);
     $valueCount = 1;
     $iterator->valid()->will(function () use(&$valueCount) {
         return $valueCount-- > 0;
     });
     $iterator->current()->willReturn($value);
     $iterator->next()->willReturn(null);
     $serializer->normalize($value, 'json', Argument::any())->willReturn(['locale' => null, 'scope' => null, 'value' => 'foo']);
     $this->normalize($product, 'json')->shouldReturn(['family' => null, 'groups' => [], 'categories' => [], 'enabled' => true, 'associations' => [], 'values' => ['name' => [['locale' => null, 'scope' => null, 'value' => 'foo']]]]);
 }
 /**
  * Filter a product (return null if the product got exported after his last edit)
  * @param AbstractProduct $product
  * @param JobInstance     $jobInstance
  *
  * @return AbstractProduct|null
  */
 public function filterProduct(AbstractProduct $product, JobInstance $jobInstance)
 {
     $productExport = $this->productExportRepository->findProductExportAfterEdit($product->getOriginalProduct(), $jobInstance, $product->getUpdated());
     if (0 === count($productExport)) {
         if ($this->productValueDelta) {
             $product = $this->filterProductValues($product);
         }
     } else {
         $product = null;
     }
     return $product;
 }
 /**
  * Update the product export date (will be removed later)
  * @param AbstractProduct $product
  */
 protected function updateProductExport(AbstractProduct $product)
 {
     $this->productExportManager->updateProductExport($product->getIdentifier(), $this->jobInstance);
 }
コード例 #9
0
 /**
  * @param AbstractProduct $product
  * @param AssociationType $type
  *
  * @return array
  */
 protected function getAssociatedProductIds(AbstractProduct $product, AssociationType $type)
 {
     $productIds = [];
     $association = $product->getAssociationForType($type);
     if ($association) {
         foreach ($association->getProducts() as $product) {
             $productIds[] = $product->getId();
         }
     }
     return $productIds ?: [0];
 }