public function testBasketMergeProduct()
{
// Test a product not in the basket
$basket = $this->getMockBuilder('Sonata\\Component\\Basket\\BasketInterface')->getMock();
$currency = new Currency();
$currency->setLabel('EUR');
$basket->expects($this->any())->method('getCurrency')->will($this->returnValue($currency));
$product = $this->getMockBuilder('Sonata\\Component\\Product\\ProductInterface')->getMock();
$basketElement = $this->getMockBuilder('Sonata\\Component\\Basket\\BasketElementInterface')->getMock();
$basketElement->expects($this->any())->method('getQuantity')->will($this->returnValue(1));
$productProvider = $this->createNewProductProvider();
$this->assertFalse($productProvider->basketMergeProduct($basket, $product, $basketElement));
// Test an invalid product ID in the basket
$basket = $this->getMockBuilder('Sonata\\Component\\Basket\\BasketInterface')->getMock();
$currency = new Currency();
$currency->setLabel('EUR');
$basket->expects($this->any())->method('getCurrency')->will($this->returnValue($currency));
$product = $this->getMockBuilder('Sonata\\Component\\Product\\ProductInterface')->getMock();
$basketElement = $this->getMockBuilder('Sonata\\Component\\Basket\\BasketElementInterface')->getMock();
$basketElement->expects($this->any())->method('getQuantity')->will($this->returnValue(1));
$productProvider = $this->createNewProductProvider();
$basket->expects($this->any())->method('getElement')->will($this->returnValue(null));
try {
$productProvider->basketMergeProduct($basket, $product, $basketElement);
$this->fail('->basketMergeProduct() should throw a \\RuntimeException for an invalid product ID');
} catch (\Exception $e) {
$this->assertInstanceOf('\\RuntimeException', $e);
}
// Test a valid workflow
$basket = $this->getMockBuilder('Sonata\\Component\\Basket\\BasketInterface')->getMock();
$currency = new Currency();
$currency->setLabel('EUR');
$basket->expects($this->any())->method('getCurrency')->will($this->returnValue($currency));
$product = $this->getMockBuilder('Sonata\\Component\\Product\\ProductInterface')->getMock();
$basketElement = $this->getMockBuilder('Sonata\\Component\\Basket\\BasketElementInterface')->getMock();
$basketElement->expects($this->any())->method('getQuantity')->will($this->returnValue(1));
$newBasketElement = $this->getMockBuilder('Sonata\\Component\\Basket\\BasketElementInterface')->getMock();
$productProvider = $this->createNewProductProvider();
$basket->expects($this->any())->method('hasProduct')->will($this->returnValue(true));
$basket->expects($this->any())->method('getElement')->will($this->returnValue($basketElement));
$this->assertInstanceOf('Sonata\\Component\\Basket\\BasketElementInterface', $productProvider->basketMergeProduct($basket, $product, $newBasketElement));
}