public function testProductCollectionsSynchronization()
{
$provider = $this->getBaseProvider();
$repository = $this->getMockBuilder('Doctrine\\ORM\\EntityRepository')->disableOriginalConstructor()->getMock();
$em = $this->getMockBuilder('Doctrine\\ORM\\EntityManager')->disableOriginalConstructor()->getMock();
$em->expects($this->any())->method('getRepository')->will($this->returnValue($repository));
$registry = $this->getMock('Doctrine\\Common\\Persistence\\ManagerRegistry');
$registry->expects($this->any())->method('getManagerForClass')->will($this->returnValue($em));
$productCollectionManager = new ProductCollectionManager('Sonata\\Tests\\Component\\Product\\ProductCollection', $registry);
$provider->setProductCollectionManager($productCollectionManager);
$product = new Product();
$collection1 = new Collection();
$collection1->setId(1);
$productCollection1 = new ProductCollection();
$productCollection1->setId(1);
$productCollection1->setCollection($collection1);
$product->addProductCollection($productCollection1);
$variation = $provider->createVariation($product, false);
$this->assertEquals(0, count($variation->getProductCollections()));
$provider->synchronizeVariationsCollections($product);
$this->assertEquals(1, count($variation->getProductCollections()));
$collection2 = new Collection();
$collection2->setId(2);
$productCollection2 = new ProductCollection();
$productCollection2->setId(2);
$productCollection2->setCollection($collection2);
$product->addProductCollection($productCollection2);
$this->assertEquals(1, count($variation->getProductCollections()));
$provider->synchronizeVariationsCollections($product);
$this->assertEquals(2, count($variation->getProductCollections()));
$product->removeProductCollection($productCollection1);
$this->assertEquals(2, count($variation->getProductCollections()));
$repository->expects($this->any())->method('findOneBy')->will($this->returnValue($productCollection1));
$provider->synchronizeVariationsCollections($product);
// $this->assertEquals(1, count($variation->getProductCollections()));
// $this->assertFalse($variation->getProductCollections()->contains($productCollection1));
// $this->assertTrue($variation->getProductCollections()->contains($productCollection2));
}