akaunting/tests/Feature/Incomes/CustomersTest.php

147 lines
3.6 KiB
PHP
Raw Normal View History

2018-07-14 13:29:16 +03:00
<?php
namespace Tests\Feature\Incomes;
use App\Models\Auth\User;
use App\Models\Income\Customer;
use Tests\Feature\FeatureTestCase;
class CustomersTest extends FeatureTestCase
{
2018-09-29 22:41:17 +03:00
public function testItShouldSeeCustomerListPage()
{
$this->loginAs()
->get(route('customers.index'))
->assertStatus(200)
->assertSeeText(trans_choice('general.customers', 2));
}
public function testItShouldSeeCustomerCreatePage()
{
$this->loginAs()
->get(route('customers.create'))
->assertStatus(200)
->assertSeeText(trans('general.title.new', ['type' => trans_choice('general.customers', 1)]));
}
2018-07-14 13:29:16 +03:00
public function testItShouldCreateOnlyCustomerWithoutUser()
{
$this->loginAs()
2018-09-29 17:28:34 +03:00
->post(route('customers.store'), $this->getCustomerRequest())
2018-07-14 13:29:16 +03:00
->assertStatus(302)
2018-09-29 17:28:34 +03:00
->assertRedirect(route('customers.index'));
$this->assertFlashLevel('success');
2018-07-14 13:29:16 +03:00
}
public function testItShouldCreateCustomerWithUser()
{
2018-09-29 17:28:34 +03:00
$customer = $this->getCustomerRequestWithUser();
2018-07-14 13:29:16 +03:00
$this->loginAs()
2018-09-29 17:28:34 +03:00
->post(route('customers.store'), $customer)
2018-07-14 13:29:16 +03:00
->assertStatus(302)
2018-09-29 17:28:34 +03:00
->assertRedirect(route('customers.index'));
2018-07-14 13:29:16 +03:00
2018-09-29 17:28:34 +03:00
$this->assertFlashLevel('success');
$user = User::where('email', $customer['email'])->first();
2018-07-14 13:29:16 +03:00
$this->assertNotNull($user);
2018-09-29 17:28:34 +03:00
$this->assertEquals($customer['email'], $user->email);
2018-07-14 13:29:16 +03:00
}
public function testItShouldNotCreateCustomerWithExistsUser()
{
2018-09-29 17:28:34 +03:00
$customer = $this->getCustomerRequestWithUser();
User::create($customer);
2018-07-14 13:29:16 +03:00
$this->loginAs()
2018-09-29 17:28:34 +03:00
->post(route('customers.store'), $customer)
2018-07-14 13:29:16 +03:00
->assertSessionHasErrors(['email']);
}
2018-09-29 22:41:17 +03:00
public function testItShouldSeeCustomerDetailPage()
2018-07-14 13:29:16 +03:00
{
2018-09-29 17:28:34 +03:00
$customer = Customer::create($this->getCustomerRequest());
2018-09-29 22:41:17 +03:00
$this->loginAs()
->get(route('customers.show', ['customer' => $customer->id]))
2018-07-14 13:29:16 +03:00
->assertStatus(200)
->assertSee($customer->email);
}
2018-09-29 22:41:17 +03:00
public function testItShouldSeeCustomerUpdatePage()
2018-07-14 13:29:16 +03:00
{
2018-09-29 17:28:34 +03:00
$customer = Customer::create($this->getCustomerRequest());
2018-09-29 22:41:17 +03:00
$this->loginAs()
2018-07-14 13:29:16 +03:00
->get(route('customers.edit', ['customer' => $customer->id]))
->assertStatus(200)
->assertSee($customer->email)
->assertSee($customer->name);
}
2018-09-29 22:41:17 +03:00
public function testItShouldUpdateCustomer()
2018-07-14 13:29:16 +03:00
{
2018-09-29 17:28:34 +03:00
$request = $this->getCustomerRequest();
$customer = Customer::create($request);
$request['name'] = $this->faker->name;
2018-07-14 13:29:16 +03:00
2018-09-29 22:41:17 +03:00
$this->loginAs()
2018-09-29 17:28:34 +03:00
->patch(route('customers.update', $customer->id), $request)
2018-07-14 13:29:16 +03:00
->assertStatus(302)
->assertRedirect(route('customers.index'));
2018-09-29 17:28:34 +03:00
2018-07-14 13:29:16 +03:00
$this->assertFlashLevel('success');
}
2018-09-29 22:41:17 +03:00
public function testItShouldDeleteCustomer()
2018-07-14 13:29:16 +03:00
{
2018-09-29 17:28:34 +03:00
$customer = Customer::create($this->getCustomerRequest());
2018-07-14 13:29:16 +03:00
$this->loginAs()
->delete(route('customers.destroy', $customer->id))
->assertStatus(302)
->assertRedirect(route('customers.index'));
$this->assertFlashLevel('success');
}
2018-09-29 22:41:17 +03:00
public function testItShouldNotDeleteCustomerIfHasRelations()
2018-07-14 13:29:16 +03:00
{
$this->assertTrue(true);
//TODO : This will write after done invoice and revenues tests.
}
2018-09-29 17:28:34 +03:00
private function getCustomerRequest()
2018-07-14 13:29:16 +03:00
{
return [
'company_id' => $this->company->id,
'name' => $this->faker->name,
'email' => $this->faker->email,
2018-09-29 22:41:17 +03:00
'tax_number' => $this->faker->randomNumber(9),
2018-07-14 13:29:16 +03:00
'phone' => $this->faker->phoneNumber,
2018-09-29 22:41:17 +03:00
'address' => $this->faker->address,
2018-07-14 13:29:16 +03:00
'website' => 'www.akaunting.com',
2018-09-29 22:41:17 +03:00
'currency_code' => $this->company->currencies()->enabled()->first()->code,
2018-07-14 13:29:16 +03:00
'enabled' => $this->faker->boolean ? 1 : 0
];
}
2018-09-29 17:28:34 +03:00
private function getCustomerRequestWithUser()
2018-07-14 13:29:16 +03:00
{
$password = $this->faker->password;
2018-09-29 17:28:34 +03:00
return $this->getCustomerRequest() + [
2018-07-14 13:29:16 +03:00
'create_user' => 1,
'locale' => 'en-GB',
'password' => $password,
'password_confirmation' => $password
];
}
}