SkinSystemTest.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <?php
  2. namespace App\Module\Game\Tests;
  3. use App\Module\Game\Services\SkinService;
  4. use App\Module\Game\Services\RewardService;
  5. use App\Module\Game\Models\GameRewardGroup;
  6. use App\Module\Game\Models\GameRewardItem;
  7. use App\Module\Game\Enums\REWARD_TYPE;
  8. /**
  9. * 皮肤系统测试类
  10. */
  11. class SkinSystemTest
  12. {
  13. /**
  14. * 测试用户ID
  15. */
  16. private int $testUserId = 1;
  17. /**
  18. * 运行所有测试
  19. */
  20. public function runAllTests(): void
  21. {
  22. echo "=== 皮肤系统测试开始 ===\n";
  23. $this->testInitUserSkin();
  24. $this->testGetUserSkinInfo();
  25. $this->testAddSkin();
  26. $this->testChangeSkin();
  27. $this->testRewardSkin();
  28. echo "=== 皮肤系统测试完成 ===\n";
  29. }
  30. /**
  31. * 测试初始化用户皮肤
  32. */
  33. private function testInitUserSkin(): void
  34. {
  35. echo "\n--- 测试初始化用户皮肤 ---\n";
  36. $result = SkinService::initUserSkin($this->testUserId);
  37. echo "初始化结果: " . ($result->success ? "成功" : "失败 - " . $result->message) . "\n";
  38. }
  39. /**
  40. * 测试获取用户皮肤信息
  41. */
  42. private function testGetUserSkinInfo(): void
  43. {
  44. echo "\n--- 测试获取用户皮肤信息 ---\n";
  45. $skinInfo = SkinService::getUserSkinInfo($this->testUserId);
  46. if ($skinInfo) {
  47. echo "用户ID: {$skinInfo->userId}\n";
  48. echo "当前皮肤: {$skinInfo->currentSkinId} - {$skinInfo->currentSkinName}\n";
  49. echo "拥有皮肤: " . implode(', ', $skinInfo->ownedSkins) . "\n";
  50. } else {
  51. echo "获取用户皮肤信息失败\n";
  52. }
  53. }
  54. /**
  55. * 测试添加皮肤
  56. */
  57. private function testAddSkin(): void
  58. {
  59. echo "\n--- 测试添加皮肤 ---\n";
  60. // 添加2号皮肤
  61. $result = SkinService::addSkin($this->testUserId, 2);
  62. echo "添加2号皮肤: " . ($result->success ? "成功" : "失败 - " . $result->message) . "\n";
  63. // 再次添加2号皮肤(应该失败)
  64. $result = SkinService::addSkin($this->testUserId, 2);
  65. echo "重复添加2号皮肤: " . ($result->success ? "成功" : "失败 - " . $result->message) . "\n";
  66. }
  67. /**
  68. * 测试切换皮肤
  69. */
  70. private function testChangeSkin(): void
  71. {
  72. echo "\n--- 测试切换皮肤 ---\n";
  73. // 切换到2号皮肤
  74. $result = SkinService::changeSkin($this->testUserId, 2);
  75. echo "切换到2号皮肤: " . ($result->success ? "成功" : "失败 - " . $result->message) . "\n";
  76. // 切换到未拥有的3号皮肤(应该失败)
  77. $result = SkinService::changeSkin($this->testUserId, 3);
  78. echo "切换到3号皮肤: " . ($result->success ? "成功" : "失败 - " . $result->message) . "\n";
  79. // 切换回1号皮肤
  80. $result = SkinService::changeSkin($this->testUserId, 1);
  81. echo "切换回1号皮肤: " . ($result->success ? "成功" : "失败 - " . $result->message) . "\n";
  82. }
  83. /**
  84. * 测试通过奖励组发放皮肤
  85. */
  86. private function testRewardSkin(): void
  87. {
  88. echo "\n--- 测试通过奖励组发放皮肤 ---\n";
  89. try {
  90. // 创建测试奖励组
  91. $rewardGroup = GameRewardGroup::create([
  92. 'name' => '皮肤测试奖励组',
  93. 'code' => 'SKIN_TEST_REWARD',
  94. 'description' => '用于测试皮肤奖励的奖励组',
  95. 'is_random' => false,
  96. 'random_count' => 1,
  97. ]);
  98. // 创建皮肤奖励项
  99. GameRewardItem::create([
  100. 'group_id' => $rewardGroup->id,
  101. 'reward_type' => REWARD_TYPE::SKIN->value,
  102. 'target_id' => 3, // 3号皮肤
  103. 'param1' => 0,
  104. 'param2' => 0,
  105. 'quantity' => 1,
  106. 'weight' => 1.0,
  107. 'is_guaranteed' => true,
  108. ]);
  109. echo "创建测试奖励组成功,ID: {$rewardGroup->id}\n";
  110. // 发放奖励(在事务中)
  111. \Illuminate\Support\Facades\DB::transaction(function () use ($rewardGroup, &$result) {
  112. $result = RewardService::grantReward($this->testUserId, $rewardGroup->id, 'test', 1);
  113. });
  114. echo "发放皮肤奖励: " . ($result->success ? "成功" : "失败 - " . $result->errorMessage) . "\n";
  115. if ($result->success) {
  116. echo "获得的奖励:\n";
  117. foreach ($result->items as $item) {
  118. echo " - 奖励类型: {$item->rewardType}, 目标ID: {$item->targetId}, 数量: {$item->quantity}\n";
  119. }
  120. }
  121. // 清理测试数据
  122. $rewardGroup->rewardItems()->delete();
  123. $rewardGroup->delete();
  124. echo "清理测试数据完成\n";
  125. } catch (\Exception $e) {
  126. echo "测试奖励发放失败: " . $e->getMessage() . "\n";
  127. }
  128. }
  129. }