| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- <?php
- /**
- * 手动测试物品消耗冻结功能
- *
- * 使用方法:php tests/manual_test_item_consume_frozen.php
- */
- require_once __DIR__ . '/../vendor/autoload.php';
- use App\Module\GameItems\Services\ItemService;
- use App\Module\GameItems\Models\ItemUser;
- use Illuminate\Support\Facades\DB;
- // 启动Laravel应用
- $app = require_once __DIR__ . '/../bootstrap/app.php';
- $kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
- $kernel->bootstrap();
- echo "=== 物品消耗冻结功能测试 ===\n";
- $testUserId = 99999;
- $testItemId = 1001;
- try {
- // 清理测试数据
- DB::transaction(function () use ($testUserId, $testItemId) {
- ItemUser::where('user_id', $testUserId)->where('item_id', $testItemId)->delete();
-
- // 创建测试数据
- echo "创建测试数据...\n";
-
- // 添加100个未冻结物品
- ItemUser::create([
- 'user_id' => $testUserId,
- 'item_id' => $testItemId,
- 'instance_id' => null,
- 'quantity' => 100,
- 'is_frozen' => false,
- 'frozen_log_id' => null,
- ]);
-
- // 添加50个冻结物品
- ItemUser::create([
- 'user_id' => $testUserId,
- 'item_id' => $testItemId,
- 'instance_id' => null,
- 'quantity' => 50,
- 'is_frozen' => true,
- 'frozen_log_id' => 999, // 假设的冻结日志ID
- ]);
-
- echo "测试数据创建完成:100个未冻结 + 50个冻结 = 150个总数\n\n";
- });
- // 测试1:不包含冻结物品的消耗(默认行为)
- echo "=== 测试1:不包含冻结物品的消耗 ===\n";
- DB::transaction(function () use ($testUserId, $testItemId) {
- $result = ItemService::consumeItem(
- $testUserId,
- $testItemId,
- null,
- 80,
- ['source_type' => 'test', 'source_id' => 1]
- );
-
- if ($result['success']) {
- echo "✓ 消耗80个物品成功\n";
-
- // 检查剩余数量
- $items = ItemUser::where('user_id', $testUserId)
- ->where('item_id', $testItemId)
- ->get();
-
- $unfrozenQuantity = $items->where('is_frozen', false)->sum('quantity');
- $frozenQuantity = $items->where('is_frozen', true)->sum('quantity');
-
- echo "剩余未冻结物品:{$unfrozenQuantity}个(期望:20个)\n";
- echo "剩余冻结物品:{$frozenQuantity}个(期望:50个)\n";
-
- if ($unfrozenQuantity == 20 && $frozenQuantity == 50) {
- echo "✓ 测试1通过\n\n";
- } else {
- echo "✗ 测试1失败\n\n";
- }
- } else {
- echo "✗ 消耗失败:" . ($result['message'] ?? '未知错误') . "\n\n";
- }
- });
- // 重置测试数据
- DB::transaction(function () use ($testUserId, $testItemId) {
- ItemUser::where('user_id', $testUserId)->where('item_id', $testItemId)->delete();
-
- ItemUser::create([
- 'user_id' => $testUserId,
- 'item_id' => $testItemId,
- 'instance_id' => null,
- 'quantity' => 100,
- 'is_frozen' => false,
- 'frozen_log_id' => null,
- ]);
-
- ItemUser::create([
- 'user_id' => $testUserId,
- 'item_id' => $testItemId,
- 'instance_id' => null,
- 'quantity' => 50,
- 'is_frozen' => true,
- 'frozen_log_id' => 999,
- ]);
- });
- // 测试2:包含冻结物品的消耗
- echo "=== 测试2:包含冻结物品的消耗 ===\n";
- DB::transaction(function () use ($testUserId, $testItemId) {
- $result = ItemService::consumeItem(
- $testUserId,
- $testItemId,
- null,
- 120,
- [
- 'source_type' => 'test',
- 'source_id' => 1,
- 'include_frozen' => true // 包含冻结物品
- ]
- );
-
- if ($result['success']) {
- echo "✓ 消耗120个物品成功(包含冻结物品)\n";
-
- // 检查剩余数量
- $totalQuantity = ItemUser::where('user_id', $testUserId)
- ->where('item_id', $testItemId)
- ->sum('quantity');
-
- echo "剩余总数量:{$totalQuantity}个(期望:30个)\n";
-
- if ($totalQuantity == 30) {
- echo "✓ 测试2通过\n\n";
- } else {
- echo "✗ 测试2失败\n\n";
- }
- } else {
- echo "✗ 消耗失败:" . ($result['message'] ?? '未知错误') . "\n\n";
- }
- });
- // 测试3:不包含冻结物品时数量不足
- echo "=== 测试3:不包含冻结物品时数量不足 ===\n";
- DB::transaction(function () use ($testUserId, $testItemId) {
- // 重置为只有100个未冻结物品
- ItemUser::where('user_id', $testUserId)->where('item_id', $testItemId)->delete();
-
- ItemUser::create([
- 'user_id' => $testUserId,
- 'item_id' => $testItemId,
- 'instance_id' => null,
- 'quantity' => 100,
- 'is_frozen' => false,
- 'frozen_log_id' => null,
- ]);
-
- ItemUser::create([
- 'user_id' => $testUserId,
- 'item_id' => $testItemId,
- 'instance_id' => null,
- 'quantity' => 50,
- 'is_frozen' => true,
- 'frozen_log_id' => 999,
- ]);
-
- try {
- $result = ItemService::consumeItem(
- $testUserId,
- $testItemId,
- null,
- 120, // 尝试消耗120个,但只有100个未冻结
- ['source_type' => 'test', 'source_id' => 1]
- );
-
- echo "✗ 测试3失败:应该抛出异常但没有\n\n";
- } catch (Exception $e) {
- if (strpos($e->getMessage(), '数量不足') !== false) {
- echo "✓ 测试3通过:正确抛出数量不足异常\n";
- echo "异常信息:" . $e->getMessage() . "\n\n";
- } else {
- echo "✗ 测试3失败:异常信息不正确\n";
- echo "异常信息:" . $e->getMessage() . "\n\n";
- }
- }
- });
- // 清理测试数据
- DB::transaction(function () use ($testUserId, $testItemId) {
- ItemUser::where('user_id', $testUserId)->where('item_id', $testItemId)->delete();
- echo "测试数据清理完成\n";
- });
- echo "=== 所有测试完成 ===\n";
- } catch (Exception $e) {
- echo "测试过程中发生错误:" . $e->getMessage() . "\n";
- echo "堆栈跟踪:\n" . $e->getTraceAsString() . "\n";
- }
|