Refactor: Enforce type safety, fix close deadlock, implement assignee restrictions and notify admin fallbacks
This commit is contained in:
@@ -119,3 +119,44 @@ test('transfer without reason throws validation error', function () {
|
||||
|
||||
expect(TicketTransferLog::count())->toBe(0);
|
||||
});
|
||||
|
||||
// ─── Transfer to invalid handler should fail ─────────────────────────
|
||||
test('transfer to handler not in target department throws validation error', function () {
|
||||
$managerRole = Role::create(['name' => 'manager']);
|
||||
$managerRole->givePermissionTo(['transfer-department', 'view-feedback', 'create-feedback', 'update-feedback']);
|
||||
|
||||
$sender = User::factory()->create();
|
||||
$sender->assignRole('manager');
|
||||
|
||||
$fromDept = Department::create(['name' => 'CSKH']);
|
||||
$toDept = Department::create(['name' => 'Ky Thuat']);
|
||||
|
||||
// Handler belongs to Finance department
|
||||
$financeDept = Department::create(['name' => 'Tai Chinh']);
|
||||
$handler = User::factory()->create(['department_id' => $financeDept->id]);
|
||||
|
||||
$channel = FeedbackChannel::create(['name' => 'Phone', 'slug' => 'phone-transfer']);
|
||||
$customer = Customer::create(['name' => 'Test', 'email' => 't@test.com']);
|
||||
|
||||
$feedback = Feedback::create([
|
||||
'customer_id' => $customer->id,
|
||||
'feedback_channel_id' => $channel->id,
|
||||
'title' => 'Transfer To Invalid Handler',
|
||||
'content' => 'Test',
|
||||
'status' => 'pending',
|
||||
'current_department_id' => $fromDept->id,
|
||||
]);
|
||||
|
||||
$this->actingAs($sender);
|
||||
|
||||
$transferService = app(TransferService::class);
|
||||
|
||||
try {
|
||||
$transferService->transfer($feedback, $toDept, 'Chuyen sang kiem tra', $sender, $handler->id);
|
||||
$this->fail('Expected ValidationException but none thrown.');
|
||||
} catch (\Illuminate\Validation\ValidationException $e) {
|
||||
expect($e->errors()['new_assignee_id'][0])->toContain('Người xử lý được chọn không thuộc phòng ban đích');
|
||||
}
|
||||
|
||||
expect(TicketTransferLog::count())->toBe(0);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user