HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers10/shop.komma.nl/tests/Unit/ShoppingCartTest.php
<?php
//TODO Update when shop v1 is ready
//
//namespace App\Tests\Unit;
//
//use App\Cart\ShoppingCartService;
//use App\Products\Product\Product;
//use App\Products\ProductComposite\ProductComposite;
//use App\Products\ProductGroup\ProductGroup;
//use App\Products\ProductGroupBehaviour\ProductGroupBehaviour;
//use Illuminate\Foundation\Testing\DatabaseTransactions;
//
//class ShoppingCartTest
//{
//    use DatabaseTransactions; //Automatically rolls back database actions after tests
//
//    /**
//     * @var ShoppingCartService $shoppingCart
//     */
//    private $shoppingCart;
//
//    /**
//     * Runs before each test
//     */
//    public function setup()
//    {
//        $this->shoppingCart = new ShoppingCartService();
//    }
//
//    ///////////////////////////////////////////////
//    // Tests without price modification
//    ///////////////////////////////////////////////
//
//    /**
//     * @test
//     */
//    public function testAddSingleProductAndGetItems()
//    {
//        /** @var Product $product */
//        $product = factory(Product::class)->create();
//        $this->shoppingCart->addProductable($product);
//        $this->assertCount(1, $this->shoppingCart->getItems());
//    }
//
//    /**
//     * @test
//     * @group ShoppingCart
//     */
//    public function testGetItemsCount()
//    {
//        /** @var Product $product */
//        $product = factory(Product::class)->create();
//        $this->shoppingCart->addProductable($product);
//        $product = factory(Product::class)->create();
//        $this->shoppingCart->addProductable($product);
//        $product = factory(Product::class)->create();
//        $this->shoppingCart->addProductable($product);
//
//        $this->assertEquals(3, $this->shoppingCart->getItemsCount(false, false));
//    }
//
//    /**
//     * @test
//     * @group ShoppingCart
//     */
//    public function testGetUniqueItemsCount()
//    {
//        /** @var Product $product */
//        $product = factory(Product::class)->create();
//        $this->shoppingCart->addProductable($product);
//        $product = factory(Product::class)->create();
//        $this->shoppingCart->addProductable($product);
//
//        $this->assertEquals(1, $this->shoppingCart->getItemsCount(true, false));
//    }
//
//
//    /**
//     * @test
//     * @group ShoppingCart
//     */
//    public function testDeleteProduct()
//    {
//        /** @var Product $product */
//        $product = factory(Product::class)->create();
//        $this->shoppingCart->addProductable($product);
//
//        $product = factory(Product::class)->create();
//        $this->shoppingCart->addProductable($product);
//
//        /** @var Product $productToDelete */
//        $productToDelete = factory(Product::class)->create();
//
//        /** @var Product $productToDelete */
//        $shoppingCartItemToDelete = $this->shoppingCart->addProductable($productToDelete);
//
//        $product = factory(Product::class)->create();
//        $this->shoppingCart->addProductable($product);
//
//        $this->assertEquals(4, count($this->shoppingCart->getItems()));
//        $this->shoppingCart->deleteItem($shoppingCartItemToDelete->getProductable());
//        $this->assertEquals(3, count($this->shoppingCart->getItems()));
//    }
//
//    /**
//     * @test
//     * @group ShoppingCart
//     */
//    public function testClearCart()
//    {
//        $product = factory(Product::class)->create();
//        $this->shoppingCart->addProductable($product);
//        $product = factory(Product::class)->create();
//        $this->shoppingCart->addProductable($product);
//        $this->assertCount(2, $this->shoppingCart->getItems());
//
//        $this->shoppingCart->clear();
//        $this->assertEquals(0, count($this->shoppingCart->getItems()));
//    }
//
//    /**
//     * @test
//     * @group ShoppingCart
//     */
//    public function testGetPrice()
//    {
//        $expectedPrice = 0;
//        /** @var Product $product */
//        $product = factory(Product::class)->create();
//        $expectedPrice += $product->price;
//        $this->shoppingCart->addProductable($product);
//        $product = factory(Product::class)->create();
//        $expectedPrice += $product->price;
//        $this->shoppingCart->addProductable($product);
//
//        $this->assertEquals($expectedPrice, $this->shoppingCart->getTotal(false));
//    }
//
//    /**
//     * @test
//     * @group ShoppingCart
//     */
//    public function testAddProductGroup()
//    {
//        //Setup
//        /** @var Product[] $products */
//        $products = [];
//        $products[] = factory(Product::class)->create();
//        $products[] = factory(Product::class)->create();
//
//        /** @var ProductGroupBehaviour $group */
//        $behaviour = ProductGroupBehaviour::inRandomOrder()->first();
//        /** @var ProductGroup $group */
//
//        $group = factory(ProductGroup::class)->make();
//        $group->productGroupBehaviour()->associate($behaviour);
//        $group->save();
//        $group->products()->saveMany($products);
//
//        //Exercise
//        $this->shoppingCart->addProductable($group);
//
//        //Test
//        $this->assertEquals($group->getPrice(), $this->shoppingCart->getTotal());
//    }
//
//    /**
//     * @test
//     * @group ShoppingCart
//     */
//    public function testAddProductComposite()
//    {
//        //Setup
//        /** @var Product[] $products */
//        $products = [];
//        $products[] = factory(Product::class)->create();
//        $products[] = factory(Product::class)->create();
//
//        /** @var Product[] $productsGroup2 */
//        $productsGroup2 = [];
//        $productsGroup2[] = factory(Product::class)->create();
//        $productsGroup2[] = factory(Product::class)->create();
//
//        /** @var ProductGroupBehaviour $group */
//        $behaviour = ProductGroupBehaviour::inRandomOrder()->first();
//        $behaviourGroup2 = ProductGroupBehaviour::inRandomOrder()->first();
//        /** @var ProductGroup $group */
//        $group = factory(ProductGroup::class)->make();
//        $group->productGroupBehaviour()->associate($behaviour);
//        $group->save();
//        $group->products()->saveMany($products);
//
//        /** @var ProductGroup $group2 */
//        $group2 = factory(ProductGroup::class)->make();
//        $group2->productGroupBehaviour()->associate($behaviourGroup2);
//        $group2->save();
//        $group2->products()->saveMany($productsGroup2);
//
//        /** @var ProductComposite $composite */
//        $composite = factory(ProductComposite::class)->create();
//        $composite->groups()->saveMany([$group, $group2]);
//
//        //Exercise
//        $this->shoppingCart->addProductable($composite);
//
//        //Test
//        $this->assertEquals($composite->getPrice(), $this->shoppingCart->getTotal());
//    }
//
//    /**
//     * @test
//     * @group ShoppingCart
//     */
//    public function testAddingDuplicateProduct()
//    {
//        /** @var Product $product */
//        $product = factory(Product::class)->create();
//
//        $this->shoppingCart->addProductable($product, 3);
//
//        $this->assertEquals(1, $this->shoppingCart->getItemsCount(true));
//
//        $this->shoppingCart->addProductable($product, 2);
//
//        $this->assertEquals(1, $this->shoppingCart->getItemsCount(true));
//        $this->assertEquals(5, $this->shoppingCart->getItemsCount(false));
//    }
//}