| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- <?php
- namespace App\Module\Game\Tests;
- use App\Module\Game\Enums\REWARD_SOURCE_TYPE;
- use App\Module\Game\Services\SkinService;
- use App\Module\Game\Services\RewardService;
- use App\Module\Game\Models\GameRewardGroup;
- use App\Module\Game\Models\GameRewardItem;
- use App\Module\Game\Enums\REWARD_TYPE;
- /**
- * 皮肤系统测试类
- */
- class SkinSystemTest
- {
- /**
- * 测试用户ID
- */
- private int $testUserId = 1;
- /**
- * 运行所有测试
- */
- public function runAllTests(): void
- {
- echo "=== 皮肤系统测试开始 ===\n";
- $this->testInitUserSkin();
- $this->testGetUserSkinInfo();
- $this->testAddSkin();
- $this->testChangeSkin();
- $this->testRewardSkin();
- echo "=== 皮肤系统测试完成 ===\n";
- }
- /**
- * 测试初始化用户皮肤
- */
- private function testInitUserSkin(): void
- {
- echo "\n--- 测试初始化用户皮肤 ---\n";
- $result = SkinService::initUserSkin($this->testUserId);
- echo "初始化结果: " . ($result->success ? "成功" : "失败 - " . $result->message) . "\n";
- }
- /**
- * 测试获取用户皮肤信息
- */
- private function testGetUserSkinInfo(): void
- {
- echo "\n--- 测试获取用户皮肤信息 ---\n";
- $skinInfo = SkinService::getUserSkinInfo($this->testUserId);
- if ($skinInfo) {
- echo "用户ID: {$skinInfo->userId}\n";
- echo "当前皮肤: {$skinInfo->currentSkinId} - {$skinInfo->currentSkinName}\n";
- echo "拥有皮肤: " . implode(', ', $skinInfo->ownedSkins) . "\n";
- } else {
- echo "获取用户皮肤信息失败\n";
- }
- }
- /**
- * 测试添加皮肤
- */
- private function testAddSkin(): void
- {
- echo "\n--- 测试添加皮肤 ---\n";
- // 添加2号皮肤
- $result = SkinService::addSkin($this->testUserId, 2);
- echo "添加2号皮肤: " . ($result->success ? "成功" : "失败 - " . $result->message) . "\n";
- // 再次添加2号皮肤(应该失败)
- $result = SkinService::addSkin($this->testUserId, 2);
- echo "重复添加2号皮肤: " . ($result->success ? "成功" : "失败 - " . $result->message) . "\n";
- }
- /**
- * 测试切换皮肤
- */
- private function testChangeSkin(): void
- {
- echo "\n--- 测试切换皮肤 ---\n";
- // 切换到2号皮肤
- $result = SkinService::changeSkin($this->testUserId, 2);
- echo "切换到2号皮肤: " . ($result->success ? "成功" : "失败 - " . $result->message) . "\n";
- // 切换到未拥有的3号皮肤(应该失败)
- $result = SkinService::changeSkin($this->testUserId, 3);
- echo "切换到3号皮肤: " . ($result->success ? "成功" : "失败 - " . $result->message) . "\n";
- // 切换回1号皮肤
- $result = SkinService::changeSkin($this->testUserId, 1);
- echo "切换回1号皮肤: " . ($result->success ? "成功" : "失败 - " . $result->message) . "\n";
- }
- /**
- * 测试通过奖励组发放皮肤
- */
- private function testRewardSkin(): void
- {
- echo "\n--- 测试通过奖励组发放皮肤 ---\n";
- try {
- // 创建测试奖励组
- $rewardGroup = GameRewardGroup::create([
- 'name' => '皮肤测试奖励组',
- 'code' => 'SKIN_TEST_REWARD',
- 'description' => '用于测试皮肤奖励的奖励组',
- 'is_random' => false,
- 'random_count' => 1,
- ]);
- // 创建皮肤奖励项
- GameRewardItem::create([
- 'group_id' => $rewardGroup->id,
- 'reward_type' => REWARD_TYPE::SKIN->value,
- 'target_id' => 3, // 3号皮肤
- 'param1' => 0,
- 'param2' => 0,
- 'quantity' => 1,
- 'weight' => 1.0,
- 'is_guaranteed' => true,
- ]);
- echo "创建测试奖励组成功,ID: {$rewardGroup->id}\n";
- // 发放奖励(在事务中)
- \Illuminate\Support\Facades\DB::transaction(function () use ($rewardGroup, &$result) {
- $result = RewardService::grantReward($this->testUserId, $rewardGroup->id, REWARD_SOURCE_TYPE::TEST, 1);
- });
- echo "发放皮肤奖励: " . ($result->success ? "成功" : "失败 - " . $result->errorMessage) . "\n";
- if ($result->success) {
- echo "获得的奖励:\n";
- foreach ($result->items as $item) {
- echo " - 奖励类型: {$item->rewardType}, 目标ID: {$item->targetId}, 数量: {$item->quantity}\n";
- }
- }
- // 清理测试数据
- $rewardGroup->rewardItems()->delete();
- $rewardGroup->delete();
- echo "清理测试数据完成\n";
- } catch (\Exception $e) {
- echo "测试奖励发放失败: " . $e->getMessage() . "\n";
- }
- }
- }
|