新增聊天室座驾系统
This commit is contained in:
@@ -13,9 +13,11 @@ use App\Models\Department;
|
||||
use App\Models\Gift;
|
||||
use App\Models\Position;
|
||||
use App\Models\Room;
|
||||
use App\Models\ShopItem;
|
||||
use App\Models\Sysparam;
|
||||
use App\Models\User;
|
||||
use App\Models\UserPosition;
|
||||
use App\Models\UserPurchase;
|
||||
use App\Models\VipLevel;
|
||||
use App\Support\PositionPermissionRegistry;
|
||||
use Illuminate\Broadcasting\PresenceChannel;
|
||||
@@ -1095,6 +1097,80 @@ class ChatControllerTest extends TestCase
|
||||
$this->assertStringContainsString($user->username, $presenceMessage['presence_text']);
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试有效座驾用户首次进房时会生成座驾播报并返回座驾入场特效。
|
||||
*/
|
||||
public function test_active_ride_user_join_message_uses_ride_presence_payload(): void
|
||||
{
|
||||
$room = Room::create(['room_name' => 'rideroom']);
|
||||
$user = User::factory()->create(['has_received_new_gift' => true]);
|
||||
$ride = ShopItem::query()->updateOrCreate(['slug' => 'ride_j35'], [
|
||||
'name' => '歼-35测试座驾',
|
||||
'description' => '测试座驾',
|
||||
'icon' => '🛩️',
|
||||
'price' => 18888,
|
||||
'type' => 'ride',
|
||||
'duration_days' => 7,
|
||||
'sort_order' => 80,
|
||||
'is_active' => true,
|
||||
'welcome_message' => '【{name}】驾驶【{ride}】震撼入场',
|
||||
]);
|
||||
UserPurchase::create([
|
||||
'user_id' => $user->id,
|
||||
'shop_item_id' => $ride->id,
|
||||
'status' => 'active',
|
||||
'price_paid' => 18888,
|
||||
'expires_at' => now()->addDays(3),
|
||||
]);
|
||||
|
||||
$response = $this->actingAs($user)->get(route('chat.room', $room->id));
|
||||
|
||||
$response->assertOk();
|
||||
$history = collect($response->viewData('historyMessages'));
|
||||
$rideMessage = $history->first(fn (array $message): bool => ($message['welcome_kind'] ?? '') === 'ride_presence');
|
||||
|
||||
$this->assertNotNull($rideMessage);
|
||||
$this->assertSame('座驾播报', $rideMessage['from_user']);
|
||||
$this->assertSame('j35', $rideMessage['ride_key']);
|
||||
$this->assertStringContainsString($user->username, $rideMessage['content']);
|
||||
$this->assertSame('j35', $response->viewData('initialRideEffect'));
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试过期座驾用户进房时不会触发座驾播报。
|
||||
*/
|
||||
public function test_expired_ride_does_not_trigger_ride_presence_payload(): void
|
||||
{
|
||||
$room = Room::create(['room_name' => '过期房']);
|
||||
$user = User::factory()->create(['has_received_new_gift' => true]);
|
||||
$ride = ShopItem::query()->updateOrCreate(['slug' => 'ride_df5c'], [
|
||||
'name' => '过期座驾',
|
||||
'description' => '测试座驾',
|
||||
'icon' => '🚀',
|
||||
'price' => 18888,
|
||||
'type' => 'ride',
|
||||
'duration_days' => 7,
|
||||
'sort_order' => 80,
|
||||
'is_active' => true,
|
||||
'welcome_message' => '【{name}】驾驶【{ride}】震撼入场',
|
||||
]);
|
||||
$purchase = UserPurchase::create([
|
||||
'user_id' => $user->id,
|
||||
'shop_item_id' => $ride->id,
|
||||
'status' => 'active',
|
||||
'price_paid' => 18888,
|
||||
'expires_at' => now()->subMinute(),
|
||||
]);
|
||||
|
||||
$response = $this->actingAs($user)->get(route('chat.room', $room->id));
|
||||
|
||||
$response->assertOk();
|
||||
$history = collect($response->viewData('historyMessages'));
|
||||
$this->assertNull($history->first(fn (array $message): bool => ($message['welcome_kind'] ?? '') === 'ride_presence'));
|
||||
$this->assertNull($response->viewData('initialRideEffect'));
|
||||
$this->assertSame('expired', $purchase->fresh()->status);
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试新人首次进房时首屏历史包含礼包公告、AI 欢迎和普通进场播报。
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user