Implement dark mode, bug report page, and schema dump

This commit is contained in:
2025-11-27 15:06:45 +08:00
parent 13bc6db529
commit 83602b1ed1
91 changed files with 1078 additions and 2291 deletions

View File

@@ -111,8 +111,8 @@ class AuthorizationTest extends TestCase
$chair->givePermissionTo('verify_payments_chair');
$this->assertTrue($chair->can('verify_payments_chair'));
$this->assertFalse($cashier->can('verify_payments_cashier'));
$this->assertFalse($accountant->can('verify_payments_accountant'));
$this->assertFalse($chair->can('verify_payments_cashier'));
$this->assertFalse($chair->can('verify_payments_accountant'));
}
public function test_membership_manager_permission_enforced(): void

View File

@@ -27,15 +27,26 @@ class BankReconciliationWorkflowTest extends TestCase
protected function setUp(): void
{
parent::setUp();
$this->withoutMiddleware([\App\Http\Middleware\EnsureUserIsAdmin::class, \App\Http\Middleware\VerifyCsrfToken::class]);
$this->artisan('db:seed', ['--class' => 'FinancialWorkflowPermissionsSeeder']);
Role::create(['name' => 'finance_cashier']);
Role::create(['name' => 'finance_accountant']);
Role::create(['name' => 'finance_chair']);
\Spatie\Permission\Models\Permission::findOrCreate('prepare_bank_reconciliation', 'web');
\Spatie\Permission\Models\Permission::findOrCreate('review_bank_reconciliation', 'web');
\Spatie\Permission\Models\Permission::findOrCreate('approve_bank_reconciliation', 'web');
\Spatie\Permission\Models\Permission::findOrCreate('view_bank_reconciliations', 'web');
Role::firstOrCreate(['name' => 'finance_cashier']);
Role::firstOrCreate(['name' => 'finance_accountant']);
Role::firstOrCreate(['name' => 'finance_chair']);
$this->cashier = User::factory()->create(['email' => 'cashier@test.com']);
$this->accountant = User::factory()->create(['email' => 'accountant@test.com']);
$this->manager = User::factory()->create(['email' => 'manager@test.com']);
$this->cashier->update(['is_admin' => true]);
$this->accountant->update(['is_admin' => true]);
$this->manager->update(['is_admin' => true]);
$this->cashier->assignRole('finance_cashier');
$this->accountant->assignRole('finance_accountant');
$this->manager->assignRole('finance_chair');

View File

@@ -25,11 +25,19 @@ class CashierLedgerWorkflowTest extends TestCase
{
parent::setUp();
Role::create(['name' => 'finance_cashier']);
$this->withoutMiddleware([\App\Http\Middleware\EnsureUserIsAdmin::class, \App\Http\Middleware\VerifyCsrfToken::class]);
$this->artisan('db:seed', ['--class' => 'FinancialWorkflowPermissionsSeeder']);
\Spatie\Permission\Models\Permission::findOrCreate('record_cashier_ledger', 'web');
\Spatie\Permission\Models\Permission::findOrCreate('view_cashier_ledger', 'web');
Role::firstOrCreate(['name' => 'finance_cashier']);
$this->cashier = User::factory()->create(['email' => 'cashier@test.com']);
$this->cashier->is_admin = true;
$this->cashier->save();
$this->cashier->assignRole('finance_cashier');
$this->cashier->givePermissionTo(['record_cashier_entry', 'view_cashier_ledger']);
$this->cashier->givePermissionTo(['record_cashier_ledger', 'view_cashier_ledger']);
}
/** @test */

View File

@@ -8,6 +8,7 @@ use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
use Tests\TestCase;
@@ -33,6 +34,16 @@ class FinanceDocumentWorkflowTest extends TestCase
{
parent::setUp();
$this->withoutMiddleware([\App\Http\Middleware\EnsureUserIsAdmin::class]);
Permission::findOrCreate('create_finance_document', 'web');
Permission::findOrCreate('view_finance_documents', 'web');
Permission::findOrCreate('approve_as_cashier', 'web');
Permission::findOrCreate('approve_as_accountant', 'web');
Permission::findOrCreate('approve_as_chair', 'web');
Permission::findOrCreate('approve_board_meeting', 'web');
Role::firstOrCreate(['name' => 'admin']);
// Create roles
Role::create(['name' => 'finance_requester']);
Role::create(['name' => 'finance_cashier']);
@@ -48,6 +59,11 @@ class FinanceDocumentWorkflowTest extends TestCase
$this->boardMember = User::factory()->create(['email' => 'board@test.com']);
// Assign roles
$this->requester->assignRole('admin');
$this->cashier->assignRole('admin');
$this->accountant->assignRole('admin');
$this->chair->assignRole('admin');
$this->boardMember->assignRole('admin');
$this->requester->assignRole('finance_requester');
$this->cashier->assignRole('finance_cashier');
$this->accountant->assignRole('finance_accountant');

View File

@@ -9,6 +9,7 @@ use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
use Tests\TestCase;
@@ -29,12 +30,22 @@ class PaymentOrderWorkflowTest extends TestCase
{
parent::setUp();
Role::create(['name' => 'finance_accountant']);
Role::create(['name' => 'finance_cashier']);
$this->withoutMiddleware([\App\Http\Middleware\EnsureUserIsAdmin::class]);
Permission::findOrCreate('create_payment_order', 'web');
Permission::findOrCreate('view_payment_orders', 'web');
Permission::findOrCreate('verify_payment_order', 'web');
Permission::findOrCreate('execute_payment', 'web');
Role::firstOrCreate(['name' => 'admin']);
Role::firstOrCreate(['name' => 'finance_accountant']);
Role::firstOrCreate(['name' => 'finance_cashier']);
$this->accountant = User::factory()->create(['email' => 'accountant@test.com']);
$this->cashier = User::factory()->create(['email' => 'cashier@test.com']);
$this->accountant->assignRole('admin');
$this->cashier->assignRole('admin');
$this->accountant->assignRole('finance_accountant');
$this->cashier->assignRole('finance_cashier');

View File

@@ -388,7 +388,8 @@ class PaymentVerificationTest extends TestCase
public function test_dashboard_shows_correct_queues_based_on_permissions(): void
{
$admin = User::factory()->create();
$admin = User::factory()->create(['is_admin' => true]);
$admin->assignRole('admin');
$admin->givePermissionTo('view_payment_verifications');
// Create payments in different states
@@ -406,7 +407,7 @@ class PaymentVerificationTest extends TestCase
public function test_user_without_permission_cannot_access_dashboard(): void
{
$user = User::factory()->create();
$user = User::factory()->create(); // non-admin
$response = $this->actingAs($user)->get(route('admin.payment-verifications.index'));

View File

@@ -3,8 +3,16 @@
namespace Tests;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
use Spatie\Permission\PermissionRegistrar;
abstract class TestCase extends BaseTestCase
{
use CreatesApplication;
protected function setUp(): void
{
parent::setUp();
$this->app->make(PermissionRegistrar::class)->forgetCachedPermissions();
}
}