Merge pull request #111 from Norris1z/master

Use current instance when checking if storedCartWithIdentifierExists
This commit is contained in:
Patrick
2020-12-27 21:13:34 +01:00
committed by GitHub
5 changed files with 100 additions and 26 deletions

View File

@@ -585,7 +585,7 @@ If you want to retrieve the cart from the database and restore it, all you have
If you want to merge the cart with another one from the database, all you have to do is call the `merge($identifier)` where `$identifier` is the key you specified for the `store` method. You can also define if you want to keep the discount and tax rates of the items and if you want to dispatch "cart.added" events.
// Merge the contents of 'savedcart' into 'username'.
Cart::instance('username')->merge('savedcart', $keepDiscount, $keepTaxrate, $dispatchAdd);
Cart::instance('username')->merge('savedcart', $keepDiscount, $keepTaxrate, $dispatchAdd, 'savedcartinstance');
### Erasing the cart
If you want to erase the cart from the database, all you have to do is call the `erase($identifier)` where `$identifier` is the key you specified for the `store` method.

View File

@@ -544,7 +544,7 @@ Jika Anda ingin mengambil keranjang dari database dan mengembalikannya, yang har
Jika Anda ingin menggabungkan keranjang dengan keranjang lain dari basis data, yang harus Anda lakukan adalah memanggil `gabungan ($ identifier)` di mana `$ identifier` adalah kunci yang Anda tentukan untuk metode` store`. Anda juga dapat menentukan apakah Anda ingin mempertahankan potongan harga dan tarif pajak item.
// Merge the contents of 'savedcart' into 'username'.
Cart::instance('username')->merge('savedcart', $keepDiscount, $keepTaxrate);
Cart::instance('username')->merge('savedcart', $keepDiscount, $keepTaxrate, 'savedcartinstance');
## Pengecualian

View File

@@ -542,7 +542,7 @@ foreach(Cart::content() as $row) {
Якщо ви хочете злити кошик із іншим кошиком, збереженим у базі даних, вам знадобиться викликати метод `merge($identifier)`, де `$identifier` - це ключ, який ви зазначили у методі`store`. Ви також можете визначити чи хочете ви зберегти знижку і ставку оподаткування для товарів.
// Merge the contents of 'savedcart' into 'username'.
Cart::instance('username')->merge('savedcart', $keepDiscount, $keepTaxrate);
Cart::instance('username')->merge('savedcart', $keepDiscount, $keepTaxrate, 'savedcartinstance');
## Перехоплення

View File

@@ -636,13 +636,15 @@ class Cart
$identifier = $identifier->getInstanceIdentifier();
}
if ($this->storedCartWithIdentifierExists($identifier)) {
$instance = $this->currentInstance();
if ($this->storedCartInstanceWithIdentifierExists($instance, $identifier)) {
throw new CartAlreadyStoredException("A cart with identifier {$identifier} was already stored.");
}
$this->getConnection()->table($this->getTableName())->insert([
'identifier' => $identifier,
'instance' => $this->currentInstance(),
'instance' => $instance,
'content' => serialize($content),
'created_at' => $this->createdAt ?: Carbon::now(),
'updated_at' => Carbon::now(),
@@ -664,17 +666,17 @@ class Cart
$identifier = $identifier->getInstanceIdentifier();
}
if (!$this->storedCartWithIdentifierExists($identifier)) {
$currentInstance = $this->currentInstance();
if (!$this->storedCartInstanceWithIdentifierExists($currentInstance, $identifier)) {
return;
}
$stored = $this->getConnection()->table($this->getTableName())
->where('identifier', $identifier)->first();
->where(['identifier'=> $identifier, 'instance' => $currentInstance])->first();
$storedContent = unserialize(data_get($stored, 'content'));
$currentInstance = $this->currentInstance();
$this->instance(data_get($stored, 'instance'));
$content = $this->getContent();
@@ -692,7 +694,7 @@ class Cart
$this->createdAt = Carbon::parse(data_get($stored, 'created_at'));
$this->updatedAt = Carbon::parse(data_get($stored, 'updated_at'));
$this->getConnection()->table($this->getTableName())->where('identifier', $identifier)->delete();
$this->getConnection()->table($this->getTableName())->where(['identifier' => $identifier, 'instance' => $currentInstance])->delete();
}
/**
@@ -708,11 +710,13 @@ class Cart
$identifier = $identifier->getInstanceIdentifier();
}
if (!$this->storedCartWithIdentifierExists($identifier)) {
$instance = $this->currentInstance();
if (!$this->storedCartInstanceWithIdentifierExists($instance, $identifier)) {
return;
}
$this->getConnection()->table($this->getTableName())->where('identifier', $identifier)->delete();
$this->getConnection()->table($this->getTableName())->where(['identifier' => $identifier, 'instance' => $instance])->delete();
$this->events->dispatch('cart.erased');
}
@@ -727,14 +731,14 @@ class Cart
*
* @return bool
*/
public function merge($identifier, $keepDiscount = false, $keepTax = false, $dispatchAdd = true)
public function merge($identifier, $keepDiscount = false, $keepTax = false, $dispatchAdd = true, $instance = self::DEFAULT_INSTANCE)
{
if (!$this->storedCartWithIdentifierExists($identifier)) {
if (!$this->storedCartInstanceWithIdentifierExists($instance, $identifier)) {
return false;
}
$stored = $this->getConnection()->table($this->getTableName())
->where('identifier', $identifier)->first();
->where(['identifier'=> $identifier, 'instance'=> $instance])->first();
$storedContent = unserialize($stored->content);
@@ -832,9 +836,9 @@ class Cart
*
* @return bool
*/
private function storedCartWithIdentifierExists($identifier)
private function storedCartInstanceWithIdentifierExists($instance, $identifier)
{
return $this->getConnection()->table($this->getTableName())->where('identifier', $identifier)->exists();
return $this->getConnection()->table($this->getTableName())->where(['identifier' => $identifier, 'instance'=> $instance])->exists();
}
/**

View File

@@ -865,11 +865,11 @@ class CartTest extends TestCase
$cart->store($identifier = 123);
Event::assertDispatched('cart.stored');
$serialized = serialize($cart->content());
$this->assertDatabaseHas('shoppingcart', ['identifier' => $identifier, 'instance' => 'default', 'content' => $serialized]);
Event::assertDispatched('cart.stored');
}
/** @test */
@@ -905,6 +905,8 @@ class CartTest extends TestCase
$cart->store($identifier);
Event::assertDispatched('cart.stored');
sleep(1);
$afterSecondStore = Carbon::now();
@@ -912,8 +914,6 @@ class CartTest extends TestCase
$this->assertTrue($beforeStore->lessThanOrEqualTo($cart->createdAt()) && $afterStore->greaterThanOrEqualTo($cart->createdAt()));
$this->assertTrue($beforeSecondStore->lessThanOrEqualTo($cart->updatedAt()) && $afterSecondStore->greaterThanOrEqualTo($cart->updatedAt()));
Event::assertDispatched('cart.stored');
}
/**
@@ -936,9 +936,9 @@ class CartTest extends TestCase
$cart->store($identifier = 123);
$cart->store($identifier);
Event::assertDispatched('cart.stored');
$cart->store($identifier);
}
/** @test */
@@ -962,11 +962,11 @@ class CartTest extends TestCase
$cart->restore($identifier);
Event::assertDispatched('cart.restored');
$this->assertItemsInCart(1, $cart);
$this->assertDatabaseMissing('shoppingcart', ['identifier' => $identifier, 'instance' => 'default']);
Event::assertDispatched('cart.restored');
}
/** @test */
@@ -1011,7 +1011,7 @@ class CartTest extends TestCase
$cart = $this->getCartDiscount(50);
$cart->add(new BuyableProduct(1, 'First item', 10.00), 1);
$cart->update('027c91341fd5cf4d2579b49c4b6a90da', ['qty'=>2]);
$cart->update('027c91341fd5cf4d2579b49c4b6a90da', ['qty' => 2]);
$cartItem = $cart->get('027c91341fd5cf4d2579b49c4b6a90da');
@@ -1453,4 +1453,74 @@ class CartTest extends TestCase
$this->app['config']->set('cart.format.decimal_point', $decimalPoint);
$this->app['config']->set('cart.format.thousand_separator', $thousandSeperator);
}
/** @test */
public function it_can_store__mutiple_instances_of_the_cart_in_a_database()
{
$this->artisan('migrate', [
'--database' => 'testing',
]);
Event::fake();
$cart = $this->getCart();
$cart->add(new BuyableProduct());
$cart->store($identifier = 123);
Event::assertDispatched('cart.stored');
$serialized = serialize($cart->content());
$newInstance = $this->getCart();
$newInstance->instance($instanceName = 'someinstance');
$newInstance->add(new BuyableProduct());
$newInstance->store($identifier);
Event::assertDispatched('cart.stored');
$newInstanceSerialized = serialize($newInstance->content());
$this->assertDatabaseHas('shoppingcart', ['identifier' => $identifier, 'instance' => Cart::DEFAULT_INSTANCE, 'content' => $serialized]);
$this->assertDatabaseHas('shoppingcart', ['identifier' => $identifier, 'instance' => $instanceName, 'content' => $newInstanceSerialized]);
}
/** @test */
public function it_can_calculate_the_total_price_of_the_items_in_cart()
{
$cart = $this->getCart();
$cart->add(new BuyableProduct(1, 'first item', $price = 1000), $qty = 5);
$this->assertEquals(5000, $cart->priceTotalFloat());
}
/** @test */
public function it_can_format_the_total_price_of_the_items_in_cart()
{
$cart = $this->getCart();
$cart->add(new BuyableProduct(1, 'first item', 1000), 5);
$this->assertEquals('5,000.00', $cart->priceTotal());
$this->assertEquals('5,000.0000', $cart->priceTotal(4, '.', ','));
}
/** @test */
public function it_can_erase_saved_cart_from_the_database()
{
$this->artisan('migrate', [
'--database' => 'testing',
]);
Event::fake();
$cart = $this->getCart();
$cart->add(new BuyableProduct(1, 'Item', 10.00), 1);
$cart->add(new BuyableProduct(2, 'Item 2', 10.00), 1);
$cart->store($identifier = 'test');
$cart->erase($identifier);
Event::assertDispatched('cart.erased');
$this->assertDatabaseMissing('shoppingcart', ['identifier' => $identifier, 'instance' => Cart::DEFAULT_INSTANCE]);
}
}