diff --git a/tests/Feature/Expenses/BillsTest.php b/tests/Feature/Expenses/BillsTest.php new file mode 100644 index 000000000..dc5008c0c --- /dev/null +++ b/tests/Feature/Expenses/BillsTest.php @@ -0,0 +1,124 @@ +loginAs() + ->get(route('bills.index')) + ->assertStatus(200) + ->assertSeeText(trans_choice('general.bills', 2)); + } + + public function testItShouldSeeBillCreatePage() + { + $this->loginAs() + ->get(route('bills.create')) + ->assertStatus(200) + ->assertSeeText(trans('general.title.new', ['type' => trans_choice('general.bills', 1)])); + } + + public function testItShouldCreateBill() + { + $this->loginAs() + ->post(route('bills.store'), $this->getBillRequest()) + ->assertStatus(302) + ->assertRedirect(route('bills.show', ['bill' => 1])); + + $this->assertFlashLevel('success'); + } + + public function testItShouldCreateBillWithRecurring() + { + $this->loginAs() + ->post(route('bills.store'), $this->getBillRequest(1)) + ->assertStatus(302) + ->assertRedirect(route('bills.show', ['bill' => 1])); + + $this->assertFlashLevel('success'); + } + + public function testItShouldSeeBillUpdatePage() + { + $bill = Bill::create($this->getBillRequest()); + $this->loginAs() + ->get(route('bills.edit', ['bill' => $bill->id])) + ->assertStatus(200) + ->assertSee($bill->vendor_name) + ->assertSee($bill->vendor_email); + } + + public function testItShouldUpdateBill() + { + $request = $this->getBillRequest(); + + $bill = Bill::create($request); + + $request['vendor_name'] = $this->faker->name; + + $this->loginAs() + ->patch(route('bills.update', $bill->id), $request) + ->assertStatus(302); + + $this->assertFlashLevel('success'); + } + + public function testItShouldDeleteBill() + { + $bill = Bill::create($this->getBillRequest()); + + $this->loginAs() + ->delete(route('bills.destroy', $bill->id)) + ->assertStatus(302) + ->assertRedirect(route('bills.index')); + + $this->assertFlashLevel('success'); + + } + + private function getBillRequest($recurring = 0) + { + $amount = $this->faker->randomFloat(2, 2); + + $items = [['name' => 'urun', 'item_id' => null, 'quantity' => '1', 'price' => $amount, 'currency' => 'USD', 'tax_id' => null]]; + + $data = [ + 'vendor_id' => '0', + 'billed_at' => $this->faker->date(), + 'due_at' => $this->faker->date(), + 'bill_number' => '1', + 'order_number' => '1', + 'currency_code' => setting('general.default_currency'), + 'currency_rate' => '1', + 'item' => $items, + 'discount' => '0', + 'notes' => $this->faker->text(5), + 'category_id' => $this->company->categories()->type('expense')->first()->id, + 'recurring_frequency' => 'no', + 'vendor_name' => $this->faker->name, + 'vendor_email' =>$this->faker->email, + 'vendor_tax_number' => null, + 'vendor_phone' => null, + 'vendor_address' => $this->faker->address, + 'bill_status_code' => 'draft', + 'amount' => $amount, + 'company_id' => $this->company->id, + ]; + + if ($recurring) { + $data['recurring_frequency'] = 'yes'; + $data['recurring_interval'] = '1'; + $data['recurring_custom_frequency'] = $this->faker->randomElement(['monthly', 'weekly']); + $data['recurring_count'] = '1'; + } + + return $data; + } +} \ No newline at end of file