loginAsUser(); // Add new draft to collection $cart = new CartCollection(); $draft = $cart->add(new CashDraft()); $this->visit(route('cart.index')); $this->assertViewHas('draft', $draft); $this->see($draft->type); } /** @test */ public function user_can_create_transaction_draft_by_transaction_create_button() { $this->loginAsUser(); $this->visit(route('home')); $this->press(trans('transaction.create')); $cart = new CartCollection(); $draft = $cart->content()->last(); $this->seePageIs(route('cart.show', $draft->draftKey)); $this->press(trans('transaction.create_credit')); $cart = new CartCollection(); $draft = $cart->content()->last(); $this->seePageIs(route('cart.show', $draft->draftKey)); } /** @test */ public function user_can_search_product_on_transaction_draft_page() { $product = factory(Product::class)->create(['name' => 'Testing Produk 1']); $this->loginAsUser(); $cart = new CartCollection(); $draft = new CreditDraft(); $cart->add($draft); // Visit cart index page $this->visit(route('cart.index')); // Visit search for products $this->submitForm(trans('cart.product_search'), [ 'query' => 'testing', ]); $this->seePageIs(route('cart.show', [$draft->draftKey, 'query' => 'testing'])); // See product list appears $this->see($product->name); $this->see(formatRp($product->credit_price)); $this->seeElement('form', ['action' => route('cart.add-draft-item', [$draft->draftKey, $product->id])]); $this->seeElement('input', ['id' => 'qty-'.$product->id, 'name' => 'qty']); $this->seeElement('input', ['id' => 'add-product-'.$product->id]); $this->dontSee($product->cash_price); } /** @test */ public function user_can_add_item_to_cash_draft() { $product1 = factory(Product::class)->create(['name' => 'Testing Produk 1', 'cash_price' => 400, 'credit_price' => 500]); $product2 = factory(Product::class)->create(['name' => 'Testing Produk 2', 'cash_price' => 1000, 'credit_price' => 1100]); $this->loginAsUser(); $cart = new CartCollection(); $draft = new CashDraft(); $cart->add($draft); // Visit cart index with searched item $this->visit(route('cart.show', [$draft->draftKey, 'query' => 'testing'])); $this->type(2, 'qty'); $this->press('add-product-'.$product1->id); $this->type(3, 'qty'); $this->press('add-product-'.$product2->id); $this->seePageIs(route('cart.show', [$draft->draftKey, 'query' => 'testing'])); $this->assertTrue($cart->draftHasItem($draft, $product1)); $this->assertTrue($cart->draftHasItem($draft, $product2)); $this->assertEquals(3800, $draft->getTotal()); $this->seeElement('input', ['id' => 'qty-'. 0]); $this->seeElement('input', ['id' => 'item_discount-'. 0]); $this->seeElement('button', ['id' => 'remove-item-'. 0]); $this->see(formatRp(3800)); } /** @test */ public function user_can_add_item_to_credit_draft() { $product1 = factory(Product::class)->create(['name' => 'Testing Produk 1', 'cash_price' => 400, 'credit_price' => 500]); $product2 = factory(Product::class)->create(['name' => 'Testing Produk 2', 'cash_price' => 1000, 'credit_price' => 1100]); $this->loginAsUser(); $cart = new CartCollection(); $draft = new CreditDraft(); $cart->add($draft); // Visit cart index with searched item $this->visit(route('cart.show', [$draft->draftKey, 'query' => 'testing'])); $this->type(2, 'qty'); $this->press('add-product-'.$product1->id); $this->type(3, 'qty'); $this->press('add-product-'.$product2->id); $this->seePageIs(route('cart.show', [$draft->draftKey, 'query' => 'testing'])); $this->assertTrue($cart->draftHasItem($draft, $product1)); $this->assertTrue($cart->draftHasItem($draft, $product2)); $this->assertEquals(4300, $draft->getTotal()); } /** @test */ public function user_can_update_item_qty() { $cart = new CartCollection(); $draft = $cart->add(new CashDraft()); $product1 = factory(Product::class)->create(['cash_price' => 1000]); $product2 = factory(Product::class)->create(['cash_price' => 2000]); $item1 = new Item($product1, 1); $item2 = new Item($product2, 3); // Add items to draft $cart->addItemToDraft($draft->draftKey, $item1); $cart->addItemToDraft($draft->draftKey, $item2); $this->loginAsUser(); $this->visit(route('cart.show', $draft->draftKey)); $this->submitForm('update-item-0', [ 'item_key' => 0, 'qty' => 2, 'item_discount' => 100, ]); $this->submitForm('update-item-1', [ 'item_key' => 1, 'qty' => 2, 'item_discount' => 100, ]); $this->assertEquals(400, $draft->getDiscountTotal()); $this->assertEquals(6000, $draft->getSubtotal()); $this->assertEquals(5600, $draft->getTotal()); $this->see(formatRp($draft->getSubtotal())); $this->see(formatRp($draft->getTotal())); } }