SkinSystemTest.php 5.0 KB

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