You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
202 lines
6.9 KiB
202 lines
6.9 KiB
<?php
|
|
|
|
namespace Tests\Feature;
|
|
|
|
use App\Cart\CartCollection;
|
|
use App\Cart\CashDraft;
|
|
use App\Cart\CreditDraft;
|
|
use App\Cart\Item;
|
|
use App\Product;
|
|
use Illuminate\Foundation\Testing\DatabaseMigrations;
|
|
use Tests\BrowserKitTestCase;
|
|
|
|
class TransactionEntryTest extends BrowserKitTestCase
|
|
{
|
|
use DatabaseMigrations;
|
|
|
|
/** @test */
|
|
public function user_can_visit_transaction_drafts_page()
|
|
{
|
|
$this->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()));
|
|
}
|
|
|
|
/** @test */
|
|
public function user_can_update_draft_transaction_detail_and_get_confirm_page()
|
|
{
|
|
$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->type('Nafies', 'customer[name]');
|
|
$this->type('-', 'customer[phone]');
|
|
$this->type('catatan', 'notes');
|
|
$this->type(10000, 'payment');
|
|
$this->press(trans('transaction.proccess'));
|
|
|
|
$this->seePageIs(route('cart.show', [$draft->draftKey, 'action' => 'confirm']));
|
|
|
|
$this->see(trans('transaction.confirm'));
|
|
$this->see(formatRp(10000));
|
|
$this->see(formatRp(3000));
|
|
$this->seeElement('input', ['id' => 'save-transaction-draft']);
|
|
}
|
|
}
|