public function testBasketAddProduct()
{
$productProvider = $this->createNewProductProvider();
$product = $this->getMockBuilder('Sonata\\Component\\Product\\ProductInterface')->getMock();
$basketElement = $this->getMockBuilder('Sonata\\Component\\Basket\\BasketElementInterface')->getMock();
// Simulate a product already in the basket
$basket = $this->getMockBuilder('Sonata\\Component\\Basket\\BasketInterface')->getMock();
$basket->expects($this->any())->method('hasProduct')->will($this->returnValue(true));
$currency = new Currency();
$currency->setLabel('EUR');
$basket->expects($this->any())->method('getCurrency')->will($this->returnValue($currency));
$this->assertFalse($productProvider->basketAddProduct($basket, $product, $basketElement));
// Test with product having options
$basket = $this->getMockBuilder('Sonata\\Component\\Basket\\BasketInterface')->getMock();
$basket->expects($this->any())->method('hasProduct')->will($this->returnValue(false));
$currency = new Currency();
$currency->setLabel('EUR');
$basket->expects($this->any())->method('getCurrency')->will($this->returnValue($currency));
$basketElement = new BasketElement();
$product->expects($this->any())->method('getOptions')->will($this->returnValue(array('even' => true, 'more' => true, 'tests' => true)));
$result = $productProvider->basketAddProduct($basket, $product, $basketElement);
$this->assertTrue($basketElement->hasOption('even'));
$this->assertTrue($basketElement->hasOption('more'));
$this->assertTrue($basketElement->hasOption('tests'));
$this->assertInstanceOf('Sonata\\Component\\Basket\\BasketElementInterface', $result);
}