Sonata\Test\ProductBundle\Model\BaseProductProviderTest::testBasketMergeProduct PHP Method

testBasketMergeProduct() public method

    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));
    }