public function testGettersSetters()
{
$currency = $this->getMock('Sonata\\Component\\Currency\\Currency');
$productProvider = $this->getMock('Sonata\\Component\\Product\\ProductProviderInterface');
$productManager = $this->getMock('Sonata\\Component\\Product\\ProductManagerInterface');
$productDefinition = new ProductDefinition($productProvider, $productManager);
$basketElement = new BasketElement();
$basketElement->setProductDefinition($productDefinition);
$this->assertEquals(0, $basketElement->getVatRate());
$this->assertEquals(0, $basketElement->getUnitPrice($currency));
$this->assertFalse($basketElement->isValid());
$provider = $this->getMock('Sonata\\Component\\Product\\ProductProviderInterface');
$manager = $this->getMock('Sonata\\Component\\Product\\ProductManagerInterface');
$productDefinition = new ProductDefinition($provider, $manager);
// Tests getProduct
$this->assertNull($basketElement->getProduct());
$basketElement->setProductDefinition($productDefinition);
$this->assertNull($basketElement->getProduct());
$product = $this->getMock('Sonata\\Component\\Product\\ProductInterface');
$product->expects($this->any())->method('getId')->will($this->returnValue(42));
$basketElement->setProduct('product_code', $product);
$this->assertEquals($product, $basketElement->getProduct());
// Tests setProductId
$basketElement->setProductId(42);
$this->assertEquals(42, $basketElement->getProductId());
$basketElement->setProductId(24);
$this->assertNull($basketElement->getProductId());
$manager->expects($this->any())->method('findOneBy')->will($this->returnValue($product));
$basketElement->setProductDefinition(new ProductDefinition($provider, $manager));
$basketElement->setProductId(42);
$basketElement->setProduct('product_code', $product);
// Done by the provider hereby mocked, hence we do it manually
$this->assertEquals($product->getId(), $basketElement->getProductId());
// Options
$options = array('option1' => 'value1', 'option2' => 'value2');
$basketElement->setOptions($options);
$this->assertNull($basketElement->getOption('unexisting_option'));
$this->assertEquals(42, $basketElement->getOption('unexisting_option', 42));
$this->assertEquals('value1', $basketElement->getOption('option1'));
$this->assertEquals($options, $basketElement->getOptions());
$basketElement->setOption('option3', 'value3');
$this->assertEquals('value3', $basketElement->getOption('option3'));
// Other getters & setters
$this->assertEquals($provider, $basketElement->getProductProvider());
$this->assertEquals($manager, $basketElement->getProductManager());
$this->assertEquals('product_code', $basketElement->getProductCode());
$basketElement->setDelete(false);
$this->assertFalse($basketElement->getDelete());
}