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