Working on improved configuration and automatically destroy cart on user logout

This commit is contained in:
Rob Gloudemans
2016-08-03 19:41:35 +02:00
parent e07d08ca9b
commit 71cb7ce694
4 changed files with 74 additions and 3 deletions

View File

@@ -11,6 +11,37 @@ return [
| Taxable interface and use the HasTax trait.
|
*/
'tax' => 21
'tax' => 21,
/*
|--------------------------------------------------------------------------
| Shoppingcart database settings
|--------------------------------------------------------------------------
|
| Here you can set the connection that the shoppingcart should use when
| storing and restoring a cart.
|
*/
'database' => [
'connection' => null,
'table' => 'shoppingcart',
],
/*
|--------------------------------------------------------------------------
| Destroy the cart on user logout
|--------------------------------------------------------------------------
|
| When this option is set to 'true' the cart will automatically
| destroy all cart instances when the user logs out.
|
*/
'destroy_on_logout' => false,
];

View File

@@ -493,7 +493,9 @@ class Cart
*/
private function getConnection()
{
return app(DatabaseManager::class)->connection(config('cart.database.connection', config('database.default')));
$connectionName = $this->getConnectionName();
return app(DatabaseManager::class)->connection($connectionName);
}
/**
@@ -505,4 +507,16 @@ class Cart
{
return config('cart.database.table', 'shoppingcart');
}
/**
* Get the database connection name.
*
* @return string
*/
private function getConnectionName()
{
$connection = config('cart.database.connection');
return is_null($connection) ? config('database.default') : $connection;
}
}

View File

@@ -2,6 +2,8 @@
namespace Gloudemans\Shoppingcart;
use Illuminate\Auth\Events\Logout;
use Illuminate\Session\SessionManager;
use Illuminate\Support\ServiceProvider;
class ShoppingcartServiceProvider extends ServiceProvider
@@ -19,6 +21,14 @@ class ShoppingcartServiceProvider extends ServiceProvider
$config = __DIR__ . '/../config/cart.php';
$this->mergeConfigFrom($config, 'cart');
$this->publishes([__DIR__ . '/../config/cart.php' => config_path('cart.php')], 'config');
$this->app['events']->listen(Logout::class, function () {
if ($this->app['config']->get('cart.destroy_on_logout')) {
$this->app->make(SessionManager::class)->forget('cart');
}
});
if ( ! class_exists('CreateShoppingcartTable')) {
// Publish the migration
$timestamp = date('Y_m_d_His', time());

View File

@@ -614,7 +614,7 @@ class CartTest extends Orchestra\Testbench\TestCase
$cartItem = $cart->get('027c91341fd5cf4d2579b49c4b6a90da');
$this->assertEquals('Mockery_0_Gloudemans_Shoppingcart_Contracts_Buyable', PHPUnit_Framework_Assert::readAttribute($cartItem, 'associatedModel'));
$this->assertContains('Gloudemans_Shoppingcart_Contracts_Buyable', PHPUnit_Framework_Assert::readAttribute($cartItem, 'associatedModel'));
}
/** @test */
@@ -909,6 +909,22 @@ class CartTest extends Orchestra\Testbench\TestCase
$this->assertEquals(3.80, $cart->tax(2));
}
/** @test */
public function it_will_destroy_the_cart_when_the_user_logs_out_and_the_config_setting_was_set_to_true()
{
$this->app['config']->set('cart.destroy_on_logout', true);
$session = Mockery::mock(\Illuminate\Session\SessionManager::class);
$session->shouldReceive('forget')->once()->with('cart');
$this->app->instance(\Illuminate\Session\SessionManager::class, $session);
$user = Mockery::mock(\Illuminate\Contracts\Auth\Authenticatable::class);
event(new \Illuminate\Auth\Events\Logout($user));
}
/**
* Get an instance of the cart.
*