Added events, updated tests, some docblock updates and fixed bug on empty search param

This commit is contained in:
Rob Gloudemans
2014-08-22 10:55:56 +02:00
parent 47a8b07549
commit ea2eec4f68
2 changed files with 136 additions and 60 deletions

View File

@@ -7,14 +7,14 @@ class Cart {
/** /**
* Session class instance * Session class instance
* *
* @var Session * @var Illuminate\Session\SessionManager
*/ */
protected $session; protected $session;
/** /**
* Event class instance * Event class instance
* *
* @var Event * @var Illuminate\Events\Dispatcher
*/ */
protected $event; protected $event;
@@ -42,8 +42,8 @@ class Cart {
/** /**
* Constructor * Constructor
* *
* @param Session $session Session class instance * @param Illuminate\Session\SessionManager $session Session class instance
* @param Event $event Event class instance * @param Illuminate\Events\Dispatcher $event Event class instance
*/ */
public function __construct($session, $event) public function __construct($session, $event)
{ {
@@ -56,8 +56,8 @@ class Cart {
/** /**
* Set the current cart instance * Set the current cart instance
* *
* @param string $instance Cart instance name * @param string $instance Cart instance name
* @return Cart * @return Gloudemans\Shoppingcart\Cart
*/ */
public function instance($instance = null) public function instance($instance = null)
{ {
@@ -90,13 +90,13 @@ class Cart {
/** /**
* Add a row to the cart * Add a row to the cart
* *
* @param string|Array $id Unique ID of the item|Item formated as array|Array of items * @param string|array $id Unique ID of the item|Item formated as array|Array of items
* @param string $name Name of the item * @param string $name Name of the item
* @param int $qty Item qty to add to the cart * @param int $qty Item qty to add to the cart
* @param float $price Price of one item * @param float $price Price of one item
* @param Array $options Array of additional options, such as 'size' or 'color' * @param array $options Array of additional options, such as 'size' or 'color'
*/ */
public function add($id, $name = null, $qty = null, $price = null, Array $options = array()) public function add($id, $name = null, $qty = null, $price = null, array $options = array())
{ {
// If the first parameter is an array we need to call the add() function again // If the first parameter is an array we need to call the add() function again
if(is_array($id)) if(is_array($id))
@@ -110,32 +110,45 @@ class Cart {
foreach($id as $item) foreach($id as $item)
{ {
$options = isset($item['options']) ? $item['options'] : array(); $options = array_get($item, 'options', array());
$this->addRow($item['id'], $item['name'], $item['qty'], $item['price'], $options); $this->addRow($item['id'], $item['name'], $item['qty'], $item['price'], $options);
} }
// Fire the cart.batched event
$this->event->fire('cart.batched', $id);
return; return;
} }
$options = isset($id['options']) ? $id['options'] : array(); $options = array_get($id, 'options', array());
// Fire the cart.add event // Fire the cart.add event
$this->event->fire('cart.add', array_merge($id, array('options' => $options))); $this->event->fire('cart.add', array_merge($id, array('options' => $options)));
return $this->addRow($id['id'], $id['name'], $id['qty'], $id['price'], $options); $result = $this->addRow($id['id'], $id['name'], $id['qty'], $id['price'], $options);
// Fire the cart.added event
$this->event->fire('cart.added', array_merge($id, array('options' => $options)));
return $result;
} }
// Fire the cart.add event // Fire the cart.add event
$this->event->fire('cart.add', compact('id', 'name', 'qty', 'price', 'options')); $this->event->fire('cart.add', compact('id', 'name', 'qty', 'price', 'options'));
return $this->addRow($id, $name, $qty, $price, $options); $result = $this->addRow($id, $name, $qty, $price, $options);
// Fire the cart.added event
$this->event->fire('cart.added', compact('id', 'name', 'qty', 'price', 'options'));
return $result;
} }
/** /**
* Update the quantity of one row of the cart * Update the quantity of one row of the cart
* *
* @param string $rowId The rowid of the item you want to update * @param string $rowId The rowid of the item you want to update
* @param integer|Array $attribute New quantity of the item|Array of attributes to update * @param integer|array $attribute New quantity of the item|Array of attributes to update
* @return boolean * @return boolean
*/ */
public function update($rowId, $attribute) public function update($rowId, $attribute)
@@ -147,19 +160,29 @@ class Cart {
// Fire the cart.update event // Fire the cart.update event
$this->event->fire('cart.update', $rowId); $this->event->fire('cart.update', $rowId);
return $this->updateAttribute($rowId, $attribute); $result = $this->updateAttribute($rowId, $attribute);
// Fire the cart.updated event
$this->event->fire('cart.updated', $rowId);
return $result;
} }
// Fire the cart.update event // Fire the cart.update event
$this->event->fire('cart.update', $rowId); $this->event->fire('cart.update', $rowId);
return $this->updateQty($rowId, $attribute); $result = $this->updateQty($rowId, $attribute);
// Fire the cart.updated event
$this->event->fire('cart.updated', $rowId);
return $result;
} }
/** /**
* Remove a row from the cart * Remove a row from the cart
* *
* @param string $rowId The rowid of the item * @param string $rowId The rowid of the item
* @return boolean * @return boolean
*/ */
public function remove($rowId) public function remove($rowId)
@@ -173,14 +196,17 @@ class Cart {
$cart->forget($rowId); $cart->forget($rowId);
// Fire the cart.removed event
$this->event->fire('cart.removed', $rowId);
return $this->updateCart($cart); return $this->updateCart($cart);
} }
/** /**
* Get a row of the cart by its ID * Get a row of the cart by its ID
* *
* @param string $rowId The ID of the row to fetch * @param string $rowId The ID of the row to fetch
* @return CartCollection * @return Gloudemans\Shoppingcart\CartCollection
*/ */
public function get($rowId) public function get($rowId)
{ {
@@ -192,7 +218,7 @@ class Cart {
/** /**
* Get the cart content * Get the cart content
* *
* @return CartRowCollection * @return Gloudemans\Shoppingcart\CartRowCollection
*/ */
public function content() public function content()
{ {
@@ -211,7 +237,12 @@ class Cart {
// Fire the cart.destroy event // Fire the cart.destroy event
$this->event->fire('cart.destroy'); $this->event->fire('cart.destroy');
return $this->updateCart(NULL); $result = $this->updateCart(NULL);
// Fire the cart.destroyed event
$this->event->fire('cart.destroyed');
return $result;
} }
/** /**
@@ -240,7 +271,7 @@ class Cart {
/** /**
* Get the number of items in the cart * Get the number of items in the cart
* *
* @param boolean $totalItems Get all the items (when false, will return the number of rows) * @param boolean $totalItems Get all the items (when false, will return the number of rows)
* @return int * @return int
*/ */
public function count($totalItems = true) public function count($totalItems = true)
@@ -265,11 +296,13 @@ class Cart {
/** /**
* Search if the cart has a item * Search if the cart has a item
* *
* @param Array $search An array with the item ID and optional options * @param array $search An array with the item ID and optional options
* @return Array|boolean * @return array|boolean
*/ */
public function search(Array $search) public function search(array $search)
{ {
if(empty($search)) return false;
foreach($this->getContent() as $item) foreach($this->getContent() as $item)
{ {
$found = $item->search($search); $found = $item->search($search);
@@ -286,13 +319,13 @@ class Cart {
/** /**
* Add row to the cart * Add row to the cart
* *
* @param string $id Unique ID of the item * @param string $id Unique ID of the item
* @param string $name Name of the item * @param string $name Name of the item
* @param int $qty Item qty to add to the cart * @param int $qty Item qty to add to the cart
* @param float $price Price of one item * @param float $price Price of one item
* @param Array $options Array of additional options, such as 'size' or 'color' * @param array $options Array of additional options, such as 'size' or 'color'
*/ */
protected function addRow($id, $name, $qty, $price, Array $options = array()) protected function addRow($id, $name, $qty, $price, array $options = array())
{ {
if(empty($id) || empty($name) || empty($qty) || ! isset($price)) if(empty($id) || empty($name) || empty($qty) || ! isset($price))
{ {
@@ -329,8 +362,8 @@ class Cart {
/** /**
* Generate a unique id for the new row * Generate a unique id for the new row
* *
* @param string $id Unique ID of the item * @param string $id Unique ID of the item
* @param Array $options Array of additional options, such as 'size' or 'color' * @param array $options Array of additional options, such as 'size' or 'color'
* @return boolean * @return boolean
*/ */
protected function generateRowId($id, $options) protected function generateRowId($id, $options)
@@ -354,7 +387,7 @@ class Cart {
/** /**
* Update the cart * Update the cart
* *
* @param CartCollection $cart The new cart content * @param Gloudemans\Shoppingcart\CartCollection $cart The new cart content
* @return void * @return void
*/ */
protected function updateCart($cart) protected function updateCart($cart)
@@ -365,7 +398,7 @@ class Cart {
/** /**
* Get the carts content, if there is no cart content set yet, return a new empty Collection * Get the carts content, if there is no cart content set yet, return a new empty Collection
* *
* @return Illuminate\Support\Collection * @return Gloudemans\Shoppingcart\CartCollection
*/ */
protected function getContent() protected function getContent()
{ {
@@ -387,9 +420,9 @@ class Cart {
/** /**
* Update a row if the rowId already exists * Update a row if the rowId already exists
* *
* @param string $rowId The ID of the row to update * @param string $rowId The ID of the row to update
* @param integer $qty The quantity to add to the row * @param integer $qty The quantity to add to the row
* @return Collection * @return Gloudemans\Shoppingcart\CartCollection
*/ */
protected function updateRow($rowId, $attributes) protected function updateRow($rowId, $attributes)
{ {
@@ -423,13 +456,13 @@ class Cart {
/** /**
* Create a new row Object * Create a new row Object
* *
* @param string $rowId The ID of the new row * @param string $rowId The ID of the new row
* @param string $id Unique ID of the item * @param string $id Unique ID of the item
* @param string $name Name of the item * @param string $name Name of the item
* @param int $qty Item qty to add to the cart * @param int $qty Item qty to add to the cart
* @param float $price Price of one item * @param float $price Price of one item
* @param Array $options Array of additional options, such as 'size' or 'color' * @param array $options Array of additional options, such as 'size' or 'color'
* @return Collection * @return Gloudemans\Shoppingcart\CartCollection
*/ */
protected function createRow($rowId, $id, $name, $qty, $price, $options) protected function createRow($rowId, $id, $name, $qty, $price, $options)
{ {
@@ -453,9 +486,9 @@ class Cart {
/** /**
* Update the quantity of a row * Update the quantity of a row
* *
* @param string $rowId The ID of the row * @param string $rowId The ID of the row
* @param int $qty The qty to add * @param int $qty The qty to add
* @return CartCollection * @return Gloudemans\Shoppingcart\CartCollection
*/ */
protected function updateQty($rowId, $qty) protected function updateQty($rowId, $qty)
{ {
@@ -470,9 +503,9 @@ class Cart {
/** /**
* Update an attribute of the row * Update an attribute of the row
* *
* @param string $rowId The ID of the row * @param string $rowId The ID of the row
* @param Array $attributes An array of attributes to update * @param array $attributes An array of attributes to update
* @return CartCollection * @return Gloudemans\Shoppingcart\CartCollection
*/ */
protected function updateAttribute($rowId, $attributes) protected function updateAttribute($rowId, $attributes)
{ {
@@ -482,14 +515,12 @@ class Cart {
/** /**
* Check if the array is a multidimensional array * Check if the array is a multidimensional array
* *
* @param Array $array The array to check * @param array $array The array to check
* @return boolean * @return boolean
*/ */
protected function is_multi(Array $array) protected function is_multi(array $array)
{ {
$first = array_shift($array); return is_array(head($array));
return is_array($first);
} }
} }

View File

@@ -31,6 +31,7 @@ class CartTest extends PHPUnit_Framework_TestCase {
public function testCartCanAdd() public function testCartCanAdd()
{ {
$this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array')); $this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.added', m::type('array'));
$this->cart->add('293ad', 'Product 1', 1, 9.99, array('size' => 'large')); $this->cart->add('293ad', 'Product 1', 1, 9.99, array('size' => 'large'));
} }
@@ -38,6 +39,7 @@ class CartTest extends PHPUnit_Framework_TestCase {
public function testCartCanAddArray() public function testCartCanAddArray()
{ {
$this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array')); $this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.added', m::type('array'));
$this->cart->add(array('id' => '293ad', 'name' => 'Product 1', 'qty' => 1, 'price' => 9.99, 'options' => array('size' => 'large'))); $this->cart->add(array('id' => '293ad', 'name' => 'Product 1', 'qty' => 1, 'price' => 9.99, 'options' => array('size' => 'large')));
} }
@@ -45,6 +47,7 @@ class CartTest extends PHPUnit_Framework_TestCase {
public function testCartCanAddBatch() public function testCartCanAddBatch()
{ {
$this->events->shouldReceive('fire')->once()->with('cart.batch', m::type('array')); $this->events->shouldReceive('fire')->once()->with('cart.batch', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.batched', m::type('array'));
$this->cart->add(array( $this->cart->add(array(
array('id' => '293ad', 'name' => 'Product 1', 'qty' => 1, 'price' => 10.00), array('id' => '293ad', 'name' => 'Product 1', 'qty' => 1, 'price' => 10.00),
@@ -55,6 +58,7 @@ class CartTest extends PHPUnit_Framework_TestCase {
public function testCartCanAddMultipleOptions() public function testCartCanAddMultipleOptions()
{ {
$this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array')); $this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.added', m::type('array'));
$this->cart->add('293ad', 'Product 1', 1, 9.99, array('size' => 'large', 'color' => 'red')); $this->cart->add('293ad', 'Product 1', 1, 9.99, array('size' => 'large', 'color' => 'red'));
@@ -98,6 +102,7 @@ class CartTest extends PHPUnit_Framework_TestCase {
public function testCartCanUpdateExistingItem() public function testCartCanUpdateExistingItem()
{ {
$this->events->shouldReceive('fire')->twice()->with('cart.add', m::type('array')); $this->events->shouldReceive('fire')->twice()->with('cart.add', m::type('array'));
$this->events->shouldReceive('fire')->twice()->with('cart.added', m::type('array'));
$this->cart->add('293ad', 'Product 1', 1, 9.99); $this->cart->add('293ad', 'Product 1', 1, 9.99);
$this->cart->add('293ad', 'Product 1', 1, 9.99); $this->cart->add('293ad', 'Product 1', 1, 9.99);
@@ -108,7 +113,9 @@ class CartTest extends PHPUnit_Framework_TestCase {
public function testCartCanUpdateQty() public function testCartCanUpdateQty()
{ {
$this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array')); $this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.added', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.update', m::type('string')); $this->events->shouldReceive('fire')->once()->with('cart.update', m::type('string'));
$this->events->shouldReceive('fire')->once()->with('cart.updated', m::type('string'));
$this->cart->add('293ad', 'Product 1', 1, 9.99); $this->cart->add('293ad', 'Product 1', 1, 9.99);
$this->cart->update('8cbf215baa3b757e910e5305ab981172', 2); $this->cart->update('8cbf215baa3b757e910e5305ab981172', 2);
@@ -119,7 +126,9 @@ class CartTest extends PHPUnit_Framework_TestCase {
public function testCartCanUpdateItem() public function testCartCanUpdateItem()
{ {
$this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array')); $this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.added', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.update', m::type('string')); $this->events->shouldReceive('fire')->once()->with('cart.update', m::type('string'));
$this->events->shouldReceive('fire')->once()->with('cart.updated', m::type('string'));
$this->cart->add('293ad', 'Product 1', 1, 9.99); $this->cart->add('293ad', 'Product 1', 1, 9.99);
$this->cart->update('8cbf215baa3b757e910e5305ab981172', array('name' => 'Product 2')); $this->cart->update('8cbf215baa3b757e910e5305ab981172', array('name' => 'Product 2'));
@@ -130,7 +139,9 @@ class CartTest extends PHPUnit_Framework_TestCase {
public function testCartCanUpdateOptions() public function testCartCanUpdateOptions()
{ {
$this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array')); $this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.added', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.update', m::type('string')); $this->events->shouldReceive('fire')->once()->with('cart.update', m::type('string'));
$this->events->shouldReceive('fire')->once()->with('cart.updated', m::type('string'));
$this->cart->add('293ad', 'Product 1', 1, 9.99, array('size' => 'S')); $this->cart->add('293ad', 'Product 1', 1, 9.99, array('size' => 'S'));
$this->cart->update('9be7e69d236ca2d09d2e0838d2c59aeb', array('options' => array('size' => 'L'))); $this->cart->update('9be7e69d236ca2d09d2e0838d2c59aeb', array('options' => array('size' => 'L')));
@@ -149,7 +160,9 @@ class CartTest extends PHPUnit_Framework_TestCase {
public function testCartCanRemove() public function testCartCanRemove()
{ {
$this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array')); $this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.added', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.remove', m::type('string')); $this->events->shouldReceive('fire')->once()->with('cart.remove', m::type('string'));
$this->events->shouldReceive('fire')->once()->with('cart.removed', m::type('string'));
$this->cart->add('293ad', 'Product 1', 1, 9.99); $this->cart->add('293ad', 'Product 1', 1, 9.99);
$this->cart->remove('8cbf215baa3b757e910e5305ab981172'); $this->cart->remove('8cbf215baa3b757e910e5305ab981172');
@@ -160,8 +173,11 @@ class CartTest extends PHPUnit_Framework_TestCase {
public function testCartCanRemoveOnUpdate() public function testCartCanRemoveOnUpdate()
{ {
$this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array')); $this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.added', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.update', m::type('string')); $this->events->shouldReceive('fire')->once()->with('cart.update', m::type('string'));
$this->events->shouldReceive('fire')->once()->with('cart.updated', m::type('string'));
$this->events->shouldReceive('fire')->once()->with('cart.remove', m::type('string')); $this->events->shouldReceive('fire')->once()->with('cart.remove', m::type('string'));
$this->events->shouldReceive('fire')->once()->with('cart.removed', m::type('string'));
$this->cart->add('293ad', 'Product 1', 1, 9.99); $this->cart->add('293ad', 'Product 1', 1, 9.99);
$this->cart->update('8cbf215baa3b757e910e5305ab981172', 0); $this->cart->update('8cbf215baa3b757e910e5305ab981172', 0);
@@ -172,8 +188,11 @@ class CartTest extends PHPUnit_Framework_TestCase {
public function testCartCanRemoveOnNegativeUpdate() public function testCartCanRemoveOnNegativeUpdate()
{ {
$this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array')); $this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.added', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.update', m::type('string')); $this->events->shouldReceive('fire')->once()->with('cart.update', m::type('string'));
$this->events->shouldReceive('fire')->once()->with('cart.updated', m::type('string'));
$this->events->shouldReceive('fire')->once()->with('cart.remove', m::type('string')); $this->events->shouldReceive('fire')->once()->with('cart.remove', m::type('string'));
$this->events->shouldReceive('fire')->once()->with('cart.removed', m::type('string'));
$this->cart->add('293ad', 'Product 1', 1, 9.99); $this->cart->add('293ad', 'Product 1', 1, 9.99);
$this->cart->update('8cbf215baa3b757e910e5305ab981172', -1); $this->cart->update('8cbf215baa3b757e910e5305ab981172', -1);
@@ -184,6 +203,7 @@ class CartTest extends PHPUnit_Framework_TestCase {
public function testCartCanGet() public function testCartCanGet()
{ {
$this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array')); $this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.added', m::type('array'));
$this->cart->add('293ad', 'Product 1', 1, 9.99); $this->cart->add('293ad', 'Product 1', 1, 9.99);
$item = $this->cart->get('8cbf215baa3b757e910e5305ab981172'); $item = $this->cart->get('8cbf215baa3b757e910e5305ab981172');
@@ -194,6 +214,7 @@ class CartTest extends PHPUnit_Framework_TestCase {
public function testCartCanGetContent() public function testCartCanGetContent()
{ {
$this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array')); $this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.added', m::type('array'));
$this->cart->add('293ad', 'Product 1', 1, 9.99); $this->cart->add('293ad', 'Product 1', 1, 9.99);
@@ -204,7 +225,9 @@ class CartTest extends PHPUnit_Framework_TestCase {
public function testCartCanDestroy() public function testCartCanDestroy()
{ {
$this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array')); $this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.added', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.destroy'); $this->events->shouldReceive('fire')->once()->with('cart.destroy');
$this->events->shouldReceive('fire')->once()->with('cart.destroyed');
$this->cart->add('293ad', 'Product 1', 1, 9.99); $this->cart->add('293ad', 'Product 1', 1, 9.99);
$this->cart->destroy(); $this->cart->destroy();
@@ -216,6 +239,7 @@ class CartTest extends PHPUnit_Framework_TestCase {
public function testCartCanGetTotal() public function testCartCanGetTotal()
{ {
$this->events->shouldReceive('fire')->twice()->with('cart.add', m::type('array')); $this->events->shouldReceive('fire')->twice()->with('cart.add', m::type('array'));
$this->events->shouldReceive('fire')->twice()->with('cart.added', m::type('array'));
$this->cart->add('293ad', 'Product 1', 1, 9.99); $this->cart->add('293ad', 'Product 1', 1, 9.99);
$this->cart->add('986se', 'Product 2', 1, 19.99); $this->cart->add('986se', 'Product 2', 1, 19.99);
@@ -226,6 +250,7 @@ class CartTest extends PHPUnit_Framework_TestCase {
public function testCartCanGetItemCount() public function testCartCanGetItemCount()
{ {
$this->events->shouldReceive('fire')->twice()->with('cart.add', m::type('array')); $this->events->shouldReceive('fire')->twice()->with('cart.add', m::type('array'));
$this->events->shouldReceive('fire')->twice()->with('cart.added', m::type('array'));
$this->cart->add('293ad', 'Product 1', 1, 9.99); $this->cart->add('293ad', 'Product 1', 1, 9.99);
$this->cart->add('986se', 'Product 2', 2, 19.99); $this->cart->add('986se', 'Product 2', 2, 19.99);
@@ -236,6 +261,7 @@ class CartTest extends PHPUnit_Framework_TestCase {
public function testCartCanGetRowCount() public function testCartCanGetRowCount()
{ {
$this->events->shouldReceive('fire')->twice()->with('cart.add', m::type('array')); $this->events->shouldReceive('fire')->twice()->with('cart.add', m::type('array'));
$this->events->shouldReceive('fire')->twice()->with('cart.added', m::type('array'));
$this->cart->add('293ad', 'Product 1', 1, 9.99); $this->cart->add('293ad', 'Product 1', 1, 9.99);
$this->cart->add('986se', 'Product 2', 2, 19.99); $this->cart->add('986se', 'Product 2', 2, 19.99);
@@ -246,6 +272,7 @@ class CartTest extends PHPUnit_Framework_TestCase {
public function testCartCanSearch() public function testCartCanSearch()
{ {
$this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array')); $this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.added', m::type('array'));
$this->cart->add('293ad', 'Product 1', 1, 9.99); $this->cart->add('293ad', 'Product 1', 1, 9.99);
@@ -256,6 +283,7 @@ class CartTest extends PHPUnit_Framework_TestCase {
public function testCartCanHaveMultipleInstances() public function testCartCanHaveMultipleInstances()
{ {
$this->events->shouldReceive('fire')->twice()->with('cart.add', m::type('array')); $this->events->shouldReceive('fire')->twice()->with('cart.add', m::type('array'));
$this->events->shouldReceive('fire')->twice()->with('cart.added', m::type('array'));
$this->cart->instance('firstInstance')->add('293ad', 'Product 1', 1, 9.99); $this->cart->instance('firstInstance')->add('293ad', 'Product 1', 1, 9.99);
$this->cart->instance('secondInstance')->add('986se', 'Product 2', 1, 19.99); $this->cart->instance('secondInstance')->add('986se', 'Product 2', 1, 19.99);
@@ -266,6 +294,18 @@ class CartTest extends PHPUnit_Framework_TestCase {
$this->assertFalse($this->cart->instance('secondInstance')->content()->has('8cbf215baa3b757e910e5305ab981172')); $this->assertFalse($this->cart->instance('secondInstance')->content()->has('8cbf215baa3b757e910e5305ab981172'));
} }
public function testCartCanSearchInMultipleInstances()
{
$this->events->shouldReceive('fire')->twice()->with('cart.add', m::type('array'));
$this->events->shouldReceive('fire')->twice()->with('cart.added', m::type('array'));
$this->cart->instance('firstInstance')->add('293ad', 'Product 1', 1, 9.99);
$this->cart->instance('secondInstance')->add('986se', 'Product 2', 1, 19.99);
$this->assertEquals($this->cart->instance('firstInstance')->search(array('id' => '293ad')), ['8cbf215baa3b757e910e5305ab981172']);
$this->assertEquals($this->cart->instance('secondInstance')->search(array('id' => '986se')), ['22eae2b9c10083d6631aaa023106871a']);
}
/** /**
* @expectedException Gloudemans\Shoppingcart\Exceptions\ShoppingcartInstanceException * @expectedException Gloudemans\Shoppingcart\Exceptions\ShoppingcartInstanceException
*/ */
@@ -277,6 +317,7 @@ class CartTest extends PHPUnit_Framework_TestCase {
public function testCartReturnsCartCollection() public function testCartReturnsCartCollection()
{ {
$this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array')); $this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.added', m::type('array'));
$this->cart->add('293ad', 'Product 1', 1, 9.99); $this->cart->add('293ad', 'Product 1', 1, 9.99);
@@ -286,6 +327,7 @@ class CartTest extends PHPUnit_Framework_TestCase {
public function testCartCollectionHasCartRowCollection() public function testCartCollectionHasCartRowCollection()
{ {
$this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array')); $this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.added', m::type('array'));
$this->cart->add('293ad', 'Product 1', 1, 9.99); $this->cart->add('293ad', 'Product 1', 1, 9.99);
@@ -295,6 +337,7 @@ class CartTest extends PHPUnit_Framework_TestCase {
public function testCartRowCollectionHasCartRowOptionsCollection() public function testCartRowCollectionHasCartRowOptionsCollection()
{ {
$this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array')); $this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.added', m::type('array'));
$this->cart->add('293ad', 'Product 1', 1, 9.99); $this->cart->add('293ad', 'Product 1', 1, 9.99);
@@ -319,6 +362,7 @@ class CartTest extends PHPUnit_Framework_TestCase {
public function testCartCanReturnModelProperties() public function testCartCanReturnModelProperties()
{ {
$this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array')); $this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.added', m::type('array'));
$this->cart->associate('TestProduct')->add('293ad', 'Product 1', 1, 9.99); $this->cart->associate('TestProduct')->add('293ad', 'Product 1', 1, 9.99);
@@ -328,6 +372,7 @@ class CartTest extends PHPUnit_Framework_TestCase {
public function testCartCanReturnNamespadedModelProperties() public function testCartCanReturnNamespadedModelProperties()
{ {
$this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array')); $this->events->shouldReceive('fire')->once()->with('cart.add', m::type('array'));
$this->events->shouldReceive('fire')->once()->with('cart.added', m::type('array'));
$this->cart->associate('TestProduct', 'Acme\Test\Models')->add('293ad', 'Product 1', 1, 9.99); $this->cart->associate('TestProduct', 'Acme\Test\Models')->add('293ad', 'Product 1', 1, 9.99);