| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 | 
							- <?php
 
- namespace Tests\Unit\Cart;
 
- use App\Shop\Carts\Exceptions\ProductInCartNotFoundException;
 
- use App\Shop\Carts\Repositories\CartRepository;
 
- use App\Shop\Carts\ShoppingCart;
 
- use Gloudemans\Shoppingcart\CartItem;
 
- use Gloudemans\Shoppingcart\Exceptions\InvalidRowIDException;
 
- use Tests\TestCase;
 
- class CartUnitTest extends TestCase
 
- {
 
-     /** @test */
 
-     public function it_can_retrieve_the_saved_cart_from_database()
 
-     {
 
-         $cartRepo = new CartRepository(new ShoppingCart);
 
-         $cartRepo->addToCart($this->product, 1);
 
-         $cartRepo->saveCart($this->customer);
 
-         // retrieve the saved cart from database
 
-         $cartRepo2 = new CartRepository(new ShoppingCart);
 
-         $cartRepo2->openCart($this->customer);
 
-         $savedCartItem = $cartRepo->getCartItems()->first();
 
-         $cartItemFromDb = $cartRepo2->getCartItems()->first();
 
-         $this->assertInstanceOf(CartItem::class, $cartItemFromDb);
 
-         $this->assertEquals($savedCartItem->name, $cartItemFromDb->name);
 
-         $this->assertEquals($savedCartItem->price, $cartItemFromDb->price);
 
-         $this->assertEquals($savedCartItem->qty, $cartItemFromDb->qty);
 
-     }
 
-     /** @test */
 
-     public function it_can_store_the_cart_in_database()
 
-     {
 
-         $cartRepo = new CartRepository(new ShoppingCart);
 
-         $cartRepo->addToCart($this->product, 1);
 
-         $cartRepo->saveCart($this->customer);
 
-         $this->assertDatabaseHas('shoppingcart', [
 
-             'identifier' => $this->customer->email,
 
-             'instance' => 'default',
 
-             'content' => serialize($cartRepo->getCartItems())
 
-         ]);
 
-     }
 
-     /** @test */
 
-     public function it_can_clear_out_your_cart()
 
-     {
 
-         $cartRepo = new CartRepository(new ShoppingCart);
 
-         $cartRepo->addToCart($this->product, 1);
 
-         $this->assertCount(1, $cartRepo->getCartItems());
 
-         $cartRepo->clearCart();
 
-         $this->assertCount(0, $cartRepo->getCartItems());
 
-     }
 
-     /** @test */
 
-     public function it_returns_all_the_items_in_the_cart()
 
-     {
 
-         $qty = 1;
 
-         $cartRepo = new CartRepository(new ShoppingCart);
 
-         $cartRepo->addToCart($this->product, $qty);
 
-         $lists = $cartRepo->getCartItems();
 
-         foreach ($lists as $list) {
 
-             $this->assertEquals($this->product->name, $list->name);
 
-             $this->assertEquals($this->product->price, $list->price);
 
-             $this->assertEquals($qty, $list->qty);
 
-         }
 
-     }
 
-     /** @test */
 
-     public function it_can_show_the_specific_item_in_the_cart()
 
-     {
 
-         $cartRepo = new CartRepository(new ShoppingCart);
 
-         $cartRepo->addToCart($this->product, 1);
 
-         $items = $cartRepo->getCartItems();
 
-         $product = [];
 
-         foreach ($items as $item) {
 
-             $product[] = $cartRepo->findItem($item->rowId);
 
-         }
 
-         $this->assertEquals($product[0]->name, $this->product->name);
 
-     }
 
-     /** @test */
 
-     public function it_can_update_the_cart_qty_in_the_cart()
 
-     {
 
-         $cartRepo = new CartRepository(new ShoppingCart);
 
-         $cartRepo->addToCart($this->product, 1);
 
-         $items = $cartRepo->getCartItems();
 
-         $rowId = [];
 
-         foreach ($items as $item) {
 
-             $rowId[] = $item->rowId;
 
-             $cartRepo->updateQuantityInCart($item->rowId, 3);
 
-         }
 
-         $this->assertEquals(3, $cartRepo->findItem($rowId[0])->qty);
 
-     }
 
-     /** @test */
 
-     public function it_can_return_the_total_value_of_the_items_in_the_cart()
 
-     {
 
-         $qty = 3;
 
-         $cartRepo = new CartRepository(new ShoppingCart);
 
-         $cartRepo->addToCart($this->product, $qty);
 
-         $total = $cartRepo->getTotal();
 
-         $totalPrice = $this->product->price * $qty;
 
-         $grandTotal = $totalPrice + $cartRepo->getTax();
 
-         $this->assertEquals($grandTotal, $total);
 
-     }
 
-     /** @test */
 
-     public function it_can_return_the_sub_total_of_the_items()
 
-     {
 
-         $cartRepo = new CartRepository(new ShoppingCart);
 
-         $cartRepo->addToCart($this->product, 1);
 
-         $cartRepo->addToCart($this->product, 1);
 
-         $subtotal = $cartRepo->getSubTotal();
 
-         $this->assertEquals(10, $subtotal);
 
-     }
 
-     /** @test */
 
-     public function it_can_count_the_total_items_in_the_cart()
 
-     {
 
-         $cartRepo = new CartRepository(new ShoppingCart);
 
-         $cartRepo->addToCart($this->product, 1);
 
-         $count = $cartRepo->countItems();
 
-         $this->assertEquals(1, $count);
 
-     }
 
-     /** @test */
 
-     public function it_errors_when_removing_item_in_the_cart_with_cart_rowID_not_existing()
 
-     {
 
-         $this->expectException(ProductInCartNotFoundException::class);
 
-         $cartRepo = new CartRepository(new ShoppingCart);
 
-         $cartRepo->addToCart($this->product, 1);
 
-         $cartRepo->removeToCart('unknown');
 
-     }
 
-     /** @test */
 
-     public function it_can_remove_item_in_the_cart()
 
-     {
 
-         $cartRepo = new CartRepository(new ShoppingCart);
 
-         $cartRepo->addToCart($this->product, 1);
 
-         $items = $cartRepo->getCartItems();
 
-         foreach ($items as $item) {
 
-             $this->expectException(InvalidRowIDException::class);
 
-             $cartRepo->removeToCart($item->rowId);
 
-             $cartRepo->findItem($item->rowId);
 
-         }
 
-     }
 
-     /** @test */
 
-     public function it_can_add_to_cart()
 
-     {
 
-         $cartRepo = new CartRepository(new ShoppingCart);
 
-         $cartRepo->addToCart($this->product, 1);
 
-         $items = $cartRepo->getCartItems();
 
-         foreach ($items as $item) {
 
-             $this->assertEquals($this->product->name, $item->name);
 
-         }
 
-     }
 
- }
 
 
  |