From 6604cf984d35a8aef75b0a1a25f7d0eca665ae88 Mon Sep 17 00:00:00 2001 From: Joel Male Date: Mon, 26 Aug 2024 10:57:02 +1000 Subject: [PATCH] fix tests & validation errors --- src/Cart.php | 16 +++++++++++----- tests/Unit/CartTest.php | 35 +++++++++++++++++++---------------- 2 files changed, 30 insertions(+), 21 deletions(-) diff --git a/src/Cart.php b/src/Cart.php index 8893c19..e6ece4f 100644 --- a/src/Cart.php +++ b/src/Cart.php @@ -153,7 +153,7 @@ public function add( $this->add( $item['id'], $item['name'], - $item['price'], + isset($item['price']) ? $item['price'] : null, $item['quantity'], Helpers::issetAndHasValueOrAssignDefault($item['attributes'], []), Helpers::issetAndHasValueOrAssignDefault($item['conditions'], []), @@ -164,8 +164,7 @@ public function add( $this->add( $id['id'], $id['name'], - // isset($id['price']) ? $id['price'] : null, - $id['price'], + isset($id['price']) ? $id['price'] : null, $id['quantity'], Helpers::issetAndHasValueOrAssignDefault($id['attributes'], []), Helpers::issetAndHasValueOrAssignDefault($id['conditions'], []), @@ -706,8 +705,15 @@ protected function validate($item) $validator = CartItemValidator::make($item, $rules); if ($validator->fails()) { - // if the error is due to quantity - if ($validator->errors()->first('quantity') === 'The quantity must be at least 0.1.') { + if ($validator->errors()->first('id') === 'validation.required') { + throw new InvalidItemException('The id field is required.'); + } + + if ($validator->errors()->first('name') === 'validation.required') { + throw new InvalidItemException('The name field is required.'); + } + + if ($validator->errors()->first('quantity') === 'validation.min.numeric') { throw new InvalidItemException('The quantity must be at least 0.1.'); } } diff --git a/tests/Unit/CartTest.php b/tests/Unit/CartTest.php index 1e8d261..73cb23e 100644 --- a/tests/Unit/CartTest.php +++ b/tests/Unit/CartTest.php @@ -60,7 +60,7 @@ expect($this->cart->getContent()->count())->toEqual(1, 'Cart content should be 1'); expect($this->cart->getContent()->first()['id'])->toEqual(455, 'Item added has ID of 455 so first content ID should be 455'); expect($this->cart->getTotal())->toEqual(0, 'Total should be 0'); - })->only(); + }); test('can add an item without attributes', function () { $item = [ @@ -296,6 +296,24 @@ expect($item['quantity'])->toEqual(9.9, 'Item quantity should be 9.9'); }); + + test('should throw an exception when no quantity is provided', function () { + $this->expectException('Wearepixel\Cart\Exceptions\InvalidItemException'); + $this->expectExceptionMessage('The quantity must be at least 0.1.'); + $this->cart->add(455, 'Sample Item', 100.99, 0, []); + }); + + test('should throw an exception when no id is provided', function () { + $this->expectException('Wearepixel\Cart\Exceptions\InvalidItemException'); + $this->expectExceptionMessage('The id field is required.'); + $this->cart->add('', 'Sample Item', 100.99, 2, []); + }); + + test('should throw an exception when no name is provided', function () { + $this->expectException('Wearepixel\Cart\Exceptions\InvalidItemException'); + $this->expectExceptionMessage('The name field is required.'); + $this->cart->add(523, '', 100.99, 2, []); + }); }); test('cart items attributes', function () { @@ -555,21 +573,6 @@ expect($item['quantity'])->toEqual(3, 'Item quantity of with item ID of 456 should now be reduced to 2'); }); -test('should throw exception when provided invalid values scenario one', function () { - $this->expectException('Wearepixel\Cart\Exceptions\InvalidItemException'); - $this->cart->add(455, 'Sample Item', 100.99, 0, []); -}); - -test('should throw exception when provided invalid values scenario two', function () { - $this->expectException('Wearepixel\Cart\Exceptions\InvalidItemException'); - $this->cart->add('', 'Sample Item', 100.99, 2, []); -}); - -test('should throw exception when provided invalid values scenario three', function () { - $this->expectException('Wearepixel\Cart\Exceptions\InvalidItemException'); - $this->cart->add(523, '', 100.99, 2, []); -}); - test('clearing cart', function () { $items = [ [