VegetealHandlerDefendedTest.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <?php
  2. namespace Tests\Unit\Pet;
  3. use App\Module\AppGame\Handler\Pet\VegetealHandler;
  4. use App\Module\Pet\Dtos\StealResultDto;
  5. use App\Module\Pet\Services\PetStealService;
  6. use Illuminate\Support\Facades\DB;
  7. use Illuminate\Support\Facades\Log;
  8. use Mockery;
  9. use Tests\TestCase;
  10. use UCore\Exception\LogicException;
  11. use Uraus\Kku\Request\RequestPetVegeteal;
  12. use Uraus\Kku\Response;
  13. /**
  14. * 测试偷菜被防御时的Handler行为
  15. */
  16. class VegetealHandlerDefendedTest extends TestCase
  17. {
  18. protected function setUp(): void
  19. {
  20. parent::setUp();
  21. // Mock Log facade
  22. Log::shouldReceive('info')->andReturn(true);
  23. Log::shouldReceive('warning')->andReturn(true);
  24. }
  25. protected function tearDown(): void
  26. {
  27. Mockery::close();
  28. parent::tearDown();
  29. }
  30. /**
  31. * 测试偷菜被防御时抛出异常
  32. */
  33. public function test_steal_defended_throws_exception()
  34. {
  35. // Mock DB transaction
  36. DB::shouldReceive('transaction')->andReturnUsing(function ($callback) {
  37. return $callback();
  38. });
  39. // Mock PetStealService 返回被防御的结果
  40. $defendedResult = StealResultDto::defended(123, 45, 46);
  41. $mockService = Mockery::mock('alias:' . PetStealService::class);
  42. $mockService->shouldReceive('stealCrop')
  43. ->once()
  44. ->with(39186, 39170, 14984, 45)
  45. ->andReturn($defendedResult);
  46. // 创建请求对象
  47. $request = new RequestPetVegeteal();
  48. $request->setUserId(39170);
  49. $request->setPetId(45);
  50. $request->setPlantId(14984);
  51. // 创建Handler实例
  52. $response = new Response();
  53. $handler = new VegetealHandler($response);
  54. $handler->user_id = 39186;
  55. // 期望抛出LogicException
  56. $this->expectException(LogicException::class);
  57. $this->expectExceptionMessage('偷菜被防御,偷菜失败');
  58. // 执行测试
  59. $handler->handle($request);
  60. }
  61. /**
  62. * 测试偷菜失败时抛出异常
  63. */
  64. public function test_steal_failed_throws_exception()
  65. {
  66. // Mock DB transaction
  67. DB::shouldReceive('transaction')->andReturnUsing(function ($callback) {
  68. return $callback();
  69. });
  70. // Mock PetStealService 返回失败的结果
  71. $failedResult = StealResultDto::failed('作物不存在', 124, 45, null);
  72. $mockService = Mockery::mock('alias:' . PetStealService::class);
  73. $mockService->shouldReceive('stealCrop')
  74. ->once()
  75. ->with(39186, 39170, 14984, 45)
  76. ->andReturn($failedResult);
  77. // 创建请求对象
  78. $request = new RequestPetVegeteal();
  79. $request->setUserId(39170);
  80. $request->setPetId(45);
  81. $request->setPlantId(14984);
  82. // 创建Handler实例
  83. $response = new Response();
  84. $handler = new VegetealHandler($response);
  85. $handler->user_id = 39186;
  86. // 期望抛出LogicException
  87. $this->expectException(LogicException::class);
  88. $this->expectExceptionMessage('作物不存在');
  89. // 执行测试
  90. $handler->handle($request);
  91. }
  92. /**
  93. * 测试偷菜成功时正常返回
  94. */
  95. public function test_steal_success_returns_normally()
  96. {
  97. // Mock DB transaction
  98. DB::shouldReceive('transaction')->andReturnUsing(function ($callback) {
  99. return $callback();
  100. });
  101. // Mock PetStealService 返回成功的结果
  102. $successResult = StealResultDto::success(8, 3, 0, 125, 45, 46);
  103. $mockService = Mockery::mock('alias:' . PetStealService::class);
  104. $mockService->shouldReceive('stealCrop')
  105. ->once()
  106. ->with(39186, 39170, 14984, 45)
  107. ->andReturn($successResult);
  108. // 创建请求对象
  109. $request = new RequestPetVegeteal();
  110. $request->setUserId(39170);
  111. $request->setPetId(45);
  112. $request->setPlantId(14984);
  113. // 创建Handler实例
  114. $response = new Response();
  115. $handler = new VegetealHandler($response);
  116. $handler->user_id = 39186;
  117. // 执行测试 - 应该正常返回,不抛出异常
  118. $result = $handler->handle($request);
  119. // 验证结果
  120. $this->assertInstanceOf(\Uraus\Kku\Response\ResponsePetVegeteal::class, $result);
  121. }
  122. }