public function testBuildElementWithVariations()
 {
     $parent = new Product();
     $parent->setSku('sku_2');
     $image = new Image();
     $image->setSource('http://www.brand.com/product/image.jpg');
     $product = new Variation();
     $product->setProduct($parent);
     $product->setImages(new ArrayCollection(array($image)));
     $collection = new ArrayCollection();
     $collection->add($product);
     // Some properties explicitly declared on CommonProduct
     $product->setSku('sku_1');
     $product->setStatus('Online');
     $product->setTitle('Product');
     $product->getMeta()->offsetSet('brand', 'Brand');
     $product->setUpc('000000000000');
     $product->setLength(1);
     $product->setWidth(1);
     $product->setHeight(1);
     $product->setDimensionUnit('MM');
     $product->setWeight(1);
     $product->setWeightUnit('GR');
     $product->setCurrency('USD');
     $product->setMsrp(5000);
     $product->setPrice(2500);
     $product->setQuantity(5);
     // If a property is not explicitly declared, it goes in Meta
     $product->getMeta()->offsetSet('category', '100166');
     $product->getMeta()->offsetSet('color', 'blue');
     $product->getMeta()->offsetSet('size', 'small');
     $product->getMeta()->offsetSet('link', 'http://www.brand.com/product');
     $product->getMeta()->offsetSet('startDate', '11/12/2014');
     $product->getMeta()->offsetSet('endDate', '12/12/2014');
     $product->getMeta()->offsetSet('shipper', 'Supplier');
     $product->getMeta()->offsetSet('basicCost', 5000);
     $product->getMeta()->offsetSet('dropshipFee', 199);
     $element = $this->requestHandler->buildElement($collection);
     $xml = $element->asXML();
     $expectedXml = file_get_contents(dirname(__DIR__) . '/Resources/SingleFeed-2013-10-01-053333_with_variation.xml');
     $this->assertXmlStringEqualsXmlString($expectedXml, $xml);
 }
 public function testIsVariationUnique()
 {
     // Variations Empty
     $variation1 = $this->buildMock('AntiMattr\\Common\\Product\\Variation');
     $this->assertTrue($this->product->isVariationUnique($variation1));
     $variation2 = new Variation();
     $variation2Option1 = $this->buildMock('AntiMattr\\Common\\Product\\Option');
     $variation2Option2 = $this->buildMock('AntiMattr\\Common\\Product\\Option');
     $variation2Option3 = $this->buildMock('AntiMattr\\Common\\Product\\Option');
     $variation2->addOption($variation2Option1);
     $variation2->addOption($variation2Option2);
     $variation2->addOption($variation2Option3);
     $variation3 = new Variation();
     $variation3Option1 = $this->buildMock('AntiMattr\\Common\\Product\\Option');
     $variation3Option2 = $this->buildMock('AntiMattr\\Common\\Product\\Option');
     $variation3Option3 = $this->buildMock('AntiMattr\\Common\\Product\\Option');
     $variation3->addOption($variation3Option1);
     $variation3->addOption($variation3Option2);
     $variation3->addOption($variation3Option3);
     $variation4 = new Variation();
     $variation4Option1 = $this->buildMock('AntiMattr\\Common\\Product\\Option');
     $variation4Option2 = $this->buildMock('AntiMattr\\Common\\Product\\Option');
     $variation4Option3 = $this->buildMock('AntiMattr\\Common\\Product\\Option');
     $variation4->addOption($variation4Option1);
     $variation4->addOption($variation4Option2);
     $variation4->addOption($variation4Option3);
     $variation3Duplicate = new Variation();
     $variation3DuplicateOption1 = $this->buildMock('AntiMattr\\Common\\Product\\Option');
     $variation3DuplicateOption2 = $this->buildMock('AntiMattr\\Common\\Product\\Option');
     $variation3DuplicateOption3 = $this->buildMock('AntiMattr\\Common\\Product\\Option');
     $variation3Duplicate->addOption($variation3DuplicateOption1);
     $variation3Duplicate->addOption($variation3DuplicateOption2);
     $variation3Duplicate->addOption($variation3DuplicateOption3);
     $variation2Option1->expects($this->any())->method('getUniqueIdentifier')->will($this->returnValue('color_red'));
     $variation2Option2->expects($this->any())->method('getUniqueIdentifier')->will($this->returnValue('size_small'));
     $variation2Option3->expects($this->any())->method('getUniqueIdentifier')->will($this->returnValue('fabric_cotton'));
     $variation3Option1->expects($this->any())->method('getUniqueIdentifier')->will($this->returnValue('color_yellow'));
     $variation3Option2->expects($this->any())->method('getUniqueIdentifier')->will($this->returnValue('size_medium'));
     $variation3Option3->expects($this->any())->method('getUniqueIdentifier')->will($this->returnValue('fabric_cotton'));
     $variation4Option1->expects($this->any())->method('getUniqueIdentifier')->will($this->returnValue('color_red'));
     $variation4Option2->expects($this->any())->method('getUniqueIdentifier')->will($this->returnValue('size_medium'));
     $variation4Option3->expects($this->any())->method('getUniqueIdentifier')->will($this->returnValue('fabric_nylon'));
     $variation3DuplicateOption1->expects($this->any())->method('getUniqueIdentifier')->will($this->returnValue('color_yellow'));
     $variation3DuplicateOption2->expects($this->any())->method('getUniqueIdentifier')->will($this->returnValue('size_medium'));
     $variation3DuplicateOption3->expects($this->any())->method('getUniqueIdentifier')->will($this->returnValue('fabric_cotton'));
     $this->product->addVariation($variation2);
     $this->product->addVariation($variation3);
     // Confirm pre-existing references are affirmative
     $this->assertTrue($this->product->isVariationUnique($variation2));
     $this->assertTrue($this->product->isVariationUnique($variation3));
     // Confirm untracked and unique references are affirmative
     $this->assertTrue($this->product->isVariationUnique($variation4));
     $this->product->addVariation($variation4);
     $this->assertFalse($this->product->isVariationUnique($variation3Duplicate));
 }