55 lines
2.3 KiB
PHP
55 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature\Business;
|
|
|
|
use App\Models\Auth\Role;
|
|
use App\Models\Auth\User;
|
|
use App\Utilities\FinanceLedgerAccess;
|
|
use Tests\Feature\FeatureTestCase;
|
|
|
|
class FinanceLedgerAccessTest extends FeatureTestCase
|
|
{
|
|
public function test_super_admin_and_admin_can_edit_finance_ledger_but_regular_users_cannot(): void
|
|
{
|
|
$regularUser = $this->account('user');
|
|
$admin = $this->account('admin');
|
|
$superAdmin = $this->account('super_admin');
|
|
$transactionEditor = $this->account('user', '玉兔');
|
|
|
|
$this->assertFalse(FinanceLedgerAccess::canEditMapping($regularUser));
|
|
$this->assertFalse(FinanceLedgerAccess::canEditAccountStatus($regularUser));
|
|
$this->assertFalse(FinanceLedgerAccess::canEditAccountType($regularUser));
|
|
$this->assertFalse(FinanceLedgerAccess::canEditTransactions($regularUser));
|
|
|
|
$this->assertTrue(FinanceLedgerAccess::canEditMapping($admin));
|
|
$this->assertTrue(FinanceLedgerAccess::canEditAccountStatus($admin));
|
|
$this->assertTrue(FinanceLedgerAccess::canEditAccountType($admin));
|
|
$this->assertTrue(FinanceLedgerAccess::canEditTransactions($admin));
|
|
|
|
$this->assertTrue(FinanceLedgerAccess::canEditMapping($superAdmin));
|
|
$this->assertTrue(FinanceLedgerAccess::canEditAccountStatus($superAdmin));
|
|
$this->assertTrue(FinanceLedgerAccess::canEditAccountType($superAdmin));
|
|
$this->assertTrue(FinanceLedgerAccess::canEditTransactions($superAdmin));
|
|
|
|
$this->assertFalse(FinanceLedgerAccess::canEditMapping($transactionEditor));
|
|
$this->assertFalse(FinanceLedgerAccess::canEditAccountStatus($transactionEditor));
|
|
$this->assertTrue(FinanceLedgerAccess::canEditTransactions($transactionEditor));
|
|
}
|
|
|
|
private function account(string $role, ?string $name = null): User
|
|
{
|
|
$name ??= 'finance-ledger-access-' . $role . '-' . User::count();
|
|
$user = User::create([
|
|
'name' => $name,
|
|
'email' => 'finance-ledger-access-' . User::count() . '@example.test',
|
|
'password' => 'fixture-only-password',
|
|
'enabled' => true,
|
|
'locale' => 'zh-CN',
|
|
'landing_page' => 'dashboard',
|
|
]);
|
|
$user->roles()->attach(Role::where('name', $role)->firstOrFail()->id);
|
|
|
|
return $user;
|
|
}
|
|
}
|