From 8f442f51e0ccc5b9f49589b7c5a6845a23864b40 Mon Sep 17 00:00:00 2001 From: Joel Male Date: Tue, 24 Mar 2026 14:04:48 +1000 Subject: [PATCH] chore: migrate to wearepixel/laravel-cart --- README.md | 28 ++--- composer.json | 10 +- composer.lock | 107 +++++-------------- docs/laravel-cart.png | Bin 10195 -> 42022 bytes src/Cart.php | 22 ++-- src/CartCollection.php | 2 +- src/CartCondition.php | 8 +- src/CartConditionCollection.php | 2 +- src/CartServiceProvider.php | 2 +- src/CartSession.php | 4 +- src/Exceptions/InvalidConditionException.php | 2 +- src/Exceptions/InvalidItemException.php | 2 +- src/Exceptions/UnknownModelException.php | 2 +- src/Facades/CartFacade.php | 2 +- src/Helpers/Helpers.php | 2 +- src/ItemAttributeCollection.php | 2 +- src/ItemCollection.php | 6 +- src/Validators/CartConditionValidator.php | 2 +- src/Validators/CartItemValidator.php | 2 +- src/Validators/Validator.php | 2 +- tests/Helpers/ConfigDatabaseMock.php | 2 +- tests/Helpers/MockCartModel.php | 2 +- tests/Helpers/MockProduct.php | 2 +- tests/Helpers/SessionMock.php | 2 +- tests/Unit/CartConditionsTest.php | 8 +- tests/Unit/CartTest.php | 20 ++-- tests/Unit/CartTestEventsTest.php | 14 +-- tests/Unit/CartTestMultipleInstancesTest.php | 4 +- tests/Unit/DatabaseCartTest.php | 6 +- tests/Unit/ItemTest.php | 12 +-- tests/Unit/ItemTestOtherFormatTest.php | 4 +- 31 files changed, 115 insertions(+), 170 deletions(-) diff --git a/README.md b/README.md index b155ac1..6d8867f 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,17 @@ [![Laravel Cart](./docs/laravel-cart.png)](https://joelmale.com) -[![Latest Version on Packagist](https://img.shields.io/packagist/v/joelwmale/laravel-cart.svg?style=flat-square)](https://packagist.org/packages/joelwmale/laravel-cart) -[![GitHub Tests Action Status](https://img.shields.io/github/actions/workflow/status/joelwmale/laravel-cart/tests.yml?branch=master&label=Tests)](https://github.com/joelwmale/laravel-cart/actions?query=workflow%3ATests+branch%3Amaster) -[![Total Downloads](https://img.shields.io/packagist/dt/joelwmale/laravel-cart.svg?style=flat-square)](https://packagist.org/packages/joelwmale/laravel-cart) -[![GitHub last commit](https://img.shields.io/github/last-commit/joelwmale/laravel-cart)](#) -[![License](https://poser.pugx.org/joelwmale/laravel-cart/license.svg)](https://packagist.org/packages/joelwmale/laravel-cart) +[![Latest Version on Packagist](https://img.shields.io/packagist/v/wearepixel/laravel-cart.svg?style=flat-square)](https://packagist.org/packages/wearepixel/laravel-cart) +[![GitHub Tests Action Status](https://img.shields.io/github/actions/workflow/status/wearepixel/laravel-cart/tests.yml?branch=master&label=Tests)](https://github.com/wearepixel/laravel-cart/actions?query=workflow%3ATests+branch%3Amaster) +[![Total Downloads](https://img.shields.io/packagist/dt/wearepixel/laravel-cart.svg?style=flat-square)](https://packagist.org/packages/wearepixel/laravel-cart) +[![GitHub last commit](https://img.shields.io/github/last-commit/wearepixel/laravel-cart)](#) +[![License](https://poser.pugx.org/wearepixel/laravel-cart/license.svg)](https://packagist.org/packages/wearepixel/laravel-cart) [![Free](https://img.shields.io/badge/free_for_non_commercial_use-brightgreen)](#-license) A Cart Implementation for Laravel. Supported Laravel Versions: 10, 11, and 12. -For Laravel 9.0 and below, please use version [1.0](https://github.com/joelwmale/laravel-cart/releases/tag/1.0.12) +For Laravel 9.0 and below, please use version [1.0](https://github.com/wearepixel/laravel-cart/releases/tag/1.0.12) ## Table of Contents - [Getting Started](#-getting-started) @@ -31,7 +31,7 @@ ### 🔥 Installing Install the package through [Composer](http://getcomposer.org/). -`composer require joelwmale/laravel-cart` +`composer require wearepixel/laravel-cart` ## 🧑‍🍳 Demo @@ -71,7 +71,7 @@ ### ⚙️ Configuration You can publish the configuration file to customize various options. ```php -php artisan vendor:publish --provider="Joelwmale\Cart\CartServiceProvider" --tag="config" +php artisan vendor:publish --provider="Wearepixel\Cart\CartServiceProvider" --tag="config" ``` #### Formatting Numbers @@ -328,7 +328,7 @@ ##### Adding a condition to the cart: **Cart::condition()** ```php // Add a single condition to the cart -$condition = new \Joelwmale\Cart\CartCondition([ +$condition = new \Wearepixel\Cart\CartCondition([ 'name' => 'Tax: 10%', 'type' => 'tax', 'target' => 'subtotal', // this condition will be applied to cart's subtotal when getSubTotal() is called. @@ -341,7 +341,7 @@ ##### Adding a condition to the cart: **Cart::condition()** Cart::condition($condition); // Add multiple conditions -$tax = new \Joelwmale\Cart\CartCondition([ +$tax = new \Wearepixel\Cart\CartCondition([ 'name' => 'Tax: 10%', 'type' => 'tax', 'target' => 'subtotal', // this condition will be applied to cart's subtotal when getSubTotal() is called. @@ -349,7 +349,7 @@ ##### Adding a condition to the cart: **Cart::condition()** 'order' => 2 ]); -$shipping = new \Joelwmale\Cart\CartCondition([ +$shipping = new \Wearepixel\Cart\CartCondition([ 'name' => 'Shipping: $15', 'type' => 'shipping', 'target' => 'subtotal', // this condition will be applied to cart's subtotal when getSubTotal() is called. @@ -364,7 +364,7 @@ ##### Adding a condition to the cart: **Cart::condition()** Cart::condition([$tax, $shipping]); // add condition to only apply on totals, not in subtotal -$shipping = new \Joelwmale\Cart\CartCondition([ +$shipping = new \Wearepixel\Cart\CartCondition([ 'name' => 'Express Shipping $15', 'type' => 'shipping', 'target' => 'total', @@ -556,7 +556,7 @@ #### Conditions on items ```php // lets create first our condition instance -$saleCondition = new \Joelwmale\Cart\CartCondition([ +$saleCondition = new \Wearepixel\Cart\CartCondition([ 'name' => '50% Off', 'type' => 'tax', 'value' => '-50%', @@ -576,7 +576,7 @@ #### Conditions on items Cart::add($product); // You can of course also do multiple conditions on an item -$saleCondition = new \Joelwmale\Cart\CartCondition([ +$saleCondition = new \Wearepixel\Cart\CartCondition([ 'name' => 'SALE 5%', 'type' => 'sale', 'value' => '-5%', diff --git a/composer.json b/composer.json index 360fe10..86ada9e 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,5 @@ { - "name": "joelwmale/laravel-cart", + "name": "wearepixel/laravel-cart", "version": "2.0.0", "description": "A cart implementation for Laravel", "keywords": [ @@ -27,14 +27,14 @@ "illuminate/validation": "^11.0|^12.0|^13.0" }, "require-dev": { - "mockery/mockery": "^1.6", + "mockery/mockery": "^2.0", "laravel/pint": "^1.21", "pestphp/pest": "^3.0", "larapack/dd": "dev-master" }, "autoload": { "psr-4": { - "Joelwmale\\Cart\\": "src/" + "Wearepixel\\Cart\\": "src/" } }, "autoload-dev": { @@ -46,10 +46,10 @@ "extra": { "laravel": { "providers": [ - "Joelwmale\\Cart\\CartServiceProvider" + "Wearepixel\\Cart\\CartServiceProvider" ], "aliases": { - "Cart": "Joelwmale\\Cart\\Facades\\CartFacade" + "Cart": "Wearepixel\\Cart\\Facades\\CartFacade" } } }, diff --git a/composer.lock b/composer.lock index b5d4e06..53484f9 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f793be451d0e7ab030f23c46cb371171", + "content-hash": "ae136c12e9ee350b88f5c7ccae6c8525", "packages": [ { "name": "brick/math", @@ -5123,58 +5123,6 @@ ], "time": "2025-01-25T12:00:00+00:00" }, - { - "name": "hamcrest/hamcrest-php", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "ea3c21ca78e9696dbd7d8f16e1141ca7be241e6a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/ea3c21ca78e9696dbd7d8f16e1141ca7be241e6a", - "reference": "ea3c21ca78e9696dbd7d8f16e1141ca7be241e6a", - "shasum": "" - }, - "require": { - "php": "^5.3|^7.0|^8.0" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" - }, - "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - }, - "autoload": { - "classmap": [ - "hamcrest" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "This is the PHP port of Hamcrest Matchers", - "keywords": [ - "test" - ], - "support": { - "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/master" - }, - "time": "2025-01-01T06:33:44+00:00" - }, { "name": "jean85/pretty-package-versions", "version": "2.x-dev", @@ -5344,37 +5292,45 @@ }, { "name": "mockery/mockery", - "version": "1.7.x-dev", + "version": "2.0.x-dev", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "3f8d3ff1ffe4c552d45c5690c6d825e9310769bf" + "reference": "bfdbf7326fb03fba8dd8c02acba7269e2f7b7abf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/3f8d3ff1ffe4c552d45c5690c6d825e9310769bf", - "reference": "3f8d3ff1ffe4c552d45c5690c6d825e9310769bf", + "url": "https://api.github.com/repos/mockery/mockery/zipball/bfdbf7326fb03fba8dd8c02acba7269e2f7b7abf", + "reference": "bfdbf7326fb03fba8dd8c02acba7269e2f7b7abf", "shasum": "" }, "require": { - "hamcrest/hamcrest-php": "^2.0.1", - "lib-pcre": ">=7.0", - "php": ">=7.3" + "ext-json": "*", + "ext-mbstring": "*", + "ext-pcre": "*", + "php": "^8.1 || ^8.2 || ^8.3" }, "conflict": { "phpunit/phpunit": "<8.0" }, "require-dev": { - "phpunit/phpunit": ">=9.6.11 <10.4" + "phpunit/phpunit": "^8.5 || ^9.6", + "psalm/plugin-phpunit": "^0.18", + "vimeo/psalm": "^5.12" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.6.x-dev" + } + }, "autoload": { "files": [ - "library/helpers.php", - "library/Mockery.php" + "src/helpers.php", + "src/Mockery.php" ], "psr-4": { - "Mockery\\": "library/Mockery" + "Mockery\\": "src/Mockery" } }, "notification-url": "https://packagist.org/downloads/", @@ -5385,20 +5341,12 @@ { "name": "Pádraic Brady", "email": "padraic.brady@gmail.com", - "homepage": "https://github.com/padraic", - "role": "Author" + "homepage": "https://blog.astrumfutura.com" }, { "name": "Dave Marshall", "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "https://davedevelopment.co.uk", - "role": "Developer" - }, - { - "name": "Nathanael Esayeas", - "email": "nathanael.esayeas@protonmail.com", - "homepage": "https://github.com/ghostwriter", - "role": "Lead Developer" + "homepage": "https://davedevelopment.co.uk" } ], "description": "Mockery is a simple yet flexible PHP mock object framework", @@ -5416,13 +5364,10 @@ "testing" ], "support": { - "docs": "https://docs.mockery.io/", "issues": "https://github.com/mockery/mockery/issues", - "rss": "https://github.com/mockery/mockery/releases.atom", - "security": "https://github.com/mockery/mockery/security/advisories", - "source": "https://github.com/mockery/mockery" + "source": "https://github.com/mockery/mockery/tree/2.0.x" }, - "time": "2023-10-01T17:31:30+00:00" + "time": "2024-03-12T12:46:22+00:00" }, { "name": "myclabs/deep-copy", @@ -7894,8 +7839,8 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=8.2" + "php": ">=8.3" }, "platform-dev": {}, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.9.0" } diff --git a/docs/laravel-cart.png b/docs/laravel-cart.png index f8cac1fb394bda26720a800941129bfc9b5b826d..53c41f91c3b066b826a3287b9594dcdb3aac03d9 100644 GIT binary patch literal 42022 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

ghlD^`T4Z>@e9 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 literal 10195 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 diff --git a/src/Cart.php b/src/Cart.php index b1949cd..4a2b3b7 100644 --- a/src/Cart.php +++ b/src/Cart.php @@ -1,12 +1,12 @@ get($productId)) { - $conditionInstance = '\\Joelwmale\\Cart\\CartCondition'; + $conditionInstance = '\\Wearepixel\\Cart\\CartCondition'; if ($itemCondition instanceof $conditionInstance) { // we need to copy first to a temporary variable to hold the conditions - // to avoid hitting this error "Indirect modification of overloaded element of Joelwmale\Cart\ItemCollection has no effect" + // to avoid hitting this error "Indirect modification of overloaded element of Wearepixel\Cart\ItemCollection has no effect" // this is due to laravel Collection instance that implements Array Access // // see link for more info: http://stackoverflow.com/questions/20053269/indirect-modification-of-overloaded-element-of-splfixedarray-has-no-effect $itemConditionTempHolder = $product['conditions']; @@ -345,7 +345,7 @@ public function condition(array|CartCondition $condition): self } if (! $condition instanceof CartCondition) { - throw new InvalidConditionException('Argument 1 must be an instance of \'Joelwmale\Cart\CartCondition\''); + throw new InvalidConditionException('Argument 1 must be an instance of \'Wearepixel\Cart\CartCondition\''); } $conditions = $this->getConditions(); @@ -487,7 +487,7 @@ public function removeItemCondition($itemId, $conditionName) // on the given condition name the user wants to remove, if so, // lets just make $item['conditions'] an empty array as there's just 1 condition on it anyway else { - $conditionInstance = 'Joelwmale\\Cart\\CartCondition'; + $conditionInstance = 'Wearepixel\\Cart\\CartCondition'; if ($item['conditions'] instanceof $conditionInstance) { if ($tempConditionsHolder->getName() == $conditionName) { @@ -788,7 +788,7 @@ protected function itemHasConditions($item) return count($item['conditions']) > 0; } - $conditionInstance = 'Joelwmale\\Cart\\CartCondition'; + $conditionInstance = 'Wearepixel\\Cart\\CartCondition'; if ($item['conditions'] instanceof $conditionInstance) { return true; diff --git a/src/CartCollection.php b/src/CartCollection.php index b08a088..18ee559 100644 --- a/src/CartCollection.php +++ b/src/CartCollection.php @@ -1,6 +1,6 @@ 0; } - $conditionInstance = 'Joelwmale\\Cart\\CartCondition'; + $conditionInstance = 'Wearepixel\\Cart\\CartCondition'; if ($this['conditions'] instanceof $conditionInstance) { return true; } diff --git a/src/Validators/CartConditionValidator.php b/src/Validators/CartConditionValidator.php index d0182fc..8cb4b8d 100644 --- a/src/Validators/CartConditionValidator.php +++ b/src/Validators/CartConditionValidator.php @@ -1,5 +1,5 @@ [ 'session', 'database' => [ - 'model' => \Joelwmale\Cart\Tests\Helpers\MockCartModel::class, + 'model' => \Wearepixel\Cart\Tests\Helpers\MockCartModel::class, 'id' => 'session_id', 'items' => 'items', 'conditions' => 'conditions', diff --git a/tests/Helpers/MockCartModel.php b/tests/Helpers/MockCartModel.php index 6093e61..890fefa 100644 --- a/tests/Helpers/MockCartModel.php +++ b/tests/Helpers/MockCartModel.php @@ -1,6 +1,6 @@ cart->get(1); - expect($item->attributes)->toBeInstanceOf('Joelwmale\\Cart\\ItemAttributeCollection'); + expect($item->attributes)->toBeInstanceOf('Wearepixel\\Cart\\ItemAttributeCollection'); // now lets update the item with its new attributes // when we get that item from cart, it should still be an instance of ItemAttributeCollection @@ -162,7 +162,7 @@ $this->cart->update(1, $updatedItem); - expect($item->attributes)->toBeInstanceOf('Joelwmale\\Cart\\ItemAttributeCollection'); + expect($item->attributes)->toBeInstanceOf('Wearepixel\\Cart\\ItemAttributeCollection'); }); test('item orders are preserved by the order they are added', function () { @@ -298,19 +298,19 @@ }); test('should throw an exception when no quantity is provided', function () { - $this->expectException('Joelwmale\Cart\Exceptions\InvalidItemException'); + $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('Joelwmale\Cart\Exceptions\InvalidItemException'); + $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('Joelwmale\Cart\Exceptions\InvalidItemException'); + $this->expectException('Wearepixel\Cart\Exceptions\InvalidItemException'); $this->expectExceptionMessage('The name field is required.'); $this->cart->add(523, '', 100.99, 2, []); }); @@ -646,7 +646,7 @@ expect($this->cart->getContent()->count())->toEqual(1, 'Cart should have 1 item on it'); expect($this->cart->getContent()->first()['id'])->toEqual(456, 'The first content must have ID of 456'); expect($this->cart->getContent()->first()['name'])->toEqual('Sample Item', 'The first content must have name of "Sample Item"'); - expect($addedItem->model)->toBeInstanceOf('Joelwmale\Cart\Tests\Helpers\MockProduct'); + expect($addedItem->model)->toBeInstanceOf('Wearepixel\Cart\Tests\Helpers\MockProduct'); }); test('cart can add items with multidimensional array with associated model', function () { @@ -681,7 +681,7 @@ $content = $this->cart->getContent(); foreach ($content as $item) { - expect($item->model)->toBeInstanceOf('Joelwmale\Cart\Tests\Helpers\MockProduct'); + expect($item->model)->toBeInstanceOf('Wearepixel\Cart\Tests\Helpers\MockProduct'); } expect($this->cart->isEmpty())->toBeFalse('Cart should not be empty'); diff --git a/tests/Unit/CartTestEventsTest.php b/tests/Unit/CartTestEventsTest.php index 80c0ef1..6bc0ead 100644 --- a/tests/Unit/CartTestEventsTest.php +++ b/tests/Unit/CartTestEventsTest.php @@ -1,7 +1,7 @@ shouldReceive('dispatch')->once()->with('LaravelCart.Created', Mockery::type('array'), true); $events->shouldReceive('dispatch')->once()->with('LaravelCart.Adding', Mockery::type('array'), true); $events->shouldReceive('dispatch')->once()->with('LaravelCart.Added', Mockery::type('array'), true); @@ -44,7 +44,7 @@ }); test('event cart adding multiple times', function () { - $events = Mockery::mock('Illuminate\Events\Dispatcher'); + $events = Mockery::mock('Illuminate\Contracts\Events\Dispatcher'); $events->shouldReceive('dispatch')->once()->with('LaravelCart.Created', Mockery::type('array'), true); $events->shouldReceive('dispatch')->times(2)->with('LaravelCart.Adding', Mockery::type('array'), true); $events->shouldReceive('dispatch')->times(2)->with('LaravelCart.Added', Mockery::type('array'), true); @@ -64,7 +64,7 @@ }); test('event cart adding multiple times scenario two', function () { - $events = Mockery::mock('Illuminate\Events\Dispatcher'); + $events = Mockery::mock('Illuminate\Contracts\Events\Dispatcher'); $events->shouldReceive('dispatch')->once()->with('LaravelCart.Created', Mockery::type('array'), true); $events->shouldReceive('dispatch')->times(3)->with('LaravelCart.Adding', Mockery::type('array'), true); $events->shouldReceive('dispatch')->times(3)->with('LaravelCart.Added', Mockery::type('array'), true); @@ -107,7 +107,7 @@ }); test('event cart remove item', function () { - $events = Mockery::mock('Illuminate\Events\Dispatcher'); + $events = Mockery::mock('Illuminate\Contracts\Events\Dispatcher'); $events->shouldReceive('dispatch')->once()->with('LaravelCart.Created', Mockery::type('array'), true); $events->shouldReceive('dispatch')->times(3)->with('LaravelCart.Adding', Mockery::type('array'), true); $events->shouldReceive('dispatch')->times(3)->with('LaravelCart.Added', Mockery::type('array'), true); @@ -154,7 +154,7 @@ }); test('event cart clear', function () { - $events = Mockery::mock('Illuminate\Events\Dispatcher'); + $events = Mockery::mock('Illuminate\Contracts\Events\Dispatcher'); $events->shouldReceive('dispatch')->once()->with('LaravelCart.Created', Mockery::type('array'), true); $events->shouldReceive('dispatch')->times(3)->with('LaravelCart.Adding', Mockery::type('array'), true); $events->shouldReceive('dispatch')->times(3)->with('LaravelCart.Added', Mockery::type('array'), true); diff --git a/tests/Unit/CartTestMultipleInstancesTest.php b/tests/Unit/CartTestMultipleInstancesTest.php index a09b413..eb1017c 100644 --- a/tests/Unit/CartTestMultipleInstancesTest.php +++ b/tests/Unit/CartTestMultipleInstancesTest.php @@ -1,7 +1,7 @@ 'SALE 5%', 'type' => 'sale', 'target' => 'item', @@ -77,7 +77,7 @@ }); test('it will throw an exception when a non existing model is being associated', function () { - $this->expectException(\Joelwmale\Cart\Exceptions\UnknownModelException::class); + $this->expectException(\Wearepixel\Cart\Exceptions\UnknownModelException::class); $this->expectExceptionMessage('The supplied model SomeModel does not exist.'); $this->cart->add(1, 'Test item', 1, 10.00)->associate('SomeModel'); diff --git a/tests/Unit/ItemTestOtherFormatTest.php b/tests/Unit/ItemTestOtherFormatTest.php index 025d72c..928e8af 100644 --- a/tests/Unit/ItemTestOtherFormatTest.php +++ b/tests/Unit/ItemTestOtherFormatTest.php @@ -1,7 +1,7 @@