akaunting 3.0 (the last dance)

This commit is contained in:
Burak Civan
2022-06-01 10:15:55 +03:00
parent cead09f6d4
commit d9c0764572
3812 changed files with 126831 additions and 102949 deletions

View File

@ -1,89 +0,0 @@
<?php
namespace Tests\Feature\Auth;
use App\Jobs\Auth\CreatePermission;
use App\Models\Auth\Permission;
use Tests\Feature\FeatureTestCase;
class PermissionsTest extends FeatureTestCase
{
public function testItShouldSeePermissionListPage()
{
$this->loginAs()
->get(route('permissions.index'))
->assertStatus(200)
->assertSeeText(trans_choice('general.permissions', 2));
}
public function testItShouldSeePermissionCreatePage()
{
$this->loginAs()
->get(route('permissions.create'))
->assertStatus(200)
->assertSeeText(trans('general.title.new', ['type' => trans_choice('general.permissions', 1)]));
}
public function testItShouldCreatePermission()
{
$request = $this->getRequest();
$this->loginAs()
->post(route('permissions.store'), $request)
->assertStatus(200);
$this->assertFlashLevel('success');
$this->assertDatabaseHas('permissions', $request);
}
public function testItShouldSeePermissionUpdatePage()
{
$request = $this->getRequest();
$permission = $this->dispatch(new CreatePermission($request));
$this->loginAs()
->get(route('permissions.edit', $permission->id))
->assertStatus(200)
->assertSee($permission->name);
}
public function testItShouldUpdatePermission()
{
$request = $this->getRequest();
$permission = $this->dispatch(new CreatePermission($request));
$request['display_name'] = $this->faker->word;
$this->loginAs()
->patch(route('permissions.update', $permission->id), $request)
->assertStatus(200)
->assertSee($request['display_name']);
$this->assertFlashLevel('success');
$this->assertDatabaseHas('permissions', $request);
}
public function testItShouldDeletePermission()
{
$request = $this->getRequest();
$permission = $this->dispatch(new CreatePermission($request));
$this->loginAs()
->delete(route('permissions.destroy', $permission->id))
->assertStatus(200);
$this->assertFlashLevel('success');
$this->assertDatabaseMissing('permissions', $request);
}
public function getRequest()
{
return Permission::factory()->raw();
}
}

View File

@ -1,96 +0,0 @@
<?php
namespace Tests\Feature\Auth;
use App\Jobs\Auth\CreateRole;
use App\Models\Auth\Role;
use Tests\Feature\FeatureTestCase;
class RolesTest extends FeatureTestCase
{
public function testItShouldSeeRoleListPage()
{
$this->loginAs()
->get(route('roles.index'))
->assertStatus(200)
->assertSeeText(trans_choice('general.roles', 2));
}
public function testItShouldSeeRoleCreatePage()
{
$this->loginAs()
->get(route('roles.create'))
->assertStatus(200)
->assertSeeText(trans('general.title.new', ['type' => trans_choice('general.roles', 1)]));
}
public function testItShouldCreateRole()
{
$request = $this->getRequest();
$this->loginAs()
->post(route('roles.store'), $request)
->assertStatus(200);
$this->assertFlashLevel('success');
$this->assertDatabaseHas('roles', $this->getAssertRequest($request));
}
public function testItShouldSeeRoleUpdatePage()
{
$request = $this->getRequest();
$role = $this->dispatch(new CreateRole($request));
$this->loginAs()
->get(route('roles.edit', $role->id))
->assertStatus(200)
->assertSee($role->name);
}
public function testItShouldUpdateRole()
{
$request = $this->getRequest();
$role = $this->dispatch(new CreateRole($request));
$request['display_name'] = $this->faker->word;
$this->loginAs()
->patch(route('roles.update', $role->id), $request)
->assertStatus(200)
->assertSee($request['display_name']);
$this->assertFlashLevel('success');
$this->assertDatabaseHas('roles', $this->getAssertRequest($request));
}
public function testItShouldDeleteRole()
{
$request = $this->getRequest();
$role = $this->dispatch(new CreateRole($request));
$this->loginAs()
->delete(route('roles.destroy', $role->id))
->assertStatus(200);
$this->assertFlashLevel('success');
$this->assertDatabaseMissing('roles', $this->getAssertRequest($request));
}
public function getRequest()
{
return Role::factory()->permissions()->raw();
}
public function getAssertRequest($request)
{
unset($request['permissions']);
return $request;
}
}

View File

@ -12,7 +12,7 @@ class UsersTest extends FeatureTestCase
{
$this->loginAs()
->get(route('users.index'))
->assertStatus(200)
->assertOk()
->assertSeeText(trans_choice('general.users', 2));
}
@ -20,8 +20,8 @@ class UsersTest extends FeatureTestCase
{
$this->loginAs()
->get(route('users.create'))
->assertStatus(200)
->assertSeeText(trans('general.title.new', ['type' => trans_choice('general.users', 1)]));
->assertOk()
->assertSeeText(trans('general.title.invite', ['type' => trans_choice('general.users', 1)]));
}
public function testItShouldCreateUser()
@ -30,7 +30,7 @@ class UsersTest extends FeatureTestCase
$this->loginAs()
->post(route('users.store'), $request)
->assertStatus(200);
->assertOk();
$this->assertFlashLevel('success');
@ -45,7 +45,7 @@ class UsersTest extends FeatureTestCase
$this->loginAs()
->get(route('users.edit', $user->id))
->assertStatus(200)
->assertOk()
->assertSee($user->email);
}
@ -55,11 +55,11 @@ class UsersTest extends FeatureTestCase
$user = $this->dispatch(new CreateUser($request));
$request['email'] = $this->faker->safeEmail;
$request['email'] = $this->faker->freeEmail;
$this->loginAs()
->patch(route('users.update', $user->id), $request)
->assertStatus(200)
->assertOk()
->assertSee($request['email']);
$this->assertFlashLevel('success');
@ -75,7 +75,7 @@ class UsersTest extends FeatureTestCase
$this->loginAs()
->delete(route('users.destroy', $user->id))
->assertStatus(200);
->assertOk();
$this->assertFlashLevel('success');
@ -85,7 +85,7 @@ class UsersTest extends FeatureTestCase
public function testItShouldSeeLoginPage()
{
$this->get(route('login'))
->assertStatus(200)
->assertOk()
->assertSeeText(trans('auth.login_to'));
}
@ -96,7 +96,7 @@ class UsersTest extends FeatureTestCase
$user = $this->dispatch(new CreateUser($request));
$this->post(route('login'), ['email' => $user->email, 'password' => $user->password])
->assertStatus(200);
->assertOk();
$this->isAuthenticated($user->user);
}
@ -108,7 +108,7 @@ class UsersTest extends FeatureTestCase
$user = $this->dispatch(new CreateUser($request));
$this->post(route('login'), ['email' => $user->email, 'password' => $this->faker->password()])
->assertStatus(200);
->assertOk();
$this->assertGuest();
}

View File

@ -0,0 +1,194 @@
<?php
namespace Tests\Feature\Banking;
use App\Exports\Banking\Transactions as Export;
use App\Jobs\Banking\CreateTransaction;
use App\Models\Banking\Transaction;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\File;
use Tests\Feature\FeatureTestCase;
class TransactionsTest extends FeatureTestCase
{
public function testItShouldSeeTransactionListPage()
{
$this->loginAs()
->get(route('transactions.index'))
->assertStatus(200)
->assertSeeText(trans_choice('general.transactions', 2));
}
public function testItShouldSeeTransactionShowPage()
{
$request = $this->getRequest();
$transaction = $this->dispatch(new CreateTransaction($request));
$this->loginAs()
->get(route('transactions.show', $transaction->id))
->assertStatus(200)
->assertSee($transaction->contact->email);
}
public function testItShouldSeeTransactionCreatePage()
{
$this->loginAs()
->get(route('transactions.create', ['type' => 'income']))
->assertStatus(200)
->assertSeeText(trans('general.title.new', ['type' => trans_choice('general.incomes', 1)]));
}
public function testItShouldCreateTransaction()
{
$request = $this->getRequest();
$this->loginAs()
->post(route('transactions.store'), $request)
->assertStatus(200);
$this->assertFlashLevel('success');
$this->assertDatabaseHas('transactions', $request);
}
public function testItShouldCreateTransactionWithRecurring()
{
$request = $this->getRequest(true);
$this->loginAs()
->post(route('recurring-transactions.store'), $request)
->assertStatus(200);
$this->assertFlashLevel('success');
$this->assertDatabaseHas('transactions', [
'type' => 'income-recurring',
'paid_at' => $request['recurring_started_at'],
'amount' => $request['amount'],
]);
}
public function testItShouldSeeTransactionUpdatePage()
{
$request = $this->getRequest();
$transaction = $this->dispatch(new CreateTransaction($request));
$this->loginAs()
->get(route('transactions.edit', $transaction->id))
->assertStatus(200)
->assertSee($transaction->amount);
}
public function testItShouldUpdateTransaction()
{
$request = $this->getRequest();
$transaction = $this->dispatch(new CreateTransaction($request));
$request['amount'] = $this->faker->randomFloat(2, 1, 1000);
$this->loginAs()
->patch(route('transactions.update', $transaction->id), $request)
->assertStatus(200)
->assertSee($request['amount']);
$this->assertFlashLevel('success');
$this->assertDatabaseHas('transactions', $request);
}
public function testItShouldDeleteTransaction()
{
$request = $this->getRequest();
$transaction = $this->dispatch(new CreateTransaction($request));
$this->loginAs()
->delete(route('transactions.destroy', $transaction->id))
->assertStatus(200);
$this->assertFlashLevel('success');
$this->assertSoftDeleted('transactions', $request);
}
public function testItShouldExportTransactions()
{
$count = 5;
Transaction::factory()->income()->count($count)->create();
\Excel::fake();
$this->loginAs()
->get(route('transactions.export'))
->assertStatus(200);
\Excel::matchByRegex();
\Excel::assertDownloaded(
'/' . \Str::filename(trans_choice('general.transactions', 2)) . '-\d{10}\.xlsx/',
function (Export $export) use ($count) {
// Assert that the correct export is downloaded.
return $export->collection()->count() === $count;
}
);
}
public function testItShouldExportSelectedTransactions()
{
$create_count = 5;
$select_count = 3;
$transactions = Transaction::factory()->income()->count($create_count)->create();
\Excel::fake();
$this->loginAs()
->post(
route('bulk-actions.action', ['group' => 'banking', 'type' => 'transactions']),
['handle' => 'export', 'selected' => $transactions->take($select_count)->pluck('id')->toArray()]
)
->assertStatus(200);
\Excel::matchByRegex();
\Excel::assertDownloaded(
'/' . \Str::filename(trans_choice('general.transactions', 2)) . '-\d{10}\.xlsx/',
function (Export $export) use ($select_count) {
return $export->collection()->count() === $select_count;
}
);
}
public function testItShouldImportTransactions()
{
\Excel::fake();
$this->loginAs()
->post(
route('transactions.import'),
[
'import' => UploadedFile::fake()->createWithContent(
'transactions.xlsx',
File::get(public_path('files/import/transactions.xlsx'))
),
]
)
->assertStatus(200);
\Excel::assertImported('transactions.xlsx');
$this->assertFlashLevel('success');
}
public function getRequest($recurring = false)
{
$factory = Transaction::factory();
$factory = $recurring ? $factory->income()->recurring() : $factory->income();
return $factory->raw();
}
}

View File

@ -2,7 +2,9 @@
namespace Tests\Feature\Commands;
use App\Jobs\Banking\CreateTransaction;
use App\Jobs\Document\CreateDocument;
use App\Models\Banking\Transaction;
use App\Models\Document\Document;
use App\Notifications\Sale\Invoice as InvoiceNotification;
use App\Utilities\Date;
@ -20,13 +22,13 @@ class RecurringCheckTest extends FeatureTestCase
$this->recurring_count = 7;
}
public function testItShouldCreateCorrectNumberOfRecurringInvoices(): void
public function testItShouldCreateCorrectNumberOfRecurringInvoicesByCount(): void
{
Notification::fake();
$this->dispatch(new CreateDocument($this->getRequest()));
$this->dispatch(new CreateDocument($this->getInvoiceRequest('count')));
Date::setTestNow(Date::now());
Date::setTestNow(Date::today());
$this->artisan('recurring:check');
@ -35,13 +37,28 @@ class RecurringCheckTest extends FeatureTestCase
Notification::assertSentToTimes($this->user, InvoiceNotification::class, $this->recurring_count);
}
public function testItShouldNotCreateAnyRecurringInvoice(): void
public function testItShouldCreateCorrectNumberOfRecurringInvoicesByDate(): void
{
Notification::fake();
$this->dispatch(new CreateDocument($this->getRequest()));
$this->dispatch(new CreateDocument($this->getInvoiceRequest('date')));
Date::setTestNow(Date::now()->subDays($this->recurring_count + 1));
Date::setTestNow(Date::today());
$this->artisan('recurring:check');
$this->assertDatabaseCount('documents', $this->recurring_count + 1);
Notification::assertSentToTimes($this->user, InvoiceNotification::class, $this->recurring_count);
}
public function testItShouldNotCreateAnyRecurringInvoiceByCount(): void
{
Notification::fake();
$this->dispatch(new CreateDocument($this->getInvoiceRequest('count')));
Date::setTestNow(Date::today()->subDays($this->recurring_count));
$this->artisan('recurring:check');
@ -50,11 +67,94 @@ class RecurringCheckTest extends FeatureTestCase
Notification::assertNotSentTo($this->user, InvoiceNotification::class);
}
public function getRequest(): array
public function testItShouldNotCreateAnyRecurringInvoiceByDate(): void
{
return Document::factory()->invoice()->items()->recurring()->sent()->raw([
'issued_at' => Date::now()->subDays($this->recurring_count + 1),
'recurring_count' => '20',
]);
Notification::fake();
$this->dispatch(new CreateDocument($this->getInvoiceRequest('date')));
Date::setTestNow(Date::today()->subDays($this->recurring_count));
$this->artisan('recurring:check');
$this->assertDatabaseCount('documents', 1);
Notification::assertNotSentTo($this->user, InvoiceNotification::class);
}
public function testItShouldCreateCorrectNumberOfRecurringExpensesByCount(): void
{
$this->dispatch(new CreateTransaction($this->getExpenseRequest('count')));
Date::setTestNow(Date::today());
$this->artisan('recurring:check');
$this->assertDatabaseCount('transactions', $this->recurring_count + 1);
}
public function testItShouldCreateCorrectNumberOfRecurringExpensesByDate(): void
{
$this->dispatch(new CreateTransaction($this->getExpenseRequest('date')));
Date::setTestNow(Date::today());
$this->artisan('recurring:check');
$this->assertDatabaseCount('transactions', $this->recurring_count + 1);
}
public function testItShouldNotCreateAnyRecurringExpenseByCount(): void
{
$this->dispatch(new CreateTransaction($this->getExpenseRequest('count')));
Date::setTestNow(Date::today()->subDays($this->recurring_count));
$this->artisan('recurring:check');
$this->assertDatabaseCount('transactions', 1);
}
public function testItShouldNotCreateAnyRecurringExpenseByDate(): void
{
$this->dispatch(new CreateTransaction($this->getExpenseRequest('date')));
Date::setTestNow(Date::today()->subDays($this->recurring_count));
$this->artisan('recurring:check');
$this->assertDatabaseCount('transactions', 1);
}
public function getInvoiceRequest(string $limit_by): array
{
$request = Document::factory()->invoice()->items()->sent()->recurring()->raw();
return array_merge($request, $this->getRecurringData($limit_by));
}
public function getExpenseRequest(string $limit_by): array
{
$request = Transaction::factory()->expense()->recurring()->raw();
return array_merge($request, $this->getRecurringData($limit_by));
}
public function getRecurringData(string $limit_by): array
{
$data = [
'recurring_started_at' => Date::today()->subDays($this->recurring_count - 1),
'recurring_limit' => $limit_by,
];
if ($limit_by == 'count') {
$data['recurring_limit_count'] = 20;
}
if ($limit_by == 'date') {
$data['recurring_limit_date'] = Date::today()->addDays($this->recurring_count + 5)->toDateTimeString();
}
return $data;
}
}

View File

@ -4,8 +4,9 @@ namespace Tests\Feature\Common;
use App\Models\Common\Widget;
use App\Models\Common\Dashboard;
use Tests\Feature\FeatureTestCase;
use App\Jobs\Common\CreateDashboard;
use App\Utilities\Widgets;
use Tests\Feature\FeatureTestCase;
class DashboardsTest extends FeatureTestCase
{
@ -94,13 +95,12 @@ class DashboardsTest extends FeatureTestCase
public function testItShouldSeeWidgetCreate()
{
$classes = Widget::factory()->classes;
$class = $classes[rand(0, 9)];
$class = Widgets::$core_widgets[array_rand(Widgets::$core_widgets)];
$this->loginAs()
->get(route('widgets.index'))
->assertOk()
->assertSeeText((new $class())->getDefaultName());
->assertSeeText((new $class())->getDefaultName(), false);
}
public function testItShouldSeeWidgetEdit()

View File

@ -1,67 +0,0 @@
<?php
namespace Tests\Feature\Common;
use App\Jobs\Auth\NotifyUser;
use App\Notifications\Common\ImportCompleted;
use Cache;
use Date;
use Illuminate\Support\Str;
use Tests\Feature\FeatureTestCase;
class NotificationsTest extends FeatureTestCase
{
public function testItShouldSeeNotificationListPage()
{
$this->loginAs()
->get(route('notifications.index'))
->assertStatus(200)
->assertSeeText(trans_choice('general.items', 2));
}
public function testItShouldSeeReadAllAction()
{
$this->loginAs()
->get(route('notifications.read-all'))
->assertStatus(302);
$this->assertFlashLevel('success');
}
public function testItShouldSeeDisableAction()
{
$this->loginAs()
->post(route('notifications.disable'), ['path' => 'double-entry', 'id' => 1])
->assertOk()
->assertSeeText(trans('messages.success.disabled', [
'type' => Str::lower(trans_choice('general.notifications', 2))
]));
}
public function testItShouldSeeNewApps()
{
$notificatinos = $this->getNewApps();
$this->loginAs()
->get(route('notifications.index'))
->assertOk()
->assertSeeText('Double-Entry');
}
protected function getNewApps()
{
$new_apps[] = (object) [
"name" => "Double-Entry",
"alias" => "double-entry",
"message" => "<a href=\"https:\/\/akaunting.com\/apps\/double-entry?utm_source=Notifications&utm_medium=App&utm_campaign=Double-Entry\" target=\"_blank\">Double-Entry<\/a> app is published. You can check it out!",
"path" =>"new-apps",
"started_at" => "2021-06-26 00:00:00",
"ended_at" => "2021-07-11 00:00:00",
"status" => 2,
];
$key = 'apps.notifications';
Cache::put($key, ['new-apps' => $new_apps], Date::now()->addHour(6));
}
}

View File

@ -2,10 +2,8 @@
namespace Tests\Feature;
use App\Models\Auth\User;
use App\Models\Common\Contact;
use App\Models\Document\Document;
use App\Jobs\Common\CreateContact;
use App\Jobs\Document\CreateDocument;
use App\Jobs\Setting\CreateCurrency;
use Illuminate\Support\Facades\File;
@ -52,7 +50,7 @@ class PaymentTestCase extends FeatureTestCase
$this->updateSetting();
$this->createCustomer();
$this->loginAsCustomer();
$this->createInvoice();
@ -140,20 +138,11 @@ class PaymentTestCase extends FeatureTestCase
$this->invoice = $this->dispatch(new CreateDocument($this->getInvoiceRequest()));
}
public function createCustomer()
public function loginAsCustomer()
{
$password = $this->faker->password;
$this->customer = Contact::customer()->first();
$request = Contact::factory()->customer()->enabled()->raw() + [
'create_user' => 'true',
'locale' => 'en-GB',
'password' => $password,
'password_confirmation' => $password,
];
$this->customer = $this->dispatch(new CreateContact($request));
$this->customer_user = User::where('email', $request['email'])->first();
$this->customer_user = $this->customer->user;
}
public function getInvoiceRequest()

View File

@ -83,10 +83,12 @@ class BillsTest extends FeatureTestCase
$this->assertDatabaseHas('documents', [
'document_number' => $request['document_number']
]);
$this->assertDatabaseHas('mediables', [
'mediable_type' => Document::class,
'tag' => 'attachment',
]);
$this->assertDatabaseHas('media', [
'disk' => 'uploads',
'directory' => '2021/05/15/1/bills',
@ -102,12 +104,13 @@ class BillsTest extends FeatureTestCase
$request = $this->getRequest(true);
$this->loginAs()
->post(route('bills.store'), $request)
->post(route('recurring-bills.store'), $request)
->assertStatus(200);
$this->assertFlashLevel('success');
$this->assertDatabaseHas('documents', [
'type' => Document::BILL_RECURRING_TYPE,
'document_number' => $request['document_number'],
]);
}

View File

@ -1,172 +0,0 @@
<?php
namespace Tests\Feature\Purchases;
use App\Exports\Purchases\Payments as Export;
use App\Jobs\Banking\CreateTransaction;
use App\Models\Banking\Transaction;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\File;
use Tests\Feature\FeatureTestCase;
class PaymentsTest extends FeatureTestCase
{
public function testItShouldSeePaymentListPage()
{
$this->loginAs()
->get(route('payments.index'))
->assertStatus(200)
->assertSeeText(trans_choice('general.payments', 2));
}
public function testItShouldSeePaymentShowPage()
{
$request = $this->getRequest();
$payment = $this->dispatch(new CreateTransaction($request));
$this->loginAs()
->get(route('payments.show', $payment->id))
->assertStatus(200)
->assertSee($payment->contact->email);
}
public function testItShouldSeePaymentCreatePage()
{
$this->loginAs()
->get(route('payments.create'))
->assertStatus(200)
->assertSeeText(trans('general.title.new', ['type' => trans_choice('general.payments', 1)]));
}
public function testItShouldCreatePayment()
{
$request = $this->getRequest();
$this->loginAs()
->post(route('payments.store'), $request)
->assertStatus(200);
$this->assertFlashLevel('success');
$this->assertDatabaseHas('transactions', $request);
}
public function testItShouldSeePaymentUpdatePage()
{
$request = $this->getRequest();
$payment = $this->dispatch(new CreateTransaction($request));
$this->loginAs()
->get(route('payments.edit', $payment->id))
->assertStatus(200)
->assertSee($payment->amount);
}
public function testItShouldUpdatePayment()
{
$request = $this->getRequest();
$payment = $this->dispatch(new CreateTransaction($request));
$request['amount'] = $this->faker->randomFloat(2, 1, 1000);
$this->loginAs()
->patch(route('payments.update', $payment->id), $request)
->assertStatus(200)
->assertSee($request['amount']);
$this->assertFlashLevel('success');
$this->assertDatabaseHas('transactions', $request);
}
public function testItShouldDeletePayment()
{
$request = $this->getRequest();
$payment = $this->dispatch(new CreateTransaction($request));
$this->loginAs()
->delete(route('payments.destroy', $payment->id))
->assertStatus(200);
$this->assertFlashLevel('success');
$this->assertSoftDeleted('transactions', $request);
}
public function testItShouldExportPayments()
{
$count = 5;
Transaction::factory()->expense()->count($count)->create();
\Excel::fake();
$this->loginAs()
->get(route('payments.export'))
->assertStatus(200);
\Excel::matchByRegex();
\Excel::assertDownloaded(
'/' . \Str::filename(trans_choice('general.payments', 2)) . '-\d{10}\.xlsx/',
function (Export $export) use ($count) {
// Assert that the correct export is downloaded.
return $export->collection()->count() === $count;
}
);
}
public function testItShouldExportSelectedPayments()
{
$create_count = 5;
$select_count = 3;
$payments = Transaction::factory()->expense()->count($create_count)->create();
\Excel::fake();
$this->loginAs()
->post(
route('bulk-actions.action', ['group' => 'purchases', 'type' => 'payments']),
['handle' => 'export', 'selected' => $payments->take($select_count)->pluck('id')->toArray()]
)
->assertStatus(200);
\Excel::matchByRegex();
\Excel::assertDownloaded(
'/' . \Str::filename(trans_choice('general.payments', 2)) . '-\d{10}\.xlsx/',
function (Export $export) use ($select_count) {
return $export->collection()->count() === $select_count;
}
);
}
public function testItShouldImportPayments()
{
\Excel::fake();
$this->loginAs()
->post(
route('payments.import'),
[
'import' => UploadedFile::fake()->createWithContent(
'payments.xlsx',
File::get(public_path('files/import/payments.xlsx'))
),
]
)
->assertStatus(200);
\Excel::assertImported('payments.xlsx');
$this->assertFlashLevel('success');
}
public function getRequest()
{
return Transaction::factory()->expense()->raw();
}
}

View File

@ -84,7 +84,7 @@ class VendorsTest extends FeatureTestCase
$vendor = $this->dispatch(new CreateContact($request));
$request['email'] = $this->faker->safeEmail;
$request['email'] = $this->faker->freeEmail;
$this->loginAs()
->patch(route('vendors.update', $vendor->id), $request)

View File

@ -99,7 +99,7 @@ class CustomersTest extends FeatureTestCase
$customer = $this->dispatch(new CreateContact($request));
$request['email'] = $this->faker->safeEmail;
$request['email'] = $this->faker->freeEmail;
$this->loginAs()
->patch(route('customers.update', $customer->id), $request)

View File

@ -83,10 +83,12 @@ class InvoicesTest extends FeatureTestCase
$this->assertDatabaseHas('documents', [
'document_number' => $request['document_number']
]);
$this->assertDatabaseHas('mediables', [
'mediable_type' => Document::class,
'tag' => 'attachment',
]);
$this->assertDatabaseHas('media', [
'disk' => 'uploads',
'directory' => '2021/05/15/1/invoices',
@ -113,12 +115,13 @@ class InvoicesTest extends FeatureTestCase
$request = $this->getRequest(true);
$this->loginAs()
->post(route('invoices.store'), $request)
->post(route('recurring-invoices.store'), $request)
->assertStatus(200);
$this->assertFlashLevel('success');
$this->assertDatabaseHas('documents', [
'type' => Document::INVOICE_RECURRING_TYPE,
'document_number' => $request['document_number'],
]);
}

View File

@ -1,173 +0,0 @@
<?php
namespace Tests\Feature\Sales;
use App\Exports\Sales\Revenues as Export;
use App\Jobs\Banking\CreateTransaction;
use App\Models\Banking\Transaction;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\File;
use Tests\Feature\FeatureTestCase;
class RevenuesTest extends FeatureTestCase
{
public function testItShouldSeeRevenueListPage()
{
$this->loginAs()
->get(route('revenues.index'))
->assertStatus(200)
->assertSeeText(trans_choice('general.revenues', 2));
}
public function testItShouldSeeRevenueShowPage()
{
$request = $this->getRequest();
$revenue = $this->dispatch(new CreateTransaction($request));
$this->loginAs()
->get(route('revenues.show', $revenue->id))
->assertStatus(200)
->assertSee($revenue->contact->email);
}
public function testItShouldSeeRevenueCreatePage()
{
$this->loginAs()
->get(route('revenues.create'))
->assertStatus(200)
->assertSeeText(trans('general.title.new', ['type' => trans_choice('general.revenues', 1)]));
}
public function testItShouldCreateRevenue()
{
$request = $this->getRequest();
$this->loginAs()
->post(route('revenues.store'), $request)
->assertStatus(200);
$this->assertFlashLevel('success');
$this->assertDatabaseHas('transactions', $request);
}
public function testItShouldSeeRevenueUpdatePage()
{
$request = $this->getRequest();
$revenue = $this->dispatch(new CreateTransaction($request));
$this->loginAs()
->get(route('revenues.edit', $revenue->id))
->assertStatus(200)
->assertSee($revenue->amount);
}
public function testItShouldUpdateRevenue()
{
$request = $this->getRequest();
$revenue = $this->dispatch(new CreateTransaction($request));
$request['amount'] = $this->faker->randomFloat(2, 1, 1000);
$this->loginAs()
->patch(route('revenues.update', $revenue->id), $request)
->assertStatus(200)
->assertSee($request['amount']);
$this->assertFlashLevel('success');
$this->assertDatabaseHas('transactions', $request);
}
public function testItShouldDeleteRevenue()
{
$request = $this->getRequest();
$revenue = $this->dispatch(new CreateTransaction($request));
$this->loginAs()
->delete(route('revenues.destroy', $revenue->id))
->assertStatus(200);
$this->assertFlashLevel('success');
$this->assertSoftDeleted('transactions', $request);
}
public function testItShouldExportRevenues()
{
$count = 5;
Transaction::factory()->income()->count($count)->create();
\Excel::fake();
$this->loginAs()
->get(route('revenues.export'))
->assertStatus(200);
\Excel::matchByRegex();
\Excel::assertDownloaded(
'/' . \Str::filename(trans_choice('general.revenues', 2)) . '-\d{10}\.xlsx/',
function (Export $export) use ($count) {
// Assert that the correct export is downloaded.
return $export->collection()->count() === $count;
}
);
}
public function testItShouldExportSelectedRevenues()
{
$create_count = 5;
$select_count = 3;
$revenues = Transaction::factory()->income()->count($create_count)->create();
\Excel::fake();
$this->loginAs()
->post(
route('bulk-actions.action', ['group' => 'sales', 'type' => 'revenues']),
['handle' => 'export', 'selected' => $revenues->take($select_count)->pluck('id')->toArray()]
)
->assertStatus(200);
\Excel::matchByRegex();
\Excel::assertDownloaded(
'/' . \Str::filename(trans_choice('general.revenues', 2)) . '-\d{10}\.xlsx/',
function (Export $export) use ($select_count) {
return $export->collection()->count() === $select_count;
}
);
}
public function testItShouldImportRevenues()
{
\Excel::fake();
$this->loginAs()
->post(
route('revenues.import'),
[
'import' => UploadedFile::fake()->createWithContent(
'revenues.xlsx',
File::get(public_path('files/import/revenues.xlsx'))
),
]
)
->assertStatus(200);
\Excel::assertImported('revenues.xlsx');
$this->assertFlashLevel('success');
}
public function getRequest()
{
return Transaction::factory()->income()->raw();
}
}