/**
  * Test modification.
  */
 public function testModify()
 {
     // Non-existant product in db.
     $expectedProduct1 = new ProductDocument();
     $expectedProduct1->setId('6b698c33118caee4ca0882c33f513d2f');
     $expectedProduct1->setActive(true);
     $expectedProduct1->setSku('85-8573-846-1-4-3');
     $expectedProduct1->setTitle('PRODUCT NO. 1');
     $expectedProduct1->setDescription('Product number one for testing');
     $expectedProduct1->setPrice(25.5);
     $expectedProduct1->setOldPrice(36.7);
     $expectedProduct1->setManufacturer(null);
     $expectedProduct1->setLongDescription(null);
     $expectedProduct1->setVendor(null);
     $expectedProduct1->setStock(5);
     $expectedProduct1->setAttributes([]);
     $url = new UrlNested();
     $url->setUrl('Test/Product/1');
     $expectedProduct1->setUrls(new \ArrayIterator([$url]));
     $expectedProduct1->setExpiredUrls([]);
     $expectedProduct2 = new VariantObject();
     $expectedProduct2->setId('6b6a6aedca3e438e98d51f0a5d586c0b');
     $expectedProduct2->setActive(false);
     $expectedProduct2->setSku('0702-85-853-9-2');
     $expectedProduct2->setTitle('PRODUCT NO. 2');
     $expectedProduct2->setDescription('Product number two for testing');
     $expectedProduct2->setPrice(46.6);
     $expectedProduct2->setOldPrice(35.7);
     $expectedProduct2->setLongDescription('Product number two description for testing from extension');
     $expectedProduct2->setStock(2);
     $expectedProduct2->setAttributes([]);
     $expectedProduct1->setVariants([$expectedProduct2]);
     $expectedEntities = [$expectedProduct1];
     $productItems = $this->getTestElements(['6b698c33118caee4ca0882c33f513d2f', '6b6a6aedca3e438e98d51f0a5d586c0b'], 'ONGROXIDConnectorBundleTest:Article');
     $this->assertCount(2, $productItems);
     $seoFinder = new SeoFinder();
     $seoFinder->setEntityManager($this->getEntityManager());
     $seoFinder->setShopId(0);
     $seoFinder->setRepository('ONGROXIDConnectorBundleTest:Seo');
     $modifier = new ProductModifier(new AttributesToDocumentsService());
     $modifier->setSeoFinderService($seoFinder);
     /** @var ItemPipelineEvent|\PHPUnit_Framework_MockObject_MockObject $event */
     $event = $this->getMock('ONGR\\ConnectionsBundle\\Pipeline\\Event\\ItemPipelineEvent', [], [], '', false);
     foreach ($expectedEntities as $key => $expectedProduct) {
         $actualProduct = new ProductDocument();
         $modifier->modify(new ImportItem($productItems[$key], $actualProduct), $event);
         $this->assertEquals($expectedProduct, $actualProduct);
     }
 }
 /**
  * Test product modifier listener.
  */
 public function testProductModifierListener()
 {
     $articleExtension = $this->getMock('\\ONGR\\OXIDConnectorBundle\\Tests\\Functional\\Entity\\ArticleExtension');
     $articleExtension->expects($this->once())->method('getLongDesc')->will($this->returnValue('testLongDescription'));
     $vendor = $this->getMock('\\ONGR\\OXIDConnectorBundle\\Tests\\Functional\\Entity\\Vendor');
     $vendor->expects($this->once())->method('getTitle')->will($this->returnValue('testVendorTitle'));
     $manufacturer = $this->getMock('\\ONGR\\OXIDConnectorBundle\\Tests\\Functional\\Entity\\Manufacturer');
     $manufacturer->expects($this->once())->method('getTitle')->will($this->returnValue('testManufacturerTitle'));
     $objectToCategories = [];
     $objectToCategories[0] = new ObjectToCategory();
     $category1 = $this->getMock('\\ONGR\\OXIDConnectorBundle\\Tests\\Functional\\Entity\\Category');
     $category1->expects($this->once())->method('isActive')->will($this->returnValue(true));
     $category1->expects($this->once())->method('getId')->will($this->returnValue(123));
     $objectToCategories[0]->setCategory($category1);
     // The following category should be skipped because of isActive=false.
     $objectToCategories[1] = new ObjectToCategory();
     $category2 = $this->getMock('\\ONGR\\OXIDConnectorBundle\\Tests\\Functional\\Entity\\Category');
     $category2->expects($this->once())->method('isActive')->will($this->returnValue(false));
     $category2->expects($this->never())->method('getId');
     $objectToCategories[1]->setCategory($category2);
     $this->mockExpectsMethods($this->prodEntity, [['getId', 1, 123], ['isActive', 1, true], ['getArtNum', 1, 'testArtNum'], ['getTitle', 1, 'testTitle'], ['getShortDesc', 1, 'testShortDescription'], ['getPrice', 1, 20.2], ['getTPrice', 1, 25.0], ['getParent', 1, null], ['getStock', 1, 50], ['getAttributes', 1, [1, 2, 3]], ['getExtension', 1, $articleExtension], ['getVendor', 1, $vendor], ['getManufacturer', 1, $manufacturer], ['getCategories', 1, $objectToCategories]]);
     $this->mockExpectsMethods($this->prodDocument, [['setId', 1, null, 123], ['setActive', 1, null, true], ['setSku', 1, null, 'testArtNum'], ['setTitle', 1, null, 'testTitle'], ['setDescription', 1, null, 'testShortDescription'], ['setPrice', 1, null, 20.2], ['setOldPrice', 1, null, 25.0], ['setStock', 1, null, 50], ['setAttributes', 1, null, [11, 22, 33]], ['setLongDescription', 1, null, 'testLongDescription'], ['setVendor', 1, null, 'testVendorTitle'], ['setManufacturer', 1, null, 'testManufacturerTitle'], ['setCategories', 1, null, [123]]]);
     $this->attrToDocService->expects($this->once())->method('transform')->with([1, 2, 3])->will($this->returnValue([11, 22, 33]));
     /** @var ImportItem|MockObject $importItem */
     $importItem = $this->getMockBuilder('ONGR\\ConnectionsBundle\\Pipeline\\Item\\ImportItem')->disableOriginalConstructor()->getMock();
     $importItem->expects($this->once())->method('getEntity')->will($this->returnValue($this->prodEntity));
     $importItem->expects($this->once())->method('getDocument')->will($this->returnValue($this->prodDocument));
     /** @var ItemPipelineEvent|MockObject $itemPipelineEvent */
     $itemPipelineEvent = $this->getMockBuilder('\\ONGR\\ConnectionsBundle\\Pipeline\\Event\\ItemPipelineEvent')->disableOriginalConstructor()->getMock();
     $itemPipelineEvent->expects($this->once())->method('getItem')->will($this->returnValue($importItem));
     $this->prodModifierListener->onModify($itemPipelineEvent);
 }
 /**
  * Tests skipping.
  */
 public function testModifySkip()
 {
     /** @var Article $entityParent */
     $entityParent = $this->getMockForAbstractClass('ONGR\\OXIDConnectorBundle\\Entity\\Article');
     $entityParent->setId('id');
     /** @var Article $entity */
     $entity = $this->getMockForAbstractClass('ONGR\\OXIDConnectorBundle\\Entity\\Article');
     $entity->setParent($entityParent);
     $document = new ProductDocument();
     /** @var ItemPipelineEvent|\PHPUnit_Framework_MockObject_MockObject $event */
     $event = $this->getMock('ONGR\\ConnectionsBundle\\Pipeline\\Event\\ItemPipelineEvent', [], [], '', false);
     $event->expects($this->once())->method('setItemSkip');
     $this->modifier->modify(new ImportItem($entity, $document), $event);
 }