seedRolesAndPermissions(); } public function test_amount_tier_small(): void { $document = $this->createFinanceDocument(['amount' => 3000]); $this->assertEquals(FinanceDocument::AMOUNT_TIER_SMALL, $document->determineAmountTier()); } public function test_amount_tier_medium(): void { $document = $this->createFinanceDocument(['amount' => 25000]); $this->assertEquals(FinanceDocument::AMOUNT_TIER_MEDIUM, $document->determineAmountTier()); } public function test_amount_tier_large(): void { $document = $this->createFinanceDocument(['amount' => 75000]); $this->assertEquals(FinanceDocument::AMOUNT_TIER_LARGE, $document->determineAmountTier()); } public function test_document_amount_boundary_small_medium(): void { // 4999 should be small $smallDoc = $this->createFinanceDocument(['amount' => 4999]); $this->assertEquals(FinanceDocument::AMOUNT_TIER_SMALL, $smallDoc->determineAmountTier()); // 5000 should be medium $mediumDoc = $this->createFinanceDocument(['amount' => 5000]); $this->assertEquals(FinanceDocument::AMOUNT_TIER_MEDIUM, $mediumDoc->determineAmountTier()); } public function test_document_amount_boundary_medium_large(): void { // 50000 should be medium $mediumDoc = $this->createFinanceDocument(['amount' => 50000]); $this->assertEquals(FinanceDocument::AMOUNT_TIER_MEDIUM, $mediumDoc->determineAmountTier()); // 50001 should be large $largeDoc = $this->createFinanceDocument(['amount' => 50001]); $this->assertEquals(FinanceDocument::AMOUNT_TIER_LARGE, $largeDoc->determineAmountTier()); } public function test_document_status_constants(): void { $this->assertEquals('pending', FinanceDocument::STATUS_PENDING); $this->assertEquals('approved_cashier', FinanceDocument::STATUS_APPROVED_CASHIER); $this->assertEquals('approved_accountant', FinanceDocument::STATUS_APPROVED_ACCOUNTANT); $this->assertEquals('approved_chair', FinanceDocument::STATUS_APPROVED_CHAIR); $this->assertEquals('rejected', FinanceDocument::STATUS_REJECTED); } public function test_cashier_can_approve_pending_document(): void { $cashier = $this->createCashier(); $document = $this->createFinanceDocument(['status' => FinanceDocument::STATUS_PENDING]); $response = $this->withoutMiddleware(VerifyCsrfToken::class) ->actingAs($cashier) ->post(route('admin.finance.approve', $document)); $document->refresh(); $this->assertEquals(FinanceDocument::STATUS_APPROVED_CASHIER, $document->status); } public function test_cashier_can_reject_pending_document(): void { $cashier = $this->createCashier(); $document = $this->createFinanceDocument(['status' => FinanceDocument::STATUS_PENDING]); $response = $this->withoutMiddleware(VerifyCsrfToken::class) ->actingAs($cashier) ->post( route('admin.finance.reject', $document), ['rejection_reason' => 'Test rejection'] ); $document->refresh(); $this->assertEquals(FinanceDocument::STATUS_REJECTED, $document->status); } }