forgetCachedPermissions(); Permission::firstOrCreate(['name' => 'close-ticket']); Permission::firstOrCreate(['name' => 'view-feedback']); Permission::firstOrCreate(['name' => 'update-feedback']); Permission::firstOrCreate(['name' => 'transfer-department']); Permission::firstOrCreate(['name' => 'delete-feedback']); Permission::firstOrCreate(['name' => 'create-feedback']); }); test('can upload proof and close ticket in one save operation', function () { Storage::fake('public'); // Create manager who has close permission $managerRole = Role::create(['name' => 'manager']); $managerRole->givePermissionTo(['close-ticket', 'view-feedback', 'update-feedback']); $manager = User::factory()->create(); $manager->assignRole('manager'); $dept = Department::create(['name' => 'CSKH', 'manager_id' => $manager->id]); $channel = FeedbackChannel::create(['name' => 'Email', 'slug' => 'email']); $customer = Customer::create(['name' => 'Test Customer', 'email' => 'test@test.com']); $feedback = Feedback::create([ 'customer_id' => $customer->id, 'feedback_channel_id' => $channel->id, 'title' => 'Test Feedback', 'content' => 'Test content', 'status' => 'resolved', 'current_department_id' => $dept->id, ]); // Mock an uploaded file on disk $path = 'feedback-attachments/mock-proof.pdf'; Storage::disk('public')->put($path, 'dummy content'); $this->actingAs($manager); // Run Filament form test Livewire::test(EditFeedback::class, ['record' => $feedback->id]) ->fillForm([ 'status' => 'closed', 'attachment_collection' => 'proof_of_resolution', 'attachments' => [$path], ]) ->call('save') ->assertHasNoFormErrors(); // Verify feedback is closed expect($feedback->fresh()->status)->toBe('closed'); // Verify attachment exists in database expect($feedback->attachments()->where('collection', 'proof_of_resolution')->exists())->toBeTrue(); });